KGhidraMCP
KGhidraMCP是一个直接嵌入Ghidra插件中的模型上下文协议(MCP)服务器,允许LLM自主地对应用程序进行逆向工程。它通过原生Kotlin实现将Ghidra核心功能中的许多工具暴露给MCP客户端。
建筑
这是一个 原生Kotlin实现 它将MCP服务器直接嵌入Ghidra插件中,消除了对外部Python桥的需求。
graph TD
A[MCP Client
Claude Desktop, Cline, Roo, etc.] -->|MCP Protocol over SSE| B[Kotlin MCP Server
embedded in Ghidra plugin]
B -->|Direct API calls| C[Ghidra Analysis Engine]主要优势
- ✅ 单个工件:没有Python依赖,只有Ghidra插件
- ✅ 本地MCP协议:使用官方Kotlin SDK直接实现
- ✅ 更好的性能:无HTTP→ python→ MCP翻译开销
- ✅ 类型安全:Kotlin的类型系统+MCP模式验证
- ✅ SSE本地:通过Ktor内置流媒体支持
- ✅ 更容易部署:安装插件,配置端口,完成
特性
- 在Ghidra中分解和分析二进制文件
- 自动重命名方法、变量和数据
- 列出方法、类、导入、导出和字符串
- 按名称搜索功能
- 添加注释并设置函数签名
- 导航交叉引用
- 所有工具都支持对大型数据集进行分页
可用工具
插件暴露 29个MCP工具 按类别组织:
反编译工具(6个工具)
- get_function_by_address -按地址获取功能信息
- get_current函数 -在光标处获取函数
- 反编译函数 -按名称分解
- 反编译函数byaddress -按地址分解
- 反汇编函数 -获取程序集列表
- list_functions -列出所有功能
列表工具(8个工具)
- list_方法 -列出函数名称(分页)
- list_classes -列出类/命名空间名称(分页)
- list_segments -列出内存段(分页)
- list_imports -列出导入符号(分页)
- list_导出 -列出导出符号(分页)
- list_namespaces -列出命名空间(分页)
- list_data_items -列出定义的数据(分页)
- list_strings -列出带筛选器的字符串(分页)
搜索工具(1个工具)
- 搜索_功能_名称 -按子字符串搜索函数
修改工具(4个工具)
- 重命名函数 -按名称重命名函数
- 重命名功能byaddress -按地址重命名函数
- 重命名变量 -重命名局部变量
- 重命名数据 -重命名数据标签
注释工具(4个工具)
- set_decompiler_注释 -添加反编译器注释
- set_disasassembly_commend -添加拆卸注释
- set_function_prototype -设置函数签名
- set_local_variable_type -设置变量类型
导航工具(6个工具)
- get_current地址 -获取光标地址
- get_current函数信息 -在光标位置获取函数
- 获取_xrefs_to -获取地址引用(分页)
- get_xrefs_from -从地址获取引用(分页)
- get_function_xref -获取函数外部参照(分页)
- get_caller函数 -获取函数的调用者(分页)
安装
先决条件
- 吉德拉 11.0或更高版本
- Java 17或更高版本
安装插件
- 从源代码下载最新版本或内部版本
- 运行Ghidra
- 选择
File→Install Extensions - 点击
+按钮 - 选择
KGhidraMCP.zip文件 - 重新启动Ghidra
- 在CodeBrowser工具中,转到
File→Configure... - 在“杂项”下,选中“KGhidraMCPPlugin”框
- 点击“确定”
配置插件
该插件可以通过Ghidra的工具选项进行配置:
- 首选
Edit→Tool Options - 导航至
KGhidraMCP Server - 配置:
- 服务器端口:MCP服务器的端口(默认值:3001) - 自动启动服务器:加载插件时启动服务器(默认值:true)
备注:端口更改需要重新加载插件或重新启动Ghidra。
MCP客户端配置
MCP服务器运行在 http://localhost:3001/ 默认情况下(可在Ghidra中配置)。服务器使用 服务器发送事件(SSE) 运输独家。
克劳德桌面
添加到您的Claude Desktop配置(claude_desktop_config.json):
{
"mcpServers": {
"ghidra": {
"type": "sse",
"url": "http://localhost:3001/"
}
}
}配置文件位置:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Cline(VS代码)
使用KGhidraMCP 克莱恩:
- 打开Cline并选择
MCP Servers在顶端 - 选择
Remote Servers并添加:
- 服务器名称:KGhidraMCP - 服务器URL: http://localhost:3001/
或者,在中手动配置 cline_mcp_settings.json:
{
"mcpServers": {
"ghidra": {
"type": "sse",
"url": "http://localhost:3001/"
}
}
}房间代码(VS代码)
要将KGhidraMCP与Roo代码一起使用,请添加到 .roo/mcp.json:
{
"mcpServers": {
"ghidra": {
"type": "sse",
"url": "http://localhost:3001/"
}
}
}ChatGPT(OpenAI)
要将KGhidraMCP与ChatGPT结合使用(需要Pro、Team或Enterprise计划):
- 启用 开发者模式 在ChatGPT中:
- 前往设置→ 连接器→ 高级→ 开发者模式
- 添加自定义MCP连接器:
- 点击“创建”或“添加连接器” - 将SSE URL设置为: http://localhost:3001/ - 配置任何所需的身份验证(如果适用)
备注:开发人员模式是测试版功能。确保您的ChatGPT计划支持自定义连接器。
VS代码副本
要在VS代码中将KGhidraMCP与GitHub Copilot一起使用:
- 打开VS代码设置(JSON格式)
- 添加以下MCP服务器配置:
{
"github.copilot.chat.mcp.servers": {
"ghidra": {
"type": "sse",
"url": "http://localhost:3001/"
}
}
}或者,通过配置 mcp.json 在您的工作区或用户设置目录中。
其他MCP客户端
对于支持SSE连接的任何MCP客户端,请使用端点:
http://localhost:3001/服务器使用 SSE(服务器发送事件) 运输独家。确保您的MCP客户端支持SSE远程服务器。
用法示例
使用克劳德桌面
配置后,您可以通过Claude与Ghidra交互:
You: "Decompile the function at address 0x1400010a0"
Claude: [Uses decompile_function_by_address tool]
Here's the decompiled code:
...You: "Find all functions that contain 'encrypt' in their name"
Claude: [Uses search_functions_by_name tool]
Found 3 functions:
- encrypt_data at 0x14000a120
- decrypt_data at 0x14000a340
- init_encryption at 0x14000a560You: "Rename the function at 0x1400010a0 to process_input"
Claude: [Uses rename_function_by_address tool]
Successfully renamed function to 'process_input'从源头构建
先决条件
- Java 17或更高版本
- Gradle 8.x或更高版本
- Ghidra 11.0或更高版本
GHIDRA_INSTALL_DIR将环境变量设置到Ghidra安装目录
构建步骤
- 设置
GHIDRA_INSTALL_DIR环境变量:
export GHIDRA_INSTALL_DIR=/path/to/ghidra- 构建扩展:
gradle clean packageExtension- 可安装的扩展将在以下位置创建:
dist/KGhidraMCP.zip使用NixOS/develnv
如果您使用提供的devenv环境:
# Enter the devenv shell
devenv shell
# Build the extension
gradle clean packageExtension技术细节
技术栈
- 语言:Kotlin 2.1.0
- MCP-SDK:官方Kotlin SDK 0.5.0
- 服务器哪个 3.0.0 (净 + SSE)
- 序列化:kotlinx.序列化1.6.2
- 异步:kotlinx.coroutines 1.7.3
线程安全
所有Ghidra API调用都会通过 GhidraContext 包装,确保线程安全。
错误处理
所有工具都遵循一致的错误处理:
- 异常被捕获并作为结构化错误响应返回
- 缺少参数会触发明确的错误消息
- 对无效地址或不存在的函数进行妥善处理
分页
返回大型数据集的工具支持通过以下方式进行分页 offset 和 limit 参数:
- 默认
offset: 0 - 默认
limit: 100 - 最大
limit:用户可自定义每个查询
