Ghidra逆向助手
启用LLM在无头模式下使用Ghidra进行二进制分析,从二进制文件中提取函数、伪代码、结构体和枚举,以进行交互式逆向工程。
MCP 服务配置
复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用
{
"mcpServers": {
"ghidra": {
"args": [
"--directory",
"/Users/yourname/Documents/ghidra_mcp",
"run",
"main.py"
],
"command": "/Users/yourname/.cargo/bin/uv"
}
}
}
服务介绍
🔍 Ghidra MCP 服务器
此项目允许您在无头模式下使用 Ghidra 提取丰富的二进制分析数据(如函数、伪代码、结构体、枚举等)到 JSON 文件中,并通过 模型上下文协议 (MCP) 将其暴露给像 Claude 这样的大语言模型。
它将 Ghidra 转换为一个交互式的逆向工程后端。
🚀 特性
- 使用 Ghidra 的无头模式反编译二进制文件
- 提取:
- 函数的伪代码、名称、参数、变量、字符串、注释
- 数据结构(结构体)、枚举和函数定义
- 输出至
ghidra_context.json - MCP 服务器提供的工具包括:
list_functions(),get_pseudocode(name)list_structures(),get_structure(name)list_enums(),get_enum(name)list_function_definitions(),get_function_definition(name)
⚙️ 系统要求
- macOS(已测试)
- Python 3.10+
- Ghidra 11.3.1+
- Java 21(推荐使用 Temurin)
- MCP 客户端(例如 Claude Desktop)
mcp命令行工具(通过pip install mcp安装)
🧪 安装与设置
✅ 1. 安装 Java 21(Ghidra 11.3.1 需要)
brew install --cask temurin@21
然后进行配置:
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
echo 'export JAVA_HOME=$(/usr/libexec/java_home -v 21)' >> ~/.zshrc
source ~/.zshrc
检查是否安装成功:
java -version
输出应显示:openjdk version "21.0.x"...
✅ 2. 安装 Ghidra
下载并解压 Ghidra 11.3.1
✅ 3. 设置项目
cd ghidra_mcp
gcc -Wall crackme.c -o crackme
✅ 4. 通过 MCP CLI 安装服务器
mcp install main.py
这会注册 MCP 服务器,以便 Claude 或其他客户端可以访问它。
✅ 5. 以开发模式运行(用于测试)
mcp dev main.py
这将启用热重载和开发者日志。
🛰️ 可用工具
| 工具 | 描述 |
|---|---|
setup_context(...) |
在二进制文件上运行 Ghidra |
list_functions() |
所有函数 |
get_pseudocode(name) |
反编译后的伪代码 |
list_structures() |
所有结构体 |
get_structure(name) |
结构体的详细信息 |
list_enums() |
所有枚举 |
get_enum(name) |
枚举值 |
list_function_definitions() |
所有函数原型 |
get_function_definition() |
返回类型及参数 |
示例提示
使用位于 <GHIDRA_PATH> 的 Ghidra 分析位于 <BINARY_PATH> 的二进制文件。首先,使用这两个路径设置分析上下文,然后列出二进制文件中的所有函数。检查主入口点函数并提供程序功能的高级概述。
🧠 常见问题及解决方法
❌ Ghidra 报告“不支持的 Java 版本”
➡️ 解决方案:安装 Java 21,而不是 17 或 24:
brew install --cask temurin@21
export JAVA_HOME=$(/usr/libexec/java_home -v 21)
❌ spawn uv ENOENT (Claude Desktop 找不到您的 UV 二进制文件)
➡️ Claude 无法通过名称找到 uv。要解决此问题:
- 在终端中运行:
which uv
示例输出:
/Users/yourname/.cargo/bin/uv
- 打开您的 Claude Desktop 配置文件:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
- 更新配置文件如下:
{
"mcpServers": {
"ghidra": {
"command": "/Users/yourname/.cargo/bin/uv",
"args": [
"--directory",
"/Users/yourname/Documents/ghidra_mcp",
"run",
"main.py"
]
}
}
}
- 重启 Claude Desktop。现在您应该能看到自定义的 MCP 工具。
❌ The operation couldn’t be completed. Unable to locate a Java Runtime.
➡️ 解决方法:Java 未安装或 JAVA_HOME 未设置。请按照上面的设置说明进行操作。
📂 项目结构
| 文件 | 用途 |
|---|---|
main.py |
带有工具的 MCP 服务器 |
export_context.py |
从 Ghidra 提取 JSON 的脚本 |
crackme.c |
示例 C 二进制文件 |
crackme |
用于测试的编译后的二进制文件 |