G

Ghidra逆向助手

@Bamimore-Tomi/ghidra_mcp
0 Stars 556 次浏览 Bamimore-Tomi 更新于 2026-08-23

启用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。要解决此问题:

  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. 重启 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 用于测试的编译后的二进制文件

👨‍💻 作者

Tomi Bamimore
由 NSA 开发的 Ghidra
由 Anthropic 开发的 MCP

相关 MCP 服务