mcpField
🔍
🔍 Ghidra MCP Server

🔍 Ghidra MCP Server

本地服务
github.com/Bamimore-Tomi安全481 周前更新

关于 🔍 Ghidra MCP Server

这是一个基于 Ghidra 的 MCP 服务,面向逆向工程人员及使用 LLM 分析二进制文件的场景。它将反编译代码和程序元数据提取为 JSON,并提供查询这些内容的工具。

主要功能

  1. 01使用 Ghidra 无头模式反编译二进制文件
  2. 02提取伪代码、名称、变量和字符串
  3. 03导出结构体、枚举和函数定义
  4. 04列出函数并获取伪代码
  5. 05检查结构体、枚举及函数原型

适用场景

  1. 01探索陌生二进制文件中的函数
  2. 02检查反编译代码和入口点行为
  3. 03查看数据结构及枚举值
  4. 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)
  • mcp CLI(通过 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。解决方法:

  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提取 JSON 的 Ghidra 脚本
crackme.cC 语言示例二进制文件
crackme用于测试的已编译二进制文件

👨‍💻 作者

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

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。