mcpField
G
GhidraMCP

GhidraMCP

本地服务
github.com/13bm安全1497 周前更新

关于 GhidraMCP

GhidraMCP 是一个 Ghidra 扩展,通过 MCP 向 AI 助手暴露 70 个逆向工程工具,可用于反编译函数、重命名符号、添加注释和分析漏洞。项目采用 Java 插件加 Go 桥接程序的架构,并支持多个 Ghidra 实例同时使用。

主要功能

  1. 01提供 70 个逆向工程相关的 MCP 工具
  2. 02通过 TCP 连接 Ghidra 插件与 Go 桥接程序
  3. 03支持异步反编译与结果轮询
  4. 04支持 API 密钥认证与仅本地绑定
  5. 05通过 target_port 路由到多个 Ghidra 实例

适用场景

  1. 01借助 AI 助手反编译并理解二进制函数
  2. 02在分析过程中批量重命名符号并添加注释
  3. 03检测二进制文件中的安全缓解措施或 ROP 小工具

MCP 相关

该项目是一个 MCP 服务,将 Ghidra 中的分析与修改能力以 MCP 工具的形式暴露给 Claude 等 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

GhidraMCP

Build License

一款 Ghidra 扩展,可通过 Model Context Protocol (MCP) 向 AI 助手提供 70 种逆向工程工具。在 Ghidra 中打开二进制文件,启用插件,即可让 Claude(或任何 MCP 客户端)反编译函数、重命名符号、注释代码、搜索漏洞等。

架构

 AI Client (Claude Desktop / CLI)
        |  stdio + MCP JSON-RPC
        v
   Go MCP Bridge  (mcp_bridge)
        |  TCP, length-prefixed JSON-RPC
        v
   Ghidra Plugin  (MCPServerPlugin)
        |
        v
   Ghidra Program API

Ghidra 插件(Java)会在 Ghidra 中启动 TCP 服务,并自动启动 Go 桥接程序二进制文件。桥接程序通过标准输入/输出与 AI 客户端使用 MCP 通信,并通过带 4 字节长度前缀的 JSON-RPC 帧,经本地 TCP 套接字将调用转发给 Java 插件。可选的 API 密钥身份验证可保护 TCP 通道。

功能

  • 70 种 MCP 工具,涵盖查询、修改、分析、恶意软件初筛、IoT/嵌入式安全、结构管理、异步反编译和多实例支持
  • 轻松设置——插件会自动启动桥接程序;使用 MCP > Settings > Write to Claude Config 配置 MCP 客户端
  • 跨平台——提供适用于 Linux x86_64、Windows x86_64、macOS x86_64 和 macOS ARM64 的预构建桥接程序二进制文件
  • 可配置——可通过 GhidraMCP.properties 配置端口、仅绑定 localhost、API 密钥身份验证、自动启动以及启用/禁用桥接程序
  • 多实例——使用 target_port 路由工具调用,同时操作多个 Ghidra 窗口
  • 异步反编译——反编译大型函数时不会阻塞;稍后可轮询结果
  • 连接重试——如果 Ghidra 重启或连接断开,桥接程序会自动重新连接
  • 分页——较大的结果集(函数、字符串、导入项等)支持使用 offset/limit 安全地增量获取
  • CI/CD——自动构建、Go 和 Java 测试、Ghidra 集成测试,以及在新版本 Ghidra 发布时自动发布

快速开始

前提条件
安装
  1. 从 Releases 下载最新版本的 ZIP 文件
  2. 在 Ghidra 中:File > Install Extensions > "+" > select the ZIP
  3. 重启 Ghidra
启用
  1. 打开一个项目和一个程序(二进制文件)
  2. File > Configure > GhidraMCP -- check MCPServerPlugin
  3. 插件会自动启动 TCP 服务(默认地址为 localhost:8765)并启动桥接程序

要配置 Claude Desktop,请打开 MCP > Settings,然后点击 Write to Claude Config。对于其他 MCP 客户端,请点击 Copy to Clipboard,并将以下内容添加到客户端配置中:

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"]
    }
  }
}

如果设置了 API 密钥,请将其加入 env 块(插件会自动执行此操作):

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

也可以在 Ghidra 中获取配置片段:MCP > Copy MCP Config(将其复制到剪贴板)。

工具

包含参数、类型和示例的完整参考: TOOLS.md

下表提供了快速概览。参数详情请参阅 TOOLS.md。

查询(1-21)
工具描述
list_functions列出所有函数及其入口点、大小和返回类型
list_classes列出所有类 / 命名空间
list_imports列出导入的符号和外部依赖项
list_exports列出导出的符号
list_namespaces列出所有命名空间
list_data_items列出已定义的数据(全局变量、常量、数组、结构体)
list_strings列出字符串,支持可选的子串筛选
search_functions_by_name按名称子串搜索函数
get_function_by_address获取指定地址处函数的详细信息
get_current_address获取 Ghidra 中当前选中的地址
get_current_function获取当前光标位置处的函数
decompile_function按名称反编译为 C 伪代码
decompile_function_by_address按地址反编译为 C 伪代码
disassemble_function获取函数的原始反汇编列表
get_xrefs_to获取指向某地址的交叉引用
get_xrefs_from获取从某地址指向其他位置的交叉引用
get_function_xrefs获取函数的所有交叉引用(调用者和被调用者)
get_program_info获取程序元数据(架构、编译器、格式等)
get_memory_map获取包含段权限的内存布局
get_variables获取函数的参数和局部变量
修改(22-38)
工具描述
rename_function按名称重命名函数
rename_function_by_address按地址重命名函数
rename_data重命名数据标签
rename_variable重命名局部变量
set_decompiler_comment设置反编译器视图中的注释
set_disassembly_comment设置反汇编视图中的注释
set_function_prototype设置完整的函数原型
set_local_variable_type更改变量的数据类型
set_bookmark添加书签
remove_bookmark移除书签
set_equate为标量操作数设置命名常量
create_structure创建结构体数据类型
create_enum创建枚举数据类型
apply_data_type在指定地址应用数据类型
set_namespace为函数设置命名空间或类
set_calling_convention设置函数的调用约定
set_image_base设置映像基址
set_memory_permissions修改内存块权限
高级分析(39-45)
工具描述
patch_bytes修补指定地址处的原始字节
get_basic_blocks获取函数的基本块
extract_api_call_sequences提取 API 调用序列,用于安全分析
identify_user_input_sources查找用户输入入口点
generate_call_graph生成分层调用图
identify_crypto_patterns检测加密实现
find_obfuscated_strings定位混淆字符串
恶意软件分析(46-53)
工具描述
search_bytes搜索字节模式
emulate_function模拟执行函数
extract_iocs提取入侵指标
find_dynamic_api_resolution检测动态 API 解析
detect_anti_analysis检测反分析技术
add_external_function添加外部函数引用
get_pe_info获取 PE 标头详情
get_elf_info获取 ELF 标头详情
IoT / 嵌入式安全(54-59)
工具描述
create_memory_block创建内存块
detect_security_mitigations检测二进制文件安全缓解措施
find_format_string_vulns查找格式字符串漏洞
find_rop_gadgets查找 ROP 小工具
detect_control_flow_flattening检测控制流扁平化
mark_code_coverage标记代码覆盖区域
实用工具(60-62)
工具描述
get_bookmarks列出书签(可按地址筛选)
list_equates列出所有等值符号
ping检查连接状态
多实例(63)
工具描述
list_ghidra_instances扫描 8765-8774 端口,查找正在运行的 Ghidra 实例

所有工具都接受可选的 target_port 参数,用于将调用路由到指定的 Ghidra 实例。这样,你可以同时在不同的 Ghidra 窗口中打开多个二进制文件并进行操作。

结构管理(64-68)
工具描述
get_structure获取结构的完整详情(字段、偏移量、类型)
list_structures分页列出所有已定义的结构
edit_structure在结构中添加、插入、删除、替换或清除字段
rename_structure重命名现有结构
delete_structure删除结构数据类型
异步反编译(69-70)
工具描述
decompile_function_async开始异步反编译大型函数(返回任务 ID)
get_decompile_result按任务 ID 轮询异步反编译结果

对于可能需要 30 秒以上才能完成反编译的大型函数,异步反编译非常有用。客户端可以开始反编译,同时继续处理其他工作,之后再轮询结果。

配置

插件会将设置存储在 Ghidra 用户设置目录下的 GhidraMCP.properties 中:

属性默认值描述
port8765Java 服务的 TCP 端口
localhost_onlytrue仅绑定到 localhost
api_key(空)用于桥接身份验证的共享密钥
auto_starttrue插件加载时启动服务
bridge_enabledtrue自动启动 Go 桥接二进制文件
设置对话框

在 Ghidra 菜单中打开 MCP > Settings,即可通过图形界面配置所有属性。该对话框包含:

  • 用于设置端口、localhost 绑定、API 密钥、自动启动和启用桥接的可编辑字段
  • Generate 按钮,用于生成加密安全的随机 32 字符 API 密钥
  • Write to Claude Config 按钮,用于将 GhidraMCP 合并到 Claude Desktop 的 claude_desktop_config.json
  • Copy to Clipboard 按钮,用于复制 MCP 配置 JSON 片段,以便手动设置
  • 启用远程访问但未设置 API 密钥时显示安全警告
  • 如果保存时服务正在运行,则提示自动重启

点击 OK 时,设置会保存到磁盘。你也可以直接编辑对话框中显示路径下的属性文件。

如果 auto_start 为 false,请在 Ghidra 菜单中通过 MCP > Toggle Server 手动启动服务。

Note: bridge_enabled 设置适用于高级用例,例如调试桥接二进制文件的开发者,或使用直接通过 TCP 与 Java 服务通信的自定义 MCP 客户端的用户。大多数用户应保持启用此设置。

安全性

默认情况下,TCP 服务仅绑定到 localhost,且没有 API 密钥,这适合本地单用户使用。如需更严格的设置:

API 密钥身份验证
  1. 打开 MCP > Settings,点击 Generate 生成随机密钥(或输入自己的密钥)
  2. 点击 OK 保存 — 桥接程序会在下次启动时自动获取该密钥
  3. 连接时,桥接程序会先使用该密钥发送 authenticate 请求,然后才进行其他调用
  4. 身份验证成功前,服务会拒绝所有非身份验证请求
  5. 3 次验证失败后,服务会终止连接

API 密钥通过 GHIDRA_API_KEY 环境变量传递给桥接程序(而非作为 CLI 标志),以防止密钥泄露在进程参数列表中。手动运行桥接程序时,请设置此环境变量:

# Linux/macOS
export GHIDRA_API_KEY="your-key-here"
./mcp_bridge --host localhost --port 8765

# Windows (PowerShell)
$env:GHIDRA_API_KEY = "your-key-here"
.\mcp_bridge.exe --host localhost --port 8765

设置 API 密钥后,设置对话框中的 Write to Claude Config 和 Copy to Clipboard 按钮会自动在 env 块中包含该密钥。

本地主机绑定

当 localhost_only=true(默认值)时,服务仅接受来自 127.0.0.1 的连接。如果需要远程访问(例如,在无头服务上运行 Ghidra),请将其设为 false,但将端口暴露到本地主机之外时,务必使用 API 密钥。

远程/无头环境配置

GhidraMCP 可以为运行在另一台机器上的 AI 客户端提供服务。当 Ghidra 运行在无头分析服务上,而 AI 客户端运行在其他位置时,这会很有用。

  1. 打开 MCP > Settings
  2. 取消勾选 Localhost Only 以接受远程连接
  3. 点击 Generate 生成 API 密钥(远程访问时务必使用密钥)
  4. 点击 OK 并重启服务

在远程机器上,将 MCP 客户端配置为连接到 Ghidra 主机:

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "ghidra-server.local", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

Warning: 将服务暴露到本地主机之外时,务必使用 API 密钥。如果没有身份验证,任何能够访问该端口的人都可以完全访问 Ghidra API。

从源代码构建

git clone https://github.com/13bm/GhidraMCP.git
cd GhidraMCP
构建 Go 桥接程序
cd mcp-bridge
go build -o mcp_bridge .
cd ..
构建 Ghidra 扩展
export GHIDRA_INSTALL_DIR=/path/to/ghidra
gradle buildExtension

扩展 ZIP 文件将位于 dist/ 中。

运行测试
# Go tests
cd mcp-bridge && go test ./... -v && cd ..

# Java unit + integration tests (requires Xvfb on headless Linux)
xvfb-run gradle test -PGHIDRA_INSTALL_DIR=$GHIDRA_INSTALL_DIR

CI/CD

本项目使用 GitHub Actions 自动执行构建和发布:

  • build.yml -- 在推送到 master、向 master 提交 PR 以及创建标签时触发。运行 Go 测试,为 4 个平台交叉编译桥接程序,在 Xvfb 下运行 Java 单元测试和 Ghidra 集成测试,构建扩展 ZIP 文件,并在 v* 标签上创建 GitHub Releases。
  • check-ghidra-release.yml -- 每天运行。检测 Ghidra 是否有新版本,创建版本更新 PR,通过 GitHub App 自动批准,并在所有测试通过后自动合并。

贡献

欢迎贡献!请提交 issue 或拉取请求。

  1. Fork 此仓库
  2. 创建功能分支:git checkout -b feature/my-feature
  3. 提交更改
  4. 推送并创建 Pull Request

许可证

Apache License 2.0

致谢


GhidraMCP 与 NSA 或 Ghidra 项目无关,也未获得其认可。

评论

支持 Markdown

第一次接触 MCP?

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

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