GhidrAssistMCP 是一款强大的 Ghidra 扩展程序,它提供了一个 MCP(模型上下文协议)服务器,允许 AI 助手和其他工具通过标准化的 API 与 Ghidra 的逆向工程功能进行交互。
GhidrAssistMCP 架起了基于 AI 的分析工具与 Ghidra 全面逆向工程平台之间的桥梁。通过实现模型上下文协议,该扩展程序允许外部 AI 助手、自动化分析工具和自定义脚本与 Ghidra 的分析功能进行无缝交互。
下载最新版本:
.zip
文件(例如,GhidrAssistMCP-v1.0.0.zip
)安装扩展程序:
启用插件:
git clone
cd GhidrAssistMCP
export GHIDRA_INSTALL_DIR=/path/to/your/ghidra/installation
gradle buildExtension
安装扩展程序:
dist/
目录复制生成的 ZIP 文件启用插件:
{
"method": "tools/call",
"params": {
"name": "get_program_info"
}
}
{
"method": "tools/call",
"params": {
"name": "get_function_info",
"arguments": {
"function_name": "main"
}
}
}
{
"method": "tools/call",
"params": {
"name": "decompile_function",
"arguments": {
"function_name": "encrypt_data"
}
}
}
{
"method": "tools/call",
"params": {
"name": "auto_create_struct",
"arguments": {
"function_identifier": "0x00401000",
"variable_name": "ctx"
}
}
}
{
"method": "tools/call",
"params": {
"name": "set_function_prototype",
"arguments": {
"function_address": "0x00401000",
"prototype": "int main(int argc, char** argv)"
}
}
}
自荐一下:GhidrAssist 开箱即用支持 GhidrAssistMCP。
打开控制面板:
配置服务器设置:
localhost
8080
配置选项卡允许您:
get_program_info
- 获取基本程序信息list_functions
- 列出程序中的所有函数list_data
- 列出数据定义list_strings
- 列出字符串引用list_imports
- 列出导入的函数list_exports
- 列出导出的函数list_segments
- 列出内存段list_namespaces
- 列出命名空间list_classes
- 列出类定义list_methods
- 列出方法定义get_function_info
- 获取详细的函数信息get_class_info
- 获取详细的类信息get_function_by_address
- 查找特定地址的函数get_current_function
- 获取光标位置的函数decompile_function
- 将函数反编译为类似 C 的代码disassemble_function
- 获取汇编反汇编代码search_functions
- 按名称模式搜索函数search_classes
- 按名称模式搜索类function_xrefs
- 获取函数交叉引用get_current_address
- 获取当前光标地址xrefs_to
- 查找对某个地址的引用xrefs_from
- 查找从某个地址发出的引用rename_function
- 重命名函数rename_function_by_address
- 重命名特定地址的函数rename_variable
- 重命名变量rename_data
- 重命名数据定义set_function_prototype
- 设置函数签名set_local_variable_type
- 设置变量数据类型set_disassembly_comment
- 添加反汇编注释set_decompiler_comment
- 添加反编译器注释auto_create_struct
- 根据变量使用模式自动创建结构GhidrAssistMCP/
├── GhidrAssistMCPPlugin # 主插件入口点
├── GhidrAssistMCPServer # HTTP/SSE MCP 服务器
├── GhidrAssistMCPBackend # 工具管理和执行
├── GhidrAssistMCPProvider # UI 组件提供程序
└── tools/ # 单个 MCP 工具
├── Analysis Tools/
├── Modification Tools/
└── Navigation Tools/
GET /sse
- 用于双向通信的 SSE 连接POST /message
- 消息交换端点src/main/java/ghidrassistmcp/
├── GhidrAssistMCPPlugin.java # 主插件类
├── GhidrAssistMCPProvider.java # 带有选项卡的 UI 提供程序
├── GhidrAssistMCPServer.java # MCP 服务器实现
├── GhidrAssistMCPBackend.java # 后端工具管理
├── McpBackend.java # 后端接口
├── McpTool.java # 工具接口
├── McpEventListener.java # 事件通知接口
└── tools/ # 工具实现
├── ProgramInfoTool.java
├── ListFunctionsTool.java
├── DecompileFunctionTool.java
├── AutoCreateStructTool.java
└── ... (共 29 个工具)
public class MyCustomTool implements McpTool {
@Override
public String getName() { return "my_custom_tool"; }
@Override
public String getDescription() { return "Description"; }
@Override
public McpSchema.JsonSchema getInputSchema() { /* ... */ }
@Override
public McpSchema.CallToolResult execute(Map arguments, Program program) {
// 实现
}
}
// 在 GhidrAssistMCPBackend 构造函数中
registerTool(new MyCustomTool());
# 清理构建
gradle clean
# 构建扩展程序
gradle buildExtension
# 使用特定的 Ghidra 路径构建
gradle -PGHIDRA_INSTALL_DIR=/path/to/ghidra buildExtension
# 调试构建
gradle buildExtension --debug
io.modelcontextprotocol.sdk:mcp:0.10.0
11.0.20
(HTTP/SSE 传输)2.17.0
(JSON 处理)日志选项卡提供实时监控:
REQ: tool_name {parameters...}
RES: tool_name {response...}
Ghidra 控制台中的详细日志记录:
服务器无法启动
工具未显示
MCP 客户端连接问题
curl http://localhost:8080/sse
工具执行失败
通过在 Ghidra 启动时添加以下内容启用调试日志记录:
-Dlog4j.logger.ghidrassistmcp=DEBUG
git checkout -b feature-name
GhidrAssistMCP 的核心组件包括主插件入口点、HTTP/SSE MCP 服务器、工具管理和执行后端以及 UI 组件提供程序。各个组件之间相互协作,实现了与 Ghidra 的交互和 MCP 协议的支持。
采用 HTTP 与服务器发送事件(SSE)进行传输,通过特定的端点实现双向通信和消息交换。同时,支持动态工具发现和注册以及有状态会话的管理。
使用观察者模式实现解耦的 UI 更新,通过事务管理保证数据库操作的安全性,利用工具注册表实现动态工具的注册和管理,将配置保存在 Ghidra 的设置系统中,并对 UI 操作进行线程安全处理。
本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。
有问题或遇到问题?
请在项目仓库中打开一个问题,用于报告错误、提出功能请求或询问使用和开发相关的问题。