6 Commits
v1.2 ... main

Author SHA1 Message Date
√(noham)²
8f95c65ba9 Update tested version to v3.27.2 and refresh image 2026-05-13 19:05:22 +02:00
√(noham)²
bde78170be Move 'How it works' section in README 2026-05-10 18:57:51 +02:00
√(noham)²
35423e1c1a Update auto-install.sh 2026-05-10 16:30:04 +02:00
√(noham)²
190fd02092 Add auto-install script and update README 2026-05-10 16:28:01 +02:00
√(noham)²
8991f7fbcb Update README.md 2026-05-09 23:25:26 +02:00
√(noham)²
49aa0ec507 Update README.md 2026-05-09 18:15:42 +02:00
3 changed files with 58 additions and 17 deletions

View File

@@ -6,15 +6,20 @@ A dynamic library injection tool for the reMarkable Desktop macOS application, e
RMHook hooks into the reMarkable Desktop app's network layer to redirect API calls from reMarkable's official cloud services to your own [rmfakecloud](https://github.com/ddvk/rmfakecloud) server. This allows you to maintain full control over your documents and data.
### Windows Port
Looking for a Windows version? Check out **[RMHook-Win](https://github.com/NohamR/RMHook-Win)**: A Windows port of RMHook for the reMarkable Desktop application.
## Features
- Network request interception and redirection
- WebSocket connection patching
- MQTT URI modification for screen sharing features
## Compatibility
**Tested and working on:**
- reMarkable Desktop v3.27.1 (released 2026-06-07)
- reMarkable Desktop v3.27.2 (released 2026-06-13)
<p align="center">
<img src="docs/latest.png" width="40%" />
@@ -23,15 +28,22 @@ RMHook hooks into the reMarkable Desktop app's network layer to redirect API cal
## Installation and usage
### Important legal notice
⚠️ **For legal reasons, this repository does not include a pre-patched reMarkable app.** However, the latest compiled dylib is available in the [Releases](https://github.com/NohamR/RMHook/releases/latest) section.
### Step 1: Prepare the reMarkable app
### Auto installation
Run in a terminal:
```bash
bash <(curl -sL https://raw.githubusercontent.com/NohamR/RMHook/refs/heads/main/scripts/auto-install.sh)
```
### Manual installation
#### Step 1: Prepare the reMarkable app
Uses the reMarkable Desktop app from your Applications folder or download it fresh from the [Mac App Store](https://apps.apple.com/app/remarkable-desktop/id1276493162).
### Step 2: Inject the dylib
#### Step 2: Inject the dylib
Use the provided injection script:
```bash
@@ -45,9 +57,9 @@ This script will:
- Remove the `_MASReceipt` folder
- Fix file ownership
### Step 3: Handle document storage
#### Step 3: Handle document storage
#### Important path changes
##### Important path changes
The original Mac App Store version stores data in sandboxed locations:
**Original sandboxed paths:**
@@ -58,7 +70,7 @@ The original Mac App Store version stores data in sandboxed locations:
- Config: `~/Library/Preferences/rmfakecloud.config`
- Documents: `~/Library/Application Support/remarkable`
#### Migration options
##### Migration options
**Option 1: Create a symbolic link** (recommended)
```bash
@@ -73,7 +85,7 @@ mv ~/Library/Containers/com.remarkable.desktop/Data/Library/Application\ Support
~/Library/Application\ Support/remarkable
```
### Step 4: Configure rmfakecloud server
#### Step 4: Configure rmfakecloud server
Quickly access the configuration file from the app's Help menu:
![help-config.png](docs/help-config.png)
@@ -90,14 +102,7 @@ Example configuration:
}
```
### Step 5: Launch the patched app :p
## How it works
RMHook uses [tinyhook](https://github.com/Antibioticss/tinyhook/) to hook into Qt framework functions at runtime:
1. **QNetworkAccessManager::createRequest** - Intercepts HTTP/HTTPS requests
2. **QWebSocket::open** - Patches WebSocket connections
When the app attempts to connect to reMarkable's servers (e.g., `internal.cloud.remarkable.com`), the hooks redirect these requests to your configured host and port.
#### Step 5: Launch the patched app :p
## Configuration
@@ -120,6 +125,14 @@ If the config file doesn't exist, it will be created automatically with default
- Ensure your rmfakecloud server is running and accessible
- Verify the storage path migration was completed
## How it works
RMHook uses [tinyhook](https://github.com/Antibioticss/tinyhook/) to hook into Qt framework functions at runtime:
1. **QNetworkAccessManager::createRequest** - Intercepts HTTP/HTTPS requests
2. **QWebSocket::open** - Patches WebSocket connections
3. **MQTTAsync_createWithOptions** - Modifies MQTT URIs for screen sharing features
When the app attempts to connect to reMarkable's servers (e.g., `internal.cloud.remarkable.com`), the hooks redirect these requests to your configured host and port.
## Credits
- xovi-rmfakecloud: [asivery/xovi-rmfakecloud](https://github.com/asivery/xovi-rmfakecloud) - Original hooking information
- rm-xovi-extensions: [asivery/rm-xovi-extensions](https://github.com/asivery/rm-xovi-extensions) - Extension framework for reMarkable, used as reference for hooking Qt functions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 81 KiB

28
scripts/auto-install.sh Executable file
View File

@@ -0,0 +1,28 @@
#!/usr/bin/env bash
REPO="NohamR/RMHook"
FILE="rmfakecloud.dylib"
APP_PATH="/Applications/remarkable.app"
echo "[INFO] Downloading $FILE..."
curl -sL \
-o "/tmp/$FILE" \
"https://github.com/$REPO/releases/latest/download/$FILE"
# Fix the sandbox
echo "[INFO] Linking sandbox directory..."
ln -sf ~/Library/Containers/com.remarkable.desktop/Data/Library/Application\ Support/remarkable \
~/Library/Application\ Support/remarkable
echo "[INFO] Downloading inject script..."
curl -sL \
-o "/tmp/inject.sh" \
"https://raw.githubusercontent.com/$REPO/refs/heads/main/scripts/inject.sh"
echo "[INFO] Downloading optool..."
curl -sL \
-o "/tmp/optool" \
"https://raw.githubusercontent.com/$REPO/refs/heads/main/scripts/optool"
chmod +x /tmp/inject.sh /tmp/optool
echo "[INFO] Running inject script..."
/tmp/inject.sh "/tmp/$FILE" "$APP_PATH"