mirror of
https://github.com/NohamR/RMHook.git
synced 2026-01-10 06:28:12 +00:00
Add build modes and dev hooks, improve injection and docs
Introduces build mode options (rmfakecloud, qmldiff, dev, all) to CMake and build scripts, enabling selective compilation of hooks for cloud redirection, Qt resource hooking, and reverse engineering. Adds new hooks and memory logging for dev mode, updates injection script to handle libzstd.1.dylib dependency, and documents build modes in README.
This commit is contained in:
@@ -1,14 +1,42 @@
|
||||
#!/bin/bash
|
||||
# Script to compile the reMarkable dylib
|
||||
# Script to compile the reMarkable dylib with different build modes
|
||||
|
||||
# Build modes:
|
||||
# rmfakecloud - Redirect reMarkable cloud to rmfakecloud server (default)
|
||||
# qmldiff - Qt resource data registration hooking (WIP)
|
||||
# dev - Development/reverse engineering mode with all hooks
|
||||
|
||||
# By default, compile reMarkable
|
||||
APP_NAME=${1:-reMarkable}
|
||||
PROJECT_DIR=$(cd "$(dirname "$0")/.." && pwd)
|
||||
|
||||
# Qt path detection (adjust according to your installation)
|
||||
QT_PATH=${QT_PATH:-"$HOME/Qt/6.10.0"}
|
||||
|
||||
echo "🔨 Compiling $APP_NAME.dylib..."
|
||||
# Parse build mode argument
|
||||
BUILD_MODE=${1:-rmfakecloud}
|
||||
|
||||
# Set CMake options based on build mode
|
||||
CMAKE_OPTIONS=""
|
||||
case "$BUILD_MODE" in
|
||||
rmfakecloud)
|
||||
CMAKE_OPTIONS="-DBUILD_MODE_RMFAKECLOUD=ON -DBUILD_MODE_QMLDIFF=OFF -DBUILD_MODE_DEV=OFF"
|
||||
;;
|
||||
qmldiff)
|
||||
CMAKE_OPTIONS="-DBUILD_MODE_RMFAKECLOUD=OFF -DBUILD_MODE_QMLDIFF=ON -DBUILD_MODE_DEV=OFF"
|
||||
;;
|
||||
dev)
|
||||
CMAKE_OPTIONS="-DBUILD_MODE_RMFAKECLOUD=OFF -DBUILD_MODE_QMLDIFF=OFF -DBUILD_MODE_DEV=ON"
|
||||
;;
|
||||
all)
|
||||
CMAKE_OPTIONS="-DBUILD_MODE_RMFAKECLOUD=ON -DBUILD_MODE_QMLDIFF=ON -DBUILD_MODE_DEV=ON"
|
||||
;;
|
||||
*)
|
||||
echo "❌ Unknown build mode: $BUILD_MODE"
|
||||
echo "Available modes: rmfakecloud (default), qmldiff, dev, all"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "🔨 Compiling reMarkable.dylib (mode: $BUILD_MODE)..."
|
||||
echo "📦 Qt path: $QT_PATH"
|
||||
|
||||
# Create build directories if necessary
|
||||
@@ -17,21 +45,21 @@ cd "$PROJECT_DIR/build"
|
||||
|
||||
# Configure with CMake and compile
|
||||
if [ -d "$QT_PATH" ]; then
|
||||
cmake -DCMAKE_PREFIX_PATH="$QT_PATH" ..
|
||||
cmake -DCMAKE_PREFIX_PATH="$QT_PATH" $CMAKE_OPTIONS ..
|
||||
else
|
||||
echo "⚠️ Qt not found at $QT_PATH, trying without specifying path..."
|
||||
cmake ..
|
||||
cmake $CMAKE_OPTIONS ..
|
||||
fi
|
||||
|
||||
make $APP_NAME
|
||||
make reMarkable
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
echo ""
|
||||
echo "✅ Compilation successful!"
|
||||
echo "📍 Dylib: $PROJECT_DIR/build/dylibs/$APP_NAME.dylib"
|
||||
echo "📍 Dylib: $PROJECT_DIR/build/dylibs/reMarkable.dylib"
|
||||
echo ""
|
||||
echo "🚀 To inject into the reMarkable application:"
|
||||
echo " DYLD_INSERT_LIBRARIES=\"$PROJECT_DIR/build/dylibs/$APP_NAME.dylib\" /Applications/reMarkable.app/Contents/MacOS/reMarkable"
|
||||
echo " DYLD_INSERT_LIBRARIES=\"$PROJECT_DIR/build/dylibs/reMarkable.dylib\" /Applications/reMarkable.app/Contents/MacOS/reMarkable"
|
||||
echo ""
|
||||
else
|
||||
echo "❌ Compilation failed"
|
||||
|
||||
@@ -63,7 +63,27 @@ mkdir -p "$APP_PATH/Contents/Resources/"
|
||||
cp "$DYLIB" "$APP_PATH/Contents/Resources/"
|
||||
echo "[INFO] Copied $DYLIB to $APP_PATH/Contents/Resources/"
|
||||
|
||||
optool install -c load -p "@executable_path/../Resources/$(basename "$DYLIB")" -t "$EXECUTABLE_PATH"
|
||||
# Use optool from the scripts folder
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
|
||||
# Copy libzstd dependency and fix the reference in reMarkable.dylib
|
||||
LIBZSTD_PATH="$SCRIPT_DIR/../libs/libzstd.1.dylib"
|
||||
if [ -f "$LIBZSTD_PATH" ]; then
|
||||
cp "$LIBZSTD_PATH" "$APP_PATH/Contents/Resources/"
|
||||
echo "[INFO] Copied libzstd.1.dylib to $APP_PATH/Contents/Resources/"
|
||||
|
||||
# Update the dylib reference to @executable_path/../Resources (handle multiple possible source paths)
|
||||
DYLIB_IN_APP="$APP_PATH/Contents/Resources/$(basename "$DYLIB")"
|
||||
install_name_tool -change "/usr/local/lib/libzstd.1.dylib" "@executable_path/../Resources/libzstd.1.dylib" "$DYLIB_IN_APP"
|
||||
install_name_tool -change "/usr/local/opt/zstd/lib/libzstd.1.dylib" "@executable_path/../Resources/libzstd.1.dylib" "$DYLIB_IN_APP"
|
||||
install_name_tool -change "/opt/homebrew/lib/libzstd.1.dylib" "@executable_path/../Resources/libzstd.1.dylib" "$DYLIB_IN_APP"
|
||||
install_name_tool -change "/opt/homebrew/opt/zstd/lib/libzstd.1.dylib" "@executable_path/../Resources/libzstd.1.dylib" "$DYLIB_IN_APP"
|
||||
echo "[INFO] Updated libzstd references in $(basename "$DYLIB")"
|
||||
else
|
||||
echo "[WARNING] libzstd.1.dylib not found at $LIBZSTD_PATH - app may fail on systems without zstd"
|
||||
fi
|
||||
|
||||
"$SCRIPT_DIR/optool" install -c load -p "@executable_path/../Resources/$(basename "$DYLIB")" -t "$EXECUTABLE_PATH"
|
||||
echo "[INFO] Injected $DYLIB into $EXECUTABLE_PATH"
|
||||
|
||||
sudo codesign --remove-signature "$EXECUTABLE_PATH"
|
||||
|
||||
BIN
scripts/optool
Executable file
BIN
scripts/optool
Executable file
Binary file not shown.
Reference in New Issue
Block a user