关于 🔍 Ghidra MCP Server
这是一个基于 Ghidra 的 MCP 服务,面向逆向工程人员及使用 LLM 分析二进制文件的场景。它将反编译代码和程序元数据提取为 JSON,并提供查询这些内容的工具。
主要功能
- 01使用 Ghidra 无头模式反编译二进制文件
- 02提取伪代码、名称、变量和字符串
- 03导出结构体、枚举和函数定义
- 04列出函数并获取伪代码
- 05检查结构体、枚举及函数原型
适用场景
- 01探索陌生二进制文件中的函数
- 02检查反编译代码和入口点行为
- 03查看数据结构及枚举值
- 04向 LLM 提供二进制分析上下文
MCP 相关
MCP 服务提供设置分析上下文及查询提取内容的工具,包括函数、伪代码、结构体、枚举和函数定义。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
🔍 Ghidra MCP 服务
此项目可让你以无头模式使用 Ghidra,将丰富的二进制分析数据(函数、伪代码、结构体、枚举等)提取到 JSON 文件中,并通过 Model Context Protocol (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)
mcpCLI(通过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 因“unsupported Java version”而失败
➡️ 解决方法:安装 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 | 提取 JSON 的 Ghidra 脚本 |
crackme.c | C 语言示例二进制文件 |
crackme | 用于测试的已编译二进制文件 |
👨💻 作者
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。