Ghidra MCP桥接服务

Ghidra MCP桥接服务是一个本地HTTP桥接器,使AI助手能够通过REST API与Ghidra交互,实现程序信息查询、函数管理、字节修补和注释设置等功能。

  • by athukarad109
  • Java
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 athukarad109/ghidra-mcp

使用说明

Ghidra MCP桥

一个模型上下文协议(MCP)服务器,为AI助手提供通过本地HTTP桥与Ghidra交互的能力。该项目使AI工具能够在Ghidra中查询程序信息、列出函数、重命名函数、修补字节和设置注释。

概述

该项目由两个主要部分组成:

  1. Ghidra扩展 (McpBridge):一个Java插件,在Ghidra内部运行HTTP服务器,通过REST API端点公开程序数据和操作。
  2. MCP 服务器 (mcp_server):一个基于Python的MCP服务器,连接到Ghidra网桥,为AI助手提供工具。

先决条件

在设置此项目之前,请确保已安装以下内容:

  • 吉德拉:版本12.0或兼容(从下载 Ghidra官方网站)
  • Java开发工具包(JDK):版本11或更高版本(构建Ghidra扩展所需)
  • Gradle:7.0或更高版本(用于构建扩展)
  • python:3.8或更高版本
  • 点:Python包管理器

安装说明

步骤1:配置Ghidra安装路径

构建脚本需要知道Ghidra的安装位置。编辑 build.gradle 两个扩展目录中的文件:

  1. 打开 McpBridge/build.gradle
  2. 更新 ghidraInstallDir 匹配Ghidra安装的路径:
ext.ghidraInstallDir = "D:/ghidra_12.0_PUBLIC_20251205/ghidra_12.0_PUBLIC"

将路径替换为实际的Ghidra安装目录。在Windows上,使用正斜杠(/)或逃过一劫(\\).在Linux/Mac上,使用适当的路径格式。

备注:如果你有 ghidra_extension 目录,更新其 build.gradle 文件也是。

第二步:构建Ghidra扩展

  1. 导航到 McpBridge 目录:

    cd McpBridge
    
  2. 使用Gradle构建扩展:

    gradle buildExtension
    

    这将在 McpBridge/dist/ 目录(例如。, ghidra_12.0_PUBLIC_20260109_McpBridge.zip).

  3. 如果你也有 ghidra_extension 目录,以类似的方式构建它:

    cd ../ghidra_extension
    gradle buildExtension
    

步骤3:在Ghidra中安装扩展

  1. 启动Ghidra。

  2. 首选 File → 安装扩展。..

  3. 点击 + 按钮(或“添加扩展名”)并导航到您构建的ZIP文件:

    • 地点: McpBridge/dist/ghidra_12.0_PUBLIC_YYYYMMDD_McpBridge.zip
  4. 选中“McpBridge”旁边的框以启用它。

  5. 点击 好的 并在提示时重新启动Ghidra。

  6. 重新启动后,打开一个项目并加载一个程序。MCP网桥插件将自动启动并监听 http://127.0.0.1:17664.

    您应该在Ghidra的控制台中看到一条消息: MCP Bridge listening on http://127.0.0.1:17664

步骤4:安装Python依赖项

  1. 导航到 mcp_server 目录:

    cd mcp_server
    
  2. 安装所需的Python包:

    pip install fastmcp requests
    

    或者,如果您更喜欢使用虚拟环境:

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    pip install fastmcp requests
    

步骤5:运行MCP服务器

  1. 确保Ghidra在加载程序的情况下运行(网桥必须处于活动状态)。

  2. 启动MCP服务器:

    python server.py
    

    服务器将连接到Ghidra网桥 http://127.0.0.1:17664 并公开以下MCP工具:

    • ghidra_health:检查Ghidra桥是否可达
    • get_current_program:获取当前程序名称和映像库
    • list_functions:列出当前程序中的函数
    • get_function_context:获取函数的原型/被调用者/字符串(+可选的反编译文本)
    • rename_function:在特定入口地址重命名函数
    • auto_rename_functions:批量建议/应用默认重命名 FUN_/sub_ 名字
    • scan_anti_debug:扫描常见的反调试启发法(API调用+指令助记符)
    • patch_bytes:特定地址的补丁字节
    • set_comment:在地址处设置行尾注释

配置

更改网桥端口

默认情况下,Ghidra网桥在端口上运行 17664。要更改此设置,请执行以下操作:

  1. 编辑 McpBridge/src/main/java/ghidramcp/McpBridgePlugin.java
  2. 找到这条线: server = HttpServer.create(new InetSocketAddress("127.0.0.1", 17664), 0);
  3. 将端口号更改为所需的端口。
  4. 重建扩展并更新 BRIDGE 恒定于 mcp_server/server.py 为了匹配。

MCP服务器配置

MCP服务器连接到网桥 http://127.0.0.1:17664 默认情况下。要更改此设置,请编辑 BRIDGE 恒定于 mcp_server/server.py:

BRIDGE = "http://127.0.0.1:17664"

用法

一旦一切就绪:

  1. 启动Ghidra 并打开一个程序(当插件加载时,桥会自动启动)。
  2. 启动MCP服务器 通过跑步 python mcp_server/server.py.
  3. 连接您的MCP客户端 (例如,Claude Desktop、Cursor)连接到MCP服务器。

AI助手现在可以通过MCP工具与Ghidra交互,使其能够:

  • 查询程序信息
  • 列出并分析功能
  • 重命名函数
  • 修补二进制数据
  • 向代码添加注释

故障排除

扩展未加载

  • 验证ZIP文件名中的Ghidra版本是否与Ghidra安装相匹配。
  • 检查Ghidra的控制台是否有错误消息。
  • 确保在中启用了扩展 File → 安装扩展。...

桥未启动

  • 确保在Ghidra中加载了程序(网桥需要活动的程序上下文)。
  • 检查端口17664是否已被其他应用程序使用。
  • 查看Ghidra的控制台是否有错误消息。

MCP服务器连接错误

  • 验证Ghidra是否在加载程序的情况下运行。
  • 手动测试电桥: curl http://127.0.0.1:17664/health 应返回 {"ok":true}.
  • 确保 BRIDGE URL在 server.py 匹配网桥地址和端口。

构建错误

  • 验证您的 ghidraInstallDir 路径在 build.gradle 是正确的。
  • 确保您拥有正确的Java版本(JDK 11+)。
  • 确保Gradle可以访问Ghidra安装目录。

项目结构

ghidra_mcp/
├── McpBridge/              # Main Ghidra extension
│   ├── src/
│   │   └── main/java/ghidramcp/
│   │       └── McpBridgePlugin.java
│   ├── build.gradle
│   └── dist/               # Built extension ZIP files
├── ghidra_extension/       # Alternative/older extension (if present)
├── mcp_server/             # Python MCP server
│   └── server.py
└── README.md