Ghidra MCP桥
一个模型上下文协议(MCP)服务器,为AI助手提供通过本地HTTP桥与Ghidra交互的能力。该项目使AI工具能够在Ghidra中查询程序信息、列出函数、重命名函数、修补字节和设置注释。
概述
该项目由两个主要部分组成:
- Ghidra扩展 (
McpBridge):一个Java插件,在Ghidra内部运行HTTP服务器,通过REST API端点公开程序数据和操作。 - MCP 服务器 (
mcp_server):一个基于Python的MCP服务器,连接到Ghidra网桥,为AI助手提供工具。
先决条件
在设置此项目之前,请确保已安装以下内容:
- 吉德拉:版本12.0或兼容(从下载 Ghidra官方网站)
- Java开发工具包(JDK):版本11或更高版本(构建Ghidra扩展所需)
- Gradle:7.0或更高版本(用于构建扩展)
- python:3.8或更高版本
- 点:Python包管理器
安装说明
步骤1:配置Ghidra安装路径
构建脚本需要知道Ghidra的安装位置。编辑 build.gradle 两个扩展目录中的文件:
- 打开
McpBridge/build.gradle - 更新
ghidraInstallDir匹配Ghidra安装的路径:
ext.ghidraInstallDir = "D:/ghidra_12.0_PUBLIC_20251205/ghidra_12.0_PUBLIC"将路径替换为实际的Ghidra安装目录。在Windows上,使用正斜杠(/)或逃过一劫(\\).在Linux/Mac上,使用适当的路径格式。
备注:如果你有 ghidra_extension 目录,更新其 build.gradle 文件也是。
第二步:构建Ghidra扩展
- 导航到
McpBridge目录:
cd McpBridge- 使用Gradle构建扩展:
gradle buildExtension这将在 McpBridge/dist/ 目录(例如。, ghidra_12.0_PUBLIC_20260109_McpBridge.zip).
- 如果你也有
ghidra_extension目录,以类似的方式构建它:
cd ../ghidra_extension
gradle buildExtension步骤3:在Ghidra中安装扩展
- 启动Ghidra。
- 首选 File → 安装扩展。..
- 点击 + 按钮(或“添加扩展名”)并导航到您构建的ZIP文件:
- 地点: McpBridge/dist/ghidra_12.0_PUBLIC_YYYYMMDD_McpBridge.zip
- 选中“McpBridge”旁边的框以启用它。
- 点击 好的 并在提示时重新启动Ghidra。
- 重新启动后,打开一个项目并加载一个程序。MCP网桥插件将自动启动并监听
http://127.0.0.1:17664.
您应该在Ghidra的控制台中看到一条消息: MCP Bridge listening on http://127.0.0.1:17664
步骤4:安装Python依赖项
- 导航到
mcp_server目录:
cd mcp_server- 安装所需的Python包:
pip install fastmcp requests或者,如果您更喜欢使用虚拟环境:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install fastmcp requests步骤5:运行MCP服务器
- 确保Ghidra在加载程序的情况下运行(网桥必须处于活动状态)。
- 启动MCP服务器:
python server.py服务器将连接到Ghidra网桥 http://127.0.0.1:17664 并公开以下MCP工具:
- ghidra_health:检查Ghidra桥是否可达 - get_current_program:获取当前程序名称和映像库 - list_functions:列出当前程序中的函数 - get_function_context:获取函数的原型/被调用者/字符串(+可选的反编译文本) - rename_function:在特定入口地址重命名函数 - auto_rename_functions:批量建议/应用默认重命名 FUN_/sub_ 名字 - scan_anti_debug:扫描常见的反调试启发法(API调用+指令助记符) - patch_bytes:特定地址的补丁字节 - set_comment:在地址处设置行尾注释
配置
更改网桥端口
默认情况下,Ghidra网桥在端口上运行 17664。要更改此设置,请执行以下操作:
- 编辑
McpBridge/src/main/java/ghidramcp/McpBridgePlugin.java - 找到这条线:
server = HttpServer.create(new InetSocketAddress("127.0.0.1", 17664), 0); - 将端口号更改为所需的端口。
- 重建扩展并更新
BRIDGE恒定于mcp_server/server.py为了匹配。
MCP服务器配置
MCP服务器连接到网桥 http://127.0.0.1:17664 默认情况下。要更改此设置,请编辑 BRIDGE 恒定于 mcp_server/server.py:
BRIDGE = "http://127.0.0.1:17664"用法
一旦一切就绪:
- 启动Ghidra 并打开一个程序(当插件加载时,桥会自动启动)。
- 启动MCP服务器 通过跑步
python mcp_server/server.py. - 连接您的MCP客户端 (例如,Claude Desktop、Cursor)连接到MCP服务器。
AI助手现在可以通过MCP工具与Ghidra交互,使其能够:
- 查询程序信息
- 列出并分析功能
- 重命名函数
- 修补二进制数据
- 向代码添加注释
故障排除
扩展未加载
- 验证ZIP文件名中的Ghidra版本是否与Ghidra安装相匹配。
- 检查Ghidra的控制台是否有错误消息。
- 确保在中启用了扩展 File → 安装扩展。...
桥未启动
- 确保在Ghidra中加载了程序(网桥需要活动的程序上下文)。
- 检查端口17664是否已被其他应用程序使用。
- 查看Ghidra的控制台是否有错误消息。
MCP服务器连接错误
- 验证Ghidra是否在加载程序的情况下运行。
- 手动测试电桥:
curl http://127.0.0.1:17664/health应返回{"ok":true}. - 确保
BRIDGEURL在server.py匹配网桥地址和端口。
构建错误
- 验证您的
ghidraInstallDir路径在build.gradle是正确的。 - 确保您拥有正确的Java版本(JDK 11+)。
- 确保Gradle可以访问Ghidra安装目录。
项目结构
ghidra_mcp/
├── McpBridge/ # Main Ghidra extension
│ ├── src/
│ │ └── main/java/ghidramcp/
│ │ └── McpBridgePlugin.java
│ ├── build.gradle
│ └── dist/ # Built extension ZIP files
├── ghidra_extension/ # Alternative/older extension (if present)
├── mcp_server/ # Python MCP server
│ └── server.py
└── README.md
