Ghidrassistmcp

Ghidrassistmcp

🚀 GhidrAssistMCP

GhidrAssistMCP 是一款强大的 Ghidra 扩展程序,它提供了一个 MCP(模型上下文协议)服务器,允许 AI 助手和其他工具通过标准化的 API 与 Ghidra 的逆向工程功能进行交互。

🚀 快速开始

GhidrAssistMCP 架起了基于 AI 的分析工具与 Ghidra 全面逆向工程平台之间的桥梁。通过实现模型上下文协议,该扩展程序允许外部 AI 助手、自动化分析工具和自定义脚本与 Ghidra 的分析功能进行无缝交互。

✨ 主要特性

  • MCP 服务器集成:使用官方 SDK 完整实现模型上下文协议服务器。
  • 31 个内置工具:涵盖函数、数据、交叉引用等的综合分析工具集。
  • 可配置的用户界面:易于使用的界面,用于管理工具和监控活动。
  • 实时日志记录:通过详细的日志跟踪所有 MCP 请求和响应。
  • 动态工具管理:可单独启用/禁用工具,并持久保存设置。
  • 当前上下文感知:工具能够理解 Ghidra 的当前光标位置和活动函数。

📦 安装指南

前提条件

  • Ghidra 11.4+(已在 Ghidra 11.4 公开版上测试)
  • 一个 MCP 客户端(如 GhidrAssist)

二进制版本发布(推荐)

  1. 下载最新版本

    • 访问 发布页面
    • 下载最新的 .zip 文件(例如,GhidrAssistMCP-v1.0.0.zip
  2. 安装扩展程序

    • 在 Ghidra 中:文件 → 安装扩展程序 → 添加扩展程序
    • 选择下载的 ZIP 文件
    • 提示时重启 Ghidra
  3. 启用插件

    • 文件 → 配置 → 配置插件
    • 搜索 "GhidrAssistMCP"
    • 勾选复选框以启用插件

从源代码构建

  1. 克隆仓库
git clone 
cd GhidrAssistMCP
  1. 设置 Ghidra 安装路径
export GHIDRA_INSTALL_DIR=/path/to/your/ghidra/installation
  1. 构建扩展程序
gradle buildExtension
  1. 安装扩展程序

    • dist/ 目录复制生成的 ZIP 文件
    • 在 Ghidra 中:文件 → 安装扩展程序 → 添加扩展程序
    • 选择 ZIP 文件并重启 Ghidra
  2. 启用插件

    • 文件 → 配置 → 配置插件
    • 搜索 "GhidrAssistMCP"
    • 勾选复选框以启用插件

💻 使用示例

基础用法

基本程序信息

{
"method": "tools/call",
"params": {
"name": "get_program_info"
}
}

函数分析

{
"method": "tools/call",
"params": {
"name": "get_function_info",
"arguments": {
"function_name": "main"
}
}
}

反编译

{
"method": "tools/call",
"params": {
"name": "decompile_function",
"arguments": {
"function_name": "encrypt_data"
}
}
}

结构创建

{
"method": "tools/call",
"params": {
"name": "auto_create_struct",
"arguments": {
"function_identifier": "0x00401000",
"variable_name": "ctx"
}
}
}

设置函数原型

{
"method": "tools/call",
"params": {
"name": "set_function_prototype",
"arguments": {
"function_address": "0x00401000",
"prototype": "int main(int argc, char** argv)"
}
}
}

📚 详细文档

客户端

自荐一下:GhidrAssist 开箱即用支持 GhidrAssistMCP。

截图

截图 截图

配置

初始设置

  1. 打开控制面板

    • 窗口 → GhidrAssistMCP(或使用工具栏图标)
  2. 配置服务器设置

    • 主机:默认为 localhost
    • 端口:默认为 8080
    • 启用/禁用:切换 MCP 服务器的开启/关闭状态

工具管理

配置选项卡允许您:

  • 查看所有可用工具(共 31 个)
  • 使用复选框启用/禁用单个工具
  • 保存配置以在会话之间持久保存
  • 实时监控工具状态

可用工具

程序分析
  • get_program_info - 获取基本程序信息
  • list_functions - 列出程序中的所有函数
  • list_data - 列出数据定义
  • list_strings - 列出字符串引用
  • list_imports - 列出导入的函数
  • list_exports - 列出导出的函数
  • list_segments - 列出内存段
  • list_namespaces - 列出命名空间
  • list_classes - 列出类定义
  • list_methods - 列出方法定义
函数分析
  • get_function_info - 获取详细的函数信息
  • get_class_info - 获取详细的类信息
  • get_function_by_address - 查找特定地址的函数
  • get_current_function - 获取光标位置的函数
  • decompile_function - 将函数反编译为类似 C 的代码
  • disassemble_function - 获取汇编反汇编代码
  • search_functions - 按名称模式搜索函数
  • search_classes - 按名称模式搜索类
  • function_xrefs - 获取函数交叉引用
位置与导航
  • get_current_address - 获取当前光标地址
  • xrefs_to - 查找对某个地址的引用
  • xrefs_from - 查找从某个地址发出的引用
修改工具
  • rename_function - 重命名函数
  • rename_function_by_address - 重命名特定地址的函数
  • rename_variable - 重命名变量
  • rename_data - 重命名数据定义
  • set_function_prototype - 设置函数签名
  • set_local_variable_type - 设置变量数据类型
  • set_disassembly_comment - 添加反汇编注释
  • set_decompiler_comment - 添加反编译器注释
高级分析
  • auto_create_struct - 根据变量使用模式自动创建结构

架构

核心组件

GhidrAssistMCP/
├── GhidrAssistMCPPlugin      # 主插件入口点
├── GhidrAssistMCPServer      # HTTP/SSE MCP 服务器
├── GhidrAssistMCPBackend     # 工具管理和执行
├── GhidrAssistMCPProvider    # UI 组件提供程序
└── tools/                    # 单个 MCP 工具
├── Analysis Tools/
├── Modification Tools/
└── Navigation Tools/

MCP 协议实现

  • 传输:使用服务器发送事件(SSE)的 HTTP
  • 端点
    • GET /sse - 用于双向通信的 SSE 连接
    • POST /message - 消息交换端点
  • 工具注册:动态工具发现和注册
  • 会话管理:具有适当生命周期管理的有状态会话

插件架构

  1. 观察者模式:使用事件监听器进行解耦的 UI 更新
  2. 事务管理:支持回滚的安全数据库操作
  3. 工具注册表:具有启用/禁用功能的动态工具注册
  4. 设置持久化:配置保存在 Ghidra 的设置系统中
  5. 线程安全:对 UI 操作进行适当的 Swing EDT 处理

开发

项目结构

src/main/java/ghidrassistmcp/
├── GhidrAssistMCPPlugin.java      # 主插件类
├── GhidrAssistMCPProvider.java    # 带有选项卡的 UI 提供程序
├── GhidrAssistMCPServer.java      # MCP 服务器实现
├── GhidrAssistMCPBackend.java     # 后端工具管理
├── McpBackend.java                # 后端接口
├── McpTool.java                   # 工具接口
├── McpEventListener.java          # 事件通知接口
└── tools/                         # 工具实现
├── ProgramInfoTool.java
├── ListFunctionsTool.java
├── DecompileFunctionTool.java
├── AutoCreateStructTool.java
└── ... (共 29 个工具)

添加新工具

  1. 实现 McpTool 接口
public class MyCustomTool implements McpTool {
@Override
public String getName() { return "my_custom_tool"; }

@Override
public String getDescription() { return "Description"; }

@Override
public McpSchema.JsonSchema getInputSchema() { /* ... */ }

@Override
public McpSchema.CallToolResult execute(Map arguments, Program program) {
// 实现
}
}
  1. 在后端注册
// 在 GhidrAssistMCPBackend 构造函数中
registerTool(new MyCustomTool());

构建命令

# 清理构建
gradle clean

# 构建扩展程序
gradle buildExtension

# 使用特定的 Ghidra 路径构建
gradle -PGHIDRA_INSTALL_DIR=/path/to/ghidra buildExtension

# 调试构建
gradle buildExtension --debug

依赖项

  • MCP SDKio.modelcontextprotocol.sdk:mcp:0.10.0
  • Jetty 服务器11.0.20(HTTP/SSE 传输)
  • Jackson2.17.0(JSON 处理)
  • Ghidra API:随 Ghidra 安装捆绑

日志记录

UI 日志记录

日志选项卡提供实时监控:

  • 会话事件:服务器启动/停止、程序更改
  • 工具请求REQ: tool_name {parameters...}
  • 工具响应RES: tool_name {response...}
  • 错误消息:失败的操作和诊断信息

控制台日志记录

Ghidra 控制台中的详细日志记录:

  • 工具注册和初始化
  • MCP 服务器生命周期事件
  • 数据库事务操作
  • 错误堆栈跟踪和调试信息

故障排除

常见问题

服务器无法启动

  • 检查端口 8080 是否可用
  • 验证 Ghidra 安装路径
  • 检查控制台日志中的错误信息

工具未显示

  • 确保插件已启用
  • 在配置选项卡中检查工具状态
  • 在日志中验证后端初始化情况

MCP 客户端连接问题

  • 确认服务器正在运行(检查 GhidrAssistMCP 窗口)
  • 测试连接:curl http://localhost:8080/sse
  • 检查防火墙设置

工具执行失败

  • 验证程序是否已在 Ghidra 中加载
  • 检查工具参数是否正确
  • 在日志选项卡中查看错误消息

调试模式

通过在 Ghidra 启动时添加以下内容启用调试日志记录:

-Dlog4j.logger.ghidrassistmcp=DEBUG

贡献

  1. 分叉仓库
  2. 创建功能分支git checkout -b feature-name
  3. 进行适当测试后进行更改
  4. 遵循代码风格:使用现有的模式和约定
  5. 提交拉取请求并提供详细描述

代码标准

  • 适当使用Java 21+ 特性
  • 正确的异常处理,并带有有意义的消息
  • 所有数据库操作都要保证事务安全
  • UI 操作要保证线程安全
  • 公共 API 要有全面的文档

🔧 技术细节

核心组件

GhidrAssistMCP 的核心组件包括主插件入口点、HTTP/SSE MCP 服务器、工具管理和执行后端以及 UI 组件提供程序。各个组件之间相互协作,实现了与 Ghidra 的交互和 MCP 协议的支持。

MCP 协议实现

采用 HTTP 与服务器发送事件(SSE)进行传输,通过特定的端点实现双向通信和消息交换。同时,支持动态工具发现和注册以及有状态会话的管理。

插件架构

使用观察者模式实现解耦的 UI 更新,通过事务管理保证数据库操作的安全性,利用工具注册表实现动态工具的注册和管理,将配置保存在 Ghidra 的设置系统中,并对 UI 操作进行线程安全处理。

📄 许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE 文件。

致谢

  • NSA/Ghidra 团队 提供了出色的逆向工程平台
  • Anthropic 提供了模型上下文协议规范

有问题或遇到问题?

请在项目仓库中打开一个问题,用于报告错误、提出功能请求或询问使用和开发相关的问题。

  • 0 关注
  • 0 收藏,8 浏览
  • system 提出于 2025-09-18 20:42

相似服务问题