二进制分析服务

Ghidra MCP Server 是一个将 Ghidra 无头模式与模型上下文协议 (MCP) 结合的服务,用于提取二进制文件的分析数据并暴露给 LLMs,适用于逆向工程和二进制分析场景。

  • by Bamimore-Tomi
  • Python
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 bamimore-tomi/ghidra_mcp

使用说明

🔍 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 按名字。要修复:

  1. 在终端中运行:
which uv

输出示例:

/Users/yourname/.cargo/bin/uv
  1. 打开您的Claude Desktop配置文件:
open ~/Library/Application\ Support/Claude/claude_desktop_config.json
  1. 按如下方式更新:
{
  "mcpServers": {
    "ghidra": {
      "command": "/Users/yourname/.cargo/bin/uv",
      "args": [
        "--directory",
        "/Users/yourname/Documents/ghidra_mcp",
        "run",
        "main.py"
      ]
    }
  }
}
  1. 重新启动克劳德桌面。现在,您应该看到您的自定义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 编译二进制文件进行测试

👨‍💻 作者

托米·巴米莫尔
希德拉 美国国家安全局
主控程序 通过Anthropic