Usage Guide¶
Prerequisites¶
adbin PATH (brew install android-platform-toolson macOS)- Android device with root (Magisk) and USB debugging enabled
Build & Run¶
No root on the host is required. All privileged operations run on the device via adb shell su.
Connecting a Device¶
USB¶
Connect the device and run memdroid. It auto-selects if only one device is found. If multiple devices are connected, you will be prompted to select one.
Wi-Fi ADB¶
Or in the Web UI: Device panel → Wi-Fi Connection field → Connect.To enable Wi-Fi ADB on the device:
Menu Overview¶
--- Device --- --- Pattern / String ---
d. Select Device p. Byte Pattern Search (e.g. FF 00 ?? 01)
dw. Connect Wi-Fi s8. String Search UTF-8
dd. Disconnect Wi-Fi s16. String Search UTF-16LE
sw. Modify String at Address
--- Process ---
1. Process List --- Memory ---
1s. Attach by Name 15. Modify Address
2. Attach by PID 16. Undo Last Modify
3. Detach 17. Freeze Address
4. Stop Process 17a. Freeze All Candidates
5. Continue Process 18. Unfreeze Address
19. List Frozen
--- Search --- 20. Watch Address
6. Set Value Type 21. Unwatch Address
7. Search Value 22. List Watched
7r. Search (Region) 23. Dump Memory Region
8. Filter: Changed 23m. Show Memory Maps
9. Filter: Unchanged
10. Filter: Increased --- Pointer ---
11. Filter: Decreased pt. Pointer Scan
12. Filter: Exact Val
13. Show Candidates --- Bookmarks ---
14. Reset Search 24. Add Bookmark
25. List Bookmarks
--- Session --- 26. Modify All Bookmarks
28. Save State 27. Remove Bookmark
29. Load State
Typical Workflows¶
Numeric value cheat (e.g. HP)¶
1s → Attach by Name → "com.example.game"
4 → Stop process
7 → Search: 100 (current HP)
5 → Continue process
→ Take damage in-game
4 → Stop process
11 → Filter: Decreased (HP went down)
→ Repeat until ~5 candidates remain
15 → Modify the address (set HP to 9999)
17 → Freeze the address (hold at 9999)
24 → Add Bookmark "HP"
Pointer scan (stable address across restarts)¶
7 → Search current HP value, narrow to 1 candidate
pt → Pointer Scan → target address (from candidate)
→ Wait 30-60 s for results
→ Note a chain like [libil2cpp.so+0x1234]+0x20+0x8
→ Next session: follow that chain to find HP again
String / name edit¶
Byte pattern search¶
Region-filtered scan (faster)¶
Byte sequence search¶
Session save & restore¶
Value Types¶
| Type | Size | Example use |
|---|---|---|
| int32 | 4 bytes | HP, ammo, score (signed) |
| int64 | 8 bytes | currency, large counters (signed) |
| float32 | 4 bytes | position X/Y, speed |
| float64 | 8 bytes | high-precision floats |
| uint32 | 4 bytes | unsigned integer counters |
| uint64 | 8 bytes | large unsigned values |
| bytes | variable | arbitrary byte sequences |
Switch type with menu 6. Changing type resets the search session.
Region Filters (7r)¶
| Option | Scans | Best for |
|---|---|---|
| all | all rw regions | thorough first scan |
| heap | [heap] |
most game object values |
| stack | [stack] |
local variables |
| anon | anonymous maps | JIT / runtime allocations |
| custom | address range | known library segment |
Web UI¶
Open http://localhost:8080 while memdroid is running. All features are available.
Special Web UI features: - Watch panel: real-time value change stream via WebSocket - Maps panel: interactive memory region browser with filter - Candidates: "Ptr" button pre-fills the Pointer Scan target - Device panel: Wi-Fi connect / disconnect without CLI
Notes¶
- Freeze writes the value every 100 ms in the background. Use
18or17ato stop. - Watch prints to stdout (and Web UI Watch panel) when a value changes.
- Undo reverts only the most recent
Modify. Depth shown in status bar. - Pointer scan may take 30-60 s on large processes; it reads all mapped memory.
- Dump output is standard hex dump format compatible with any hex editor.