Skip to content

Repository files navigation

hook-mcp

通过 MCP 将 Android 内核驱动能力提供给 AI 或其他 MCP 客户端。项目由 Python MCP 服务、Android TCP daemon 和内核 ioctl hook 驱动组成。

驱动相关

驱动非本人编译,本项目中包含的所有驱动均不做推广,欢迎自行修改源码以支持更多的驱动,允许仓库合并。

驱动非本人编译,本项目中包含的所有驱动均不做推广,可以自行修改源码以支持更多的驱动,允许仓库合并。
    |
    v
驱动非本人编译,本项目中包含的所有驱动均不做推广,可以自行修改源码以支持更多的驱动,允许仓库合并。
    |
    v
驱动非本人编译,本项目中包含的所有驱动均不做推广,可以自行修改源码以支持更多的驱动,允许仓库合并。
    |
    v
驱动非本人编译,本项目中包含的所有驱动均不做推广,可以自行修改源码以支持更多的驱动,允许仓库合并。

架构

MCP Client
    |
    v
Python MCP Server
    |
    | TCP / ADB Forward
    v
Android hook_daemon
    |
    | ioctl(OP_CMD_*)
    v
内核 hook 驱动

daemon 使用 ioctl 命令号与驱动通信,不打开专用设备节点,默认通过 fd=0 触发内核 hook。具体 ABI 见 daemon/driver_abi.h驱动对接头/hook对接..h

功能分类

驱动功能

这些工具会调用驱动 ioctl:

MCP 工具 驱动命令 功能
read_memory 601 读取目标进程内存
write_memory 602 写入目标进程内存
get_module_base 603 通过驱动获取模块基址
hide_process 605 隐藏 daemon 进程
unhook 606 卸载驱动 hook
recover_process 607 恢复隐藏进程
gyro_control 608 设置陀螺仪参数
dump_memory 601 读取内存并在 Python 侧格式化
ping / drvinfo 601 驱动连接诊断

内存读写工具需要显式传入正数 pid。例如:

read_memory(addr="0x7a12340000", size=16, pid=12345)
write_memory(addr="0x7a12340000", value="deadbeef", data_type="hex", pid=12345)

用户态辅助功能

工具名带 w_ 前缀,表示不直接调用驱动:

MCP 工具 实现方式
w_get_pid Android pidof
w_set_pid 设置 daemon 内部目标 PID
w_read_maps 读取 /proc/<pid>/maps
w_read_file 由 daemon 读取 Android 文件并返回文本
w_list_regions 解析 maps 并列出可读区域
w_scan_memory 用户态遍历区域,实际读取仍使用驱动
w_follow_pointers 用户态组织指针链,实际读取使用驱动
w_get_kernel_version 执行 uname -r

驱动头文件虽然保留了 OP_CMD_GETPID = 604,但没有公开参数结构,参考实现也没有调用该 ioctl。因此 PID 查询明确标记为 w_get_pid,不会伪造驱动调用。

编译 daemon

需要 Android NDK:

cd daemon
NDK=/path/to/android-ndk ./build.sh arm64

支持:

  • arm64:默认目标
  • arm32armeabi-v7a

部署到 Android

adb push daemon/hook_daemon /data/local/tmp/
adb shell "su -c 'chmod 755 /data/local/tmp/hook_daemon'"
adb shell "su -c '/data/local/tmp/hook_daemon 7777 &'"
adb forward tcp:7777 tcp:7777

daemon 默认只监听 Android 回环地址,建议通过 ADB forward 访问,不直接暴露到局域网。

安装 Python 依赖

cd mcp_server
pip install -r requirements.txt

MCP 配置

mcp_config.json 示例:

{
  "mcpServers": {
    "hook-mcp": {
      "command": "python",
      "args": ["/absolute/path/hook-mcp/mcp_server/server.py"],
      "env": {
        "HOOK_DAEMON_HOST": "127.0.0.1",
        "HOOK_DAEMON_PORT": "7777"
      }
    }
  }
}

TCP 协议

请求和响应均为单行文本:

请求: COMMAND|arg1|arg2|...\n
成功: OK|result\n
失败: ERR|message\n

驱动命令包括 READWRITEMODBASEHIDEPROCRECOVERPROCUNHOOKGYRO。用户态辅助命令包括 GETPIDSETPIDREADMAPSREADFILEREGIONSSCANPTRCHAINKERNELV

驱动非本人编译,本项目中包含的所有驱动均不做推广,可以自行修改源码以支持更多的驱动,允许仓库合并。

注意事项

  • daemon 和驱动操作需要 Android root 权限。
  • write_memoryhide_processunhookgyro_control 可能修改目标进程或系统状态,请确认目标 PID 和参数。
  • unhook 执行后,后续驱动操作可能失效。
  • 项目中包含的驱动文件不代表驱动兼容所有 Android 内核版本,实际 ioctl 行为需要在目标设备验证。
  • 请仅在拥有授权的设备和进程上使用。

许可证

LICENSE

About

使用驱动对安卓设备进行内存调试,驱动可修改

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages