返回 MCP 目录
public公开dns本地运行

frida-game-hacking-mcp

一个基于Frida的游戏黑客MCP服务器,提供类似Cheat Engine的内存扫描、数值修改、函数钩子和代码注入能力,支持AI助手进行游戏修改和逆向工程分析。

article

README

🚀 Frida Game Hacking MCP

Frida Game Hacking MCP 是一个模型上下文协议(MCP)服务器,借助 Frida 为游戏破解提供 类似 Cheat Engine 的功能。它能让 AI 助手和自动化工具进行内存扫描、数值修改、模式匹配、函数挂钩和代码注入。

MCP Python Frida License

✨ 主要特性

内存操作(类似 Cheat Engine)

  • 数值扫描:按类型(int8 - 64、float、double、string)在内存中查找数值。
  • 扫描细化:使用 scan_nextscan_changedscan_unchanged 缩小扫描结果范围。
  • 模式扫描:支持通配符(??)的字节数组(AoB)扫描。
  • 内存读写:能感知类型地读取和修改内存。

函数挂钩与代码注入

  • 拦截函数:使用 onEnter/onLeave JavaScript 回调进行挂钩。
  • 替换函数:使函数返回自定义值。
  • 模块挂钩:通过 module!function 名称进行挂钩。
  • 符号解析:将导出解析为地址。

进程管理

  • 进程枚举:列出并过滤正在运行的进程。
  • 附加/分离:连接到正在运行的进程或从当前进程分离。
  • 启动与恢复:以挂起状态启动进程,便于早期挂钩。

调试

  • 断点:通过挂钩设置软件断点。
  • 寄存器访问:在断点处读取 CPU 寄存器。
  • 模块分析:列出模块、导出和导入。

窗口交互(Windows)

  • 截图捕获:截取游戏窗口的屏幕截图。
  • 键盘输入:向游戏窗口发送按键。
  • 窗口管理:列出、聚焦和与窗口交互。

📦 安装指南

# 即将支持从 PyPI 安装
pip install frida-game-hacking-mcp

# 或者从源代码安装
git clone https://github.com/0xhackerfren/frida-game-hacking-mcp.git
cd frida-game-hacking-mcp
pip install -e .

要求

  • Python 3.10 及以上版本
  • Frida 16.0 及以上版本
  • pywin32、pillow(Windows 系统,用于截图功能)
pip install frida frida-tools mcp pillow
# 在 Windows 系统上,还需安装:
pip install pywin32

🚀 快速开始

运行 MCP 服务器

# 直接运行
python -m frida_game_hacking_mcp

# 或者使用入口点
frida-game-hacking-mcp

与 Claude Desktop 进行配置

claude_desktop_config.json 中添加以下内容:

{
  "mcpServers": {
    "frida-game-hacking": {
      "command": "python",
      "args": ["-m", "frida_game_hacking_mcp"]
    }
  }
}

与其他 MCP 客户端进行配置

服务器默认使用标准输入输出传输。使用以下方式连接:

  • 命令:python -m frida_game_hacking_mcp
  • 传输方式:标准输入输出

💻 使用示例

基础用法

Cheat Engine 工作流程:查找并修改生命值

1. 列出进程并找到你的游戏
   > list_processes("game")
   
2. 附加到游戏进程
   > attach("game.exe")
   
3. 初始扫描当前生命值(例如,100)
   > scan_value(100, "int32")
   找到:58,869 个地址
   
4. 在游戏中受到伤害(生命值变为 95)
   > scan_next(95)
   缩小到:1,419 个地址
   
5. 重复操作直到找到地址
   > scan_next(90)
   缩小到:3 个地址
   
6. 获取结果并修改
   > get_scan_results()
   > write_memory("0x12345678", "E7030000")  # 小端序表示的 999

字节数组模式扫描

# 查找代码模式(适用于游戏更新)
> attach("game.exe")
> scan_pattern("89 47 44 ?? ?? 5B 7A", "r-x")
找到:2 个匹配项

# ?? = 通配字节
# "r-x" = 可执行内存区域

高级用法

函数挂钩

# 挂钩一个函数并记录调用
> hook_function("0x401234",
    on_enter="console.log('Args:', args[0], args[1]);",
    on_leave="console.log('Return:', retval);")

# 使一个函数始终返回成功
> replace_function("0x401234", 1)

# 通过模块和函数名进行挂钩
> intercept_module_function("game.dll", "CheckLicense",
    on_leave="retval.replace(1);")

早期挂钩(挂起启动)

# 以挂起状态启动进程
> spawn("C:/Games/game.exe")

# 在代码运行前设置挂钩
> hook_function("0x401234", on_enter="...")

# 恢复执行
> resume()

📚 详细文档

可用工具(共 42 个)

进程管理(6 个)

| 工具 | 描述 | |------|-------------| | list_processes | 枚举正在运行的进程 | | attach | 通过名称或 PID 附加到进程 | | detach | 从当前进程分离 | | spawn | 以挂起状态启动进程 | | resume | 恢复已启动的进程 | | get_session_info | 获取当前会话状态 |

内存操作(10 个)

| 工具 | 描述 | |------|-------------| | read_memory | 读取地址处的字节 | | write_memory | 向地址写入字节/值 | | scan_value | 初始扫描精确值 | | scan_next | 使用新值缩小扫描范围 | | scan_changed | 查找已更改的值 | | scan_unchanged | 查找未更改的值 | | scan_pattern | 带通配符的 AoB 模式扫描 | | get_scan_results | 获取当前扫描结果 | | clear_scan | 重置扫描状态 | | list_memory_regions | 列出内存区域 |

模块信息(5 个)

| 工具 | 描述 | |------|-------------| | list_modules | 列出已加载的模块/DLL | | get_module_info | 获取模块详细信息 | | get_module_exports | 列出模块导出 | | get_module_imports | 列出模块导入 | | resolve_symbol | 将符号解析为地址 |

函数挂钩(6 个)

| 工具 | 描述 | |------|-------------| | hook_function | 使用回调进行挂钩 | | unhook_function | 移除挂钩 | | replace_function | 替换函数返回值 | | hook_native_function | 使用调用约定进行挂钩 | | list_hooks | 列出活动挂钩 | | intercept_module_function | 通过 module!function 进行挂钩 |

调试(4 个)

| 工具 | 描述 | |------|-------------| | set_breakpoint | 设置软件断点 | | remove_breakpoint | 移除断点 | | list_breakpoints | 列出断点 | | read_registers | 读取 CPU 寄存器 |

脚本管理(3 个)

| 工具 | 描述 | |------|-------------| | load_script | 加载自定义 Frida JS 脚本 | | unload_script | 卸载脚本 | | call_rpc | 调用脚本的 RPC 导出 |

窗口交互(5 个,仅适用于 Windows)

| 工具 | 描述 | |------|-------------| | list_windows | 枚举可见窗口 | | screenshot_window | 将窗口截图保存为 PNG 或 base64 格式 | | screenshot_screen | 截取屏幕或区域 | | send_key_to_window | 向窗口发送按键 | | focus_window | 将窗口置于前台 |

标准 MCP(3 个)

| 工具 | 描述 | |------|-------------| | list_capabilities | 列出所有工具 | | get_documentation | 获取帮助和示例 | | check_installation | 验证 Frida 是否安装 |

值类型

| 类型 | 大小 | 描述 | |------|------|-------------| | int8 | 1 字节 | 有符号字节 | | uint8 | 1 字节 | 无符号字节 | | int16 | 2 字节 | 有符号短整型 | | uint16 | 2 字节 | 无符号短整型 | | int32 | 4 字节 | 有符号整型(最常用) | | uint32 | 4 字节 | 无符号整型 | | int64 | 8 字节 | 有符号长整型 | | uint64 | 8 字节 | 无符号长整型 | | float | 4 字节 | 单精度浮点型 | | double | 8 字节 | 双精度浮点型 | | string | 可变 | 以空字符结尾的字符串 |

扫描区域

| 区域 | 描述 | |--------|-------------| | rw- | 读写数据(堆、栈、全局变量) - 值扫描的默认区域 | | r-x | 可执行代码 - 模式扫描的默认区域 | | rwx | 读写执行(罕见,常可被利用) | | r-- | 只读数据 |

平台支持

  • Windows:原生支持
  • Linux:原生支持
  • macOS:原生支持
  • Android:通过 frida-server 支持
  • iOS:通过 frida-server(越狱设备)支持

使用场景

  • 游戏破解:内存编辑、数值修改、辅助工具开发
  • 安全研究:漏洞分析、漏洞利用开发
  • 逆向工程:运行时分析、API 挂钩
  • 软件测试:故障注入、行为修改
  • 恶意软件分析:沙箱环境中的动态分析

🔧 技术细节

安全注意事项

本工具仅用于以下目的:

  • 教育用途
  • 对自己拥有或获得测试许可的软件进行安全研究
  • 单机/离线游戏的模组开发

请勿用于以下行为

  • 在线多人游戏作弊
  • 非法绕过软件保护
  • 任何恶意目的

贡献

欢迎贡献代码!请按以下步骤操作:

  1. 分叉仓库
  2. 创建功能分支
  3. 提交拉取请求

📄 许可证

本项目采用 MIT 许可证,请参阅 LICENSE 文件。

致谢

链接


专为 AI 辅助游戏破解和安全研究而构建。

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端