关于 GhidraMCP
GhidraMCP 是一个 Ghidra 扩展,通过 MCP 向 AI 助手暴露 70 个逆向工程工具,可用于反编译函数、重命名符号、添加注释和分析漏洞。项目采用 Java 插件加 Go 桥接程序的架构,并支持多个 Ghidra 实例同时使用。
主要功能
- 01提供 70 个逆向工程相关的 MCP 工具
- 02通过 TCP 连接 Ghidra 插件与 Go 桥接程序
- 03支持异步反编译与结果轮询
- 04支持 API 密钥认证与仅本地绑定
- 05通过 target_port 路由到多个 Ghidra 实例
适用场景
- 01借助 AI 助手反编译并理解二进制函数
- 02在分析过程中批量重命名符号并添加注释
- 03检测二进制文件中的安全缓解措施或 ROP 小工具
MCP 相关
该项目是一个 MCP 服务,将 Ghidra 中的分析与修改能力以 MCP 工具的形式暴露给 Claude 等 MCP 客户端。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
GhidraMCP
一款 Ghidra 扩展,可通过 Model Context Protocol (MCP) 向 AI 助手提供 70 种逆向工程工具。在 Ghidra 中打开二进制文件,启用插件,即可让 Claude(或任何 MCP 客户端)反编译函数、重命名符号、注释代码、搜索漏洞等。
架构
AI Client (Claude Desktop / CLI)
| stdio + MCP JSON-RPC
v
Go MCP Bridge (mcp_bridge)
| TCP, length-prefixed JSON-RPC
v
Ghidra Plugin (MCPServerPlugin)
|
v
Ghidra Program API
Ghidra 插件(Java)会在 Ghidra 中启动 TCP 服务,并自动启动 Go 桥接程序二进制文件。桥接程序通过标准输入/输出与 AI 客户端使用 MCP 通信,并通过带 4 字节长度前缀的 JSON-RPC 帧,经本地 TCP 套接字将调用转发给 Java 插件。可选的 API 密钥身份验证可保护 TCP 通道。
功能
- 70 种 MCP 工具,涵盖查询、修改、分析、恶意软件初筛、IoT/嵌入式安全、结构管理、异步反编译和多实例支持
- 轻松设置——插件会自动启动桥接程序;使用 MCP > Settings > Write to Claude Config 配置 MCP 客户端
- 跨平台——提供适用于 Linux x86_64、Windows x86_64、macOS x86_64 和 macOS ARM64 的预构建桥接程序二进制文件
- 可配置——可通过
GhidraMCP.properties配置端口、仅绑定 localhost、API 密钥身份验证、自动启动以及启用/禁用桥接程序 - 多实例——使用
target_port路由工具调用,同时操作多个 Ghidra 窗口 - 异步反编译——反编译大型函数时不会阻塞;稍后可轮询结果
- 连接重试——如果 Ghidra 重启或连接断开,桥接程序会自动重新连接
- 分页——较大的结果集(函数、字符串、导入项等)支持使用
offset/limit安全地增量获取 - CI/CD——自动构建、Go 和 Java 测试、Ghidra 集成测试,以及在新版本 Ghidra 发布时自动发布
快速开始
前提条件
- Ghidra 12.0.3+
- Java 21+
- 兼容 MCP 的 AI 客户端(Claude Desktop、Claude Code 等)
安装
- 从 Releases 下载最新版本的 ZIP 文件
- 在 Ghidra 中:File > Install Extensions > "+" > select the ZIP
- 重启 Ghidra
启用
- 打开一个项目和一个程序(二进制文件)
- File > Configure > GhidraMCP -- check MCPServerPlugin
- 插件会自动启动 TCP 服务(默认地址为
localhost:8765)并启动桥接程序
要配置 Claude Desktop,请打开 MCP > Settings,然后点击 Write to Claude Config。对于其他 MCP 客户端,请点击 Copy to Clipboard,并将以下内容添加到客户端配置中:
{
"mcpServers": {
"ghidra": {
"command": "/path/to/mcp_bridge",
"args": ["--host", "localhost", "--port", "8765"]
}
}
}
如果设置了 API 密钥,请将其加入 env 块(插件会自动执行此操作):
{
"mcpServers": {
"ghidra": {
"command": "/path/to/mcp_bridge",
"args": ["--host", "localhost", "--port", "8765"],
"env": {
"GHIDRA_API_KEY": "your-key-here"
}
}
}
}
也可以在 Ghidra 中获取配置片段:MCP > Copy MCP Config(将其复制到剪贴板)。
工具
包含参数、类型和示例的完整参考: TOOLS.md
下表提供了快速概览。参数详情请参阅 TOOLS.md。
查询(1-21)
| 工具 | 描述 |
|---|---|
list_functions | 列出所有函数及其入口点、大小和返回类型 |
list_classes | 列出所有类 / 命名空间 |
list_imports | 列出导入的符号和外部依赖项 |
list_exports | 列出导出的符号 |
list_namespaces | 列出所有命名空间 |
list_data_items | 列出已定义的数据(全局变量、常量、数组、结构体) |
list_strings | 列出字符串,支持可选的子串筛选 |
search_functions_by_name | 按名称子串搜索函数 |
get_function_by_address | 获取指定地址处函数的详细信息 |
get_current_address | 获取 Ghidra 中当前选中的地址 |
get_current_function | 获取当前光标位置处的函数 |
decompile_function | 按名称反编译为 C 伪代码 |
decompile_function_by_address | 按地址反编译为 C 伪代码 |
disassemble_function | 获取函数的原始反汇编列表 |
get_xrefs_to | 获取指向某地址的交叉引用 |
get_xrefs_from | 获取从某地址指向其他位置的交叉引用 |
get_function_xrefs | 获取函数的所有交叉引用(调用者和被调用者) |
get_program_info | 获取程序元数据(架构、编译器、格式等) |
get_memory_map | 获取包含段权限的内存布局 |
get_variables | 获取函数的参数和局部变量 |
修改(22-38)
| 工具 | 描述 |
|---|---|
rename_function | 按名称重命名函数 |
rename_function_by_address | 按地址重命名函数 |
rename_data | 重命名数据标签 |
rename_variable | 重命名局部变量 |
set_decompiler_comment | 设置反编译器视图中的注释 |
set_disassembly_comment | 设置反汇编视图中的注释 |
set_function_prototype | 设置完整的函数原型 |
set_local_variable_type | 更改变量的数据类型 |
set_bookmark | 添加书签 |
remove_bookmark | 移除书签 |
set_equate | 为标量操作数设置命名常量 |
create_structure | 创建结构体数据类型 |
create_enum | 创建枚举数据类型 |
apply_data_type | 在指定地址应用数据类型 |
set_namespace | 为函数设置命名空间或类 |
set_calling_convention | 设置函数的调用约定 |
set_image_base | 设置映像基址 |
set_memory_permissions | 修改内存块权限 |
高级分析(39-45)
| 工具 | 描述 |
|---|---|
patch_bytes | 修补指定地址处的原始字节 |
get_basic_blocks | 获取函数的基本块 |
extract_api_call_sequences | 提取 API 调用序列,用于安全分析 |
identify_user_input_sources | 查找用户输入入口点 |
generate_call_graph | 生成分层调用图 |
identify_crypto_patterns | 检测加密实现 |
find_obfuscated_strings | 定位混淆字符串 |
恶意软件分析(46-53)
| 工具 | 描述 |
|---|---|
search_bytes | 搜索字节模式 |
emulate_function | 模拟执行函数 |
extract_iocs | 提取入侵指标 |
find_dynamic_api_resolution | 检测动态 API 解析 |
detect_anti_analysis | 检测反分析技术 |
add_external_function | 添加外部函数引用 |
get_pe_info | 获取 PE 标头详情 |
get_elf_info | 获取 ELF 标头详情 |
IoT / 嵌入式安全(54-59)
| 工具 | 描述 |
|---|---|
create_memory_block | 创建内存块 |
detect_security_mitigations | 检测二进制文件安全缓解措施 |
find_format_string_vulns | 查找格式字符串漏洞 |
find_rop_gadgets | 查找 ROP 小工具 |
detect_control_flow_flattening | 检测控制流扁平化 |
mark_code_coverage | 标记代码覆盖区域 |
实用工具(60-62)
| 工具 | 描述 |
|---|---|
get_bookmarks | 列出书签(可按地址筛选) |
list_equates | 列出所有等值符号 |
ping | 检查连接状态 |
多实例(63)
| 工具 | 描述 |
|---|---|
list_ghidra_instances | 扫描 8765-8774 端口,查找正在运行的 Ghidra 实例 |
所有工具都接受可选的 target_port 参数,用于将调用路由到指定的 Ghidra 实例。这样,你可以同时在不同的 Ghidra 窗口中打开多个二进制文件并进行操作。
结构管理(64-68)
| 工具 | 描述 |
|---|---|
get_structure | 获取结构的完整详情(字段、偏移量、类型) |
list_structures | 分页列出所有已定义的结构 |
edit_structure | 在结构中添加、插入、删除、替换或清除字段 |
rename_structure | 重命名现有结构 |
delete_structure | 删除结构数据类型 |
异步反编译(69-70)
| 工具 | 描述 |
|---|---|
decompile_function_async | 开始异步反编译大型函数(返回任务 ID) |
get_decompile_result | 按任务 ID 轮询异步反编译结果 |
对于可能需要 30 秒以上才能完成反编译的大型函数,异步反编译非常有用。客户端可以开始反编译,同时继续处理其他工作,之后再轮询结果。
配置
插件会将设置存储在 Ghidra 用户设置目录下的 GhidraMCP.properties 中:
| 属性 | 默认值 | 描述 |
|---|---|---|
port | 8765 | Java 服务的 TCP 端口 |
localhost_only | true | 仅绑定到 localhost |
api_key | (空) | 用于桥接身份验证的共享密钥 |
auto_start | true | 插件加载时启动服务 |
bridge_enabled | true | 自动启动 Go 桥接二进制文件 |
设置对话框
在 Ghidra 菜单中打开 MCP > Settings,即可通过图形界面配置所有属性。该对话框包含:
- 用于设置端口、localhost 绑定、API 密钥、自动启动和启用桥接的可编辑字段
- Generate 按钮,用于生成加密安全的随机 32 字符 API 密钥
- Write to Claude Config 按钮,用于将 GhidraMCP 合并到 Claude Desktop 的
claude_desktop_config.json - Copy to Clipboard 按钮,用于复制 MCP 配置 JSON 片段,以便手动设置
- 启用远程访问但未设置 API 密钥时显示安全警告
- 如果保存时服务正在运行,则提示自动重启
点击 OK 时,设置会保存到磁盘。你也可以直接编辑对话框中显示路径下的属性文件。
如果 auto_start 为 false,请在 Ghidra 菜单中通过 MCP > Toggle Server 手动启动服务。
Note:
bridge_enabled设置适用于高级用例,例如调试桥接二进制文件的开发者,或使用直接通过 TCP 与 Java 服务通信的自定义 MCP 客户端的用户。大多数用户应保持启用此设置。
安全性
默认情况下,TCP 服务仅绑定到 localhost,且没有 API 密钥,这适合本地单用户使用。如需更严格的设置:
API 密钥身份验证
- 打开 MCP > Settings,点击 Generate 生成随机密钥(或输入自己的密钥)
- 点击 OK 保存 — 桥接程序会在下次启动时自动获取该密钥
- 连接时,桥接程序会先使用该密钥发送
authenticate请求,然后才进行其他调用 - 身份验证成功前,服务会拒绝所有非身份验证请求
- 3 次验证失败后,服务会终止连接
API 密钥通过 GHIDRA_API_KEY 环境变量传递给桥接程序(而非作为 CLI 标志),以防止密钥泄露在进程参数列表中。手动运行桥接程序时,请设置此环境变量:
# Linux/macOS
export GHIDRA_API_KEY="your-key-here"
./mcp_bridge --host localhost --port 8765
# Windows (PowerShell)
$env:GHIDRA_API_KEY = "your-key-here"
.\mcp_bridge.exe --host localhost --port 8765
设置 API 密钥后,设置对话框中的 Write to Claude Config 和 Copy to Clipboard 按钮会自动在 env 块中包含该密钥。
本地主机绑定
当 localhost_only=true(默认值)时,服务仅接受来自 127.0.0.1 的连接。如果需要远程访问(例如,在无头服务上运行 Ghidra),请将其设为 false,但将端口暴露到本地主机之外时,务必使用 API 密钥。
远程/无头环境配置
GhidraMCP 可以为运行在另一台机器上的 AI 客户端提供服务。当 Ghidra 运行在无头分析服务上,而 AI 客户端运行在其他位置时,这会很有用。
- 打开 MCP > Settings
- 取消勾选 Localhost Only 以接受远程连接
- 点击 Generate 生成 API 密钥(远程访问时务必使用密钥)
- 点击 OK 并重启服务
在远程机器上,将 MCP 客户端配置为连接到 Ghidra 主机:
{
"mcpServers": {
"ghidra": {
"command": "/path/to/mcp_bridge",
"args": ["--host", "ghidra-server.local", "--port", "8765"],
"env": {
"GHIDRA_API_KEY": "your-key-here"
}
}
}
}
Warning: 将服务暴露到本地主机之外时,务必使用 API 密钥。如果没有身份验证,任何能够访问该端口的人都可以完全访问 Ghidra API。
从源代码构建
git clone https://github.com/13bm/GhidraMCP.git
cd GhidraMCP
构建 Go 桥接程序
cd mcp-bridge
go build -o mcp_bridge .
cd ..
构建 Ghidra 扩展
export GHIDRA_INSTALL_DIR=/path/to/ghidra
gradle buildExtension
扩展 ZIP 文件将位于 dist/ 中。
运行测试
# Go tests
cd mcp-bridge && go test ./... -v && cd ..
# Java unit + integration tests (requires Xvfb on headless Linux)
xvfb-run gradle test -PGHIDRA_INSTALL_DIR=$GHIDRA_INSTALL_DIR
CI/CD
本项目使用 GitHub Actions 自动执行构建和发布:
build.yml-- 在推送到master、向master提交 PR 以及创建标签时触发。运行 Go 测试,为 4 个平台交叉编译桥接程序,在 Xvfb 下运行 Java 单元测试和 Ghidra 集成测试,构建扩展 ZIP 文件,并在v*标签上创建 GitHub Releases。check-ghidra-release.yml-- 每天运行。检测 Ghidra 是否有新版本,创建版本更新 PR,通过 GitHub App 自动批准,并在所有测试通过后自动合并。
贡献
欢迎贡献!请提交 issue 或拉取请求。
- Fork 此仓库
- 创建功能分支:
git checkout -b feature/my-feature - 提交更改
- 推送并创建 Pull Request
许可证
致谢
- NSA / Ghidra
- Model Context Protocol
- mcp-go -- Go MCP SDK
GhidraMCP 与 NSA 或 Ghidra 项目无关,也未获得其认可。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。