使用说明
🔍 Ghidra MCP服务器
此项目允许您使用 希德拉 在无头模式下,将丰富的二进制分析数据(函数、伪代码、结构、枚举等)提取到JSON文件中,并通过以下方式将其暴露给像Claude这样的LLM 模型上下文协议(MCP).
它将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+
- 水龙头 11.3.1+
- Java 21(首选Temurin)
- MCP客户端(如克劳德桌面)
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. 安装水
下载并解压 水 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二进制文件)
➡️ 克劳德找不到 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"
]
}
}
}
- 重新启动克劳德桌面。现在,您应该看到您的自定义MCP工具。
❌ The operation couldn’t be completed. Unable to locate a Java Runtime.
➡️ 修复:Java未安装或 JAVA_HOME 未设置。按照上面的设置说明进行操作。
📂 项目结构
| 文件 | 目的 |
|---|---|
main.py |
带工具的MCP服务器 |
export_context.py |
提取JSON的Ghidra脚本 |
crackme.c |
样本C二进制 |
crackme |
编译二进制文件进行测试 |
