Skip to content

Latest commit

 

History

History
159 lines (97 loc) · 7.66 KB

File metadata and controls

159 lines (97 loc) · 7.66 KB

常见问题(FAQ)

连接与部署

提示「无法连接 ggmcp 服务」

  1. 「连接」页点「启动服务」——服务端可能已停(:8788 没有监听)。
  2. 从未部署过(或换过设备)时,先点「部署内置二进制并启动」。
  3. 仍失败点「自检」,按输出逐项检查:root 是否 uid=0/data/local/tmp/ggmcp/ggmcp 是否存在且有可执行权限、进程是否在跑、8788 是否监听。
  4. 命令行排查:adb shell su -c 'sh /data/local/tmp/ggmcp/ggmcp_ctl.sh status',或直接看 ggmcp.log

部署时提示 Text file busy

旧的服务端进程还占着二进制文件。当前版本部署时会先停服再写入;如果你用的是老版本或手工 adb push,先点「停止服务」(或 su -c 'pkill -x ggmcp')再部署。

启动服务后立刻退出 / 没任何输出

点「查看日志」看 ggmcp.log 末尾内容。常见原因:

  • 二进制架构不匹配(例如把 arm64 的二进制推到了 x86_64 模拟器)——重新用「部署内置二进制并启动」,应用会按 ABI 自动选;
  • 二进制被截断(传输中断),重新部署一次;
  • 端口被占用:su -c 'netstat -tlnp | grep 8788'

「测试 root」显示未获得 root

  • 确认设备确实已 root(Magisk / KernelSU / 模拟器自带 su)。
  • Magisk 里给本应用授权(可在 Magisk → 超级用户里手动允许),再回到应用重试。
  • 部分机型需要关闭「Magisk Hide / Zygisk 隐藏」对本应用的隐藏,否则 su 请求会被静默拒绝。
  • 应用会逐个探测常见 su 路径(/system/bin/su/debug_ramdisk/su/data/adb/ksu/bin/su 等),并在「测试 root」输出里显示探测记录,便于判断是路径问题还是授权问题。

开机自启没生效

  • 需要先点「写入控制/自启脚本」;脚本会写到 /data/adb/service.d/ggmcp.sh(Magisk / KernelSU 的启动目录)。
  • 确认目录存在且有执行权限:su -c 'ls -l /data/adb/service.d/'
  • 脚本里有 sleep 20,开机后要等一会儿服务才起来。
  • 部分系统会在开机后清理 /data/local/tmp,此时二进制会被删掉,需要重新部署(可以把二进制放到 /data/adb/ 下改用自启脚本的路径)。

搜索与修改

附加成功但搜不到值

  • 区域问题anonymous 在现代 Android 上几乎是空的,默认 all 才是全扫。
  • 类型问题:金币可能是 dword 也可能是 float/double,先试 auto
  • 数值确实不在内存里:可能是加密值(用 Xor 加密搜索)、可能是服务器下发(本地只是显示),或数值显示与实际存储差了倍数/单位。
  • 数值会变:用两步搜索(搜旧值 → 让值变化 → refine)。

搜索结果太多(几万条)

  1. 换更精确的类型(autodword)。
  2. 用两步 refine 缩小。
  3. 换区域(allheap)。
  4. 用「结果」页的「分析结果」看值分组和地址相邻关系,挑更像结构体的地址。
  5. 「工具」页调小 searchCandidateMax(内存紧张时)。

改了值,游戏里又变回去了

说明该地址只是副本或被每帧重算 —— 用「冻结」按住,或者去改真正的数据源(结合「指针扫描」与「计算偏移」找静态地址)。

读取模式 kernel / processvm / memfile 有什么区别

模式 条件 说明
kernel 安装 KPatch-Next 且加载了 MemoryDriver_IOCTLhook.kpm 走内核 ioctl 通道,速度快、痕迹小
processvm 内核通道不可用 process_vm_readv 系统调用
memfile 前两者都不可用 /proc/<pid>/mem,兼容性最好、速度最慢

三种模式功能一致,只是性能与隐蔽性不同;看到 memfile 不代表出错。

冻结导致耗电/卡顿

冻结是“按固定间隔持续写入”,间隔越小越耗电。验证完及时「解冻全部」,或把 freezeIntervalMs 调大(如 200ms)。


GameGuardian 联动

GG 文件读取按钮报错

上游 v2.9.13 调整了工具命名,导致两个名字对应的实现不一致:

  • 读 GG 数据文件的实现,在上游源码里叫 gg_read_gg_file未登记在工具列表中,只有 handler);
  • 工具列表里登记的 gg_list_gg_files,在上游源码里没有对应的 handler。

因此:

服务端来源 「读GG文件」按钮 「列GG数据文件」按钮
APK 内置二进制(v2.9.x 快照) 报未知工具 可用
用本仓库 server/ 源码重新编译 可用 报未知工具

处理办法:用能用的那个按钮;或在「工具 → RAW 调用」里手动填可用的工具名(gg_read_gg_filegg_list_gg_files)。等上游把两者对齐后即可同时可用。

绑定 GG 失败

  • 确认 GG 修改器正在运行(绑定会检查进程存活);
  • 改版 GG 的随机包名也能被识别(靠 /data/data/*/files/GG-* 目录特征),但如果 GG 已被完全卸载/冻结则无法绑定;
  • 如果设备上装了多个 GG,可在 gg_bind_gg 里用 package 参数指定。

读不到 Lua 脚本输出

脚本必须自己把结果写出去,例如:

local f = io.open("/sdcard/ggmcp/myresult.out.txt", "w")
f:write(tostring(gg.getResultsCount()))
f:close()

写入位置要和应用「读脚本输出」读取的 <脚本名>.out.txt 一致(默认目录 /sdcard/ggmcp/);另外脚本要真正在 GG 里执行过。


应用本身

结果页显示空白

旧版本在后台线程切页时会出现该问题;当前版本切页会先清焦点、收起键盘、滚回顶部,已修复。若仍遇到,请附日志提 Issue。

应用在后台被杀 / 搜索中途断开

系统的电池优化会杀掉后台进程,导致长请求中断:

  • 在系统设置里把本应用加入「不优化/允许后台运行」白名单;
  • 在最近任务里给应用加锁;
  • 长搜索建议缩短范围(先 heap),或分多次 refine。

支持哪些 CPU 架构

内置 arm64-v8a(真机)与 x86_64(模拟器 / x86 设备)两种服务端二进制。不支持 32 位(服务端使用了 64 位地址常量,无法编译 32 位目标);其它架构请自行提供 64 位 ggmcp 并用「导入二进制文件…」。

应用会联网吗?会上传数据吗?

不会。应用只与本机 127.0.0.1:8788 通信(或你手动填写的局域网地址),没有统计、没有广告、没有第三方 SDK。日志只保存在应用内存中,随时可清空。

没有 root 能用吗?

不能。部署服务端、读写其它进程内存、暂停进程都需要 root。没有 root 时应用可以安装和打开,但核心功能不可用。

能否用于 Android 15 / 16 或平板

应用 minSdk 26targetSdk 34,在更高版本 Android 上通常可正常运行;界面为手机竖屏设计,平板可用但布局不会自适应放大。若遇到问题请提 Issue 并注明系统版本。

能用在电脑或 iOS 上吗

服务端本身是 Linux/Android 的 Go 程序(依赖 /proc 与内核通道),不能直接在 Windows/macOS/iOS 上运行。电脑端可以用 adb forward tcp:8788 tcp:8788 后直接用 curl 或 MCP 客户端操作手机上的服务(见 TOOLS.md)。


其它

想反馈问题

请按 CONTRIBUTING.md 收集信息后提交 Issue,务必附上「日志」页的调用记录与「自检」输出。

服务端相关的功能请求

server/ 是上游项目的逐字快照,功能与协议问题请提到上游仓库