README
🚀 Frida Game Hacking MCP
Frida Game Hacking MCP 是一个模型上下文协议(MCP)服务器,借助 Frida 为游戏破解提供 类似 Cheat Engine 的功能。它能让 AI 助手和自动化工具进行内存扫描、数值修改、模式匹配、函数挂钩和代码注入。
✨ 主要特性
内存操作(类似 Cheat Engine)
- 数值扫描:按类型(int8 - 64、float、double、string)在内存中查找数值。
- 扫描细化:使用
scan_next、scan_changed、scan_unchanged缩小扫描结果范围。 - 模式扫描:支持通配符(
??)的字节数组(AoB)扫描。 - 内存读写:能感知类型地读取和修改内存。
函数挂钩与代码注入
- 拦截函数:使用
onEnter/onLeaveJavaScript 回调进行挂钩。 - 替换函数:使函数返回自定义值。
- 模块挂钩:通过
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 挂钩
- 软件测试:故障注入、行为修改
- 恶意软件分析:沙箱环境中的动态分析
🔧 技术细节
安全注意事项
本工具仅用于以下目的:
- 教育用途
- 对自己拥有或获得测试许可的软件进行安全研究
- 单机/离线游戏的模组开发
请勿用于以下行为:
- 在线多人游戏作弊
- 非法绕过软件保护
- 任何恶意目的
贡献
欢迎贡献代码!请按以下步骤操作:
- 分叉仓库
- 创建功能分支
- 提交拉取请求
📄 许可证
本项目采用 MIT 许可证,请参阅 LICENSE 文件。
致谢
- 基于 Ole Andre Vadla Ravnas 开发的 Frida 构建
- MCP 协议由 Anthropic 提供
- 受 Dark Byte 开发的 Cheat Engine 启发
链接
专为 AI 辅助游戏破解和安全研究而构建。
扫码联系在线客服