mcpField
G
Ghidra MCP Zig Plugin

Ghidra MCP Zig Plugin

本地服务
github.com/streamerd开发工具783 周前更新

关于 Ghidra MCP Zig Plugin

Ghidra 插件通过 JNI 将 Ghidra 与 Zig MCP 服务连接,面向需要程序分析操作的用户。它提供函数反编译、符号管理及导入导出列表功能。

主要功能

  1. 01JNI 桥接 Ghidra 与 Zig
  2. 02反编译并重命名函数
  3. 03管理数据符号
  4. 04列出导入与导出

适用场景

  1. 01检查函数反编译结果
  2. 02重命名函数或数据对象
  3. 03查看程序导入与导出

MCP 相关

Zig MCP 服务向 MCP 客户端提供 Ghidra 程序分析工具,包括反编译、重命名及列表查询。

配置

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

暂未收录安装方式

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

代码仓库

工具

还没有获取到工具列表

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

详细介绍

Ghidra MCP Zig 插件

Ghidra Zig License

Go Gradle

Ghidra MCP Zig 插件

一个 Ghidra 插件,可在 Ghidra 与基于 Zig 的 MCP 服务之间搭建桥梁,增强程序分析能力。

功能

  • 基于 JNI 的 Ghidra 与 Zig 通信
  • 函数反编译与重命名
  • 数据符号管理
  • 导入项/导出项列表
  • MCP 服务集成
  • 全面的测试套件
  • 基于 Zig 的现代构建系统
  • 高效的内存管理
  • 类型安全的 JNI 桥接实现
  • Go 客户端库,便于集成

先决条件

  • Zig(版本 0.13.0 或更高)
  • Ghidra(版本 11.3.1 或更高)
  • Java Development Kit(JDK)17 或更高版本
  • Go(版本 1.22.4 或更高)
  • Gradle(版本 8.13 或更高)
  • Make

项目结构

ghidra-mcp-zig/
├── src/
│   ├── plugin/
│   │   ├── jni/
│   │   │   └── bridge.zig    # JNI interface implementation
│   │   ├── analysis.zig      # Program analysis logic
│   │   └── plugin.zig        # Plugin initialization
│   └── server/
│       └── main.zig          # MCP server implementation
├── java/                     # Ghidra plugin Java code
│   ├── build.gradle         # Gradle build configuration
│   ├── gradlew             # Gradle wrapper script
│   └── src/                # Java source files
├── pkg/
│   └── mcp/
│       └── client/         # Go MCP client library
│           ├── client.go   # Client implementation
│           └── client_test.go # Client tests
├── build.zig               # Build configuration
├── build.zig.zon          # Dependencies configuration
├── go.mod                 # Go module definition
└── Makefile              # Build automation

依赖项

  • zig-jni(v0.0.9)- Zig 的 JNI 绑定

构建

  1. 克隆代码库:

    git clone https://github.com/yourusername/ghidra-mcp-zig.git
    cd ghidra-mcp-zig
    
  2. 创建包含以下变量的 .env 文件:

    GHIDRA_PATH=/path/to/ghidra_11.3.1_PUBLIC/Ghidra/Features/Base/lib/Base.jar
    JAVA_HOME=/path/to/your/jdk
    
  3. 构建项目:

    # Build everything
    make all
    
    # Or build specific components
    make build-server    # Build the MCP server
    make build-plugin   # Build the Ghidra plugin
    
  4. 运行服务:

    make run-server
    
构建目标
目标描述使用示例
all构建所有组件make all
build-server构建 MCP 服务make build-server
build-plugin构建 Ghidra 插件make build-plugin
clean清理所有构建产物make clean
clean-server清理服务构建产物make clean-server
clean-plugin清理插件构建产物make clean-plugin
运行目标
目标描述使用示例
run-server启动 MCP 服务make run-server
run-plugin启动 Ghidra 插件make run-plugin
测试目标
目标描述使用示例
test运行所有测试make test
test-server运行服务测试make test-server
test-plugin运行插件测试make test-plugin

如需查看可用目标的完整列表,请运行:

make help

安装

  1. 构建插件:

    make build-plugin
    
  2. 将构建好的插件复制到 Ghidra 插件目录:

    cp zig-out/lib/libghidra-mcp-zig.dylib /path/to/ghidra/Extensions/Ghidra/ghidra-mcp-zig/
    
  3. 重启 Ghidra

用法

  1. 启动 Ghidra 并打开要分析的程序
  2. MCP 插件将在 Ghidra 插件管理器中提供
  3. 通过 Ghidra 界面使用插件功能
可用的 MCP 命令
命令描述参数
decompile反编译函数address: u64
rename_function重命名函数address: u64, new_name: string
rename_data重命名数据对象address: u64, new_name: string
list_functions列出所有函数无
list_data列出所有数据对象无
list_imports列出所有导入项无
list_exports列出所有导出项无
错误处理

此实现包含全面的错误处理,并定义了特定的错误类型:

错误类型描述
ConnectionError连接相关错误
MessageError消息处理错误
ResponseError响应解析错误
InvalidAddress无效的内存地址
InvalidFunction无效的函数引用
InvalidData无效的数据引用
DecompilationFailed函数反编译失败
RenameFailed重命名操作失败
OutOfMemory内存分配失败
InvalidProgram无效的程序状态
JNIErrorJNI 桥接错误

开发

添加新功能
  1. 更新 src/plugin/jni/bridge.zig 中的 JNI 接口
  2. 在 src/plugin/analysis.zig 中实现相应功能
  3. 根据需要更新 src/server/main.zig 中的服务端实现
  4. 重新构建并测试
调试
  • 使用 make clean 删除构建产物
  • 查看 Ghidra 日志中的插件相关消息
  • 使用 make run-server 运行时,可在控制台查看服务端日志
JNI 桥接实现

JNI 桥接为 Zig 和 Java 提供了类型安全的接口:

  • 通过正确的分配和释放进行内存管理
  • 使用 DeleteLocalRef 管理 JNI 引用
  • 通过空值检查处理错误
  • 在 Zig 和 Java 类型之间进行类型转换
  • 创建数组并设置元素
  • 创建对象并设置字段
主要特性
  1. 内存安全

    • 自动清理 JNI 引用
    • 通过 UTF-8 转换正确处理字符串
    • 安全地分配和释放内存
  2. 类型安全

    • 所有 JNI 操作均采用强类型
    • 编译时类型检查
    • 安全的类型转换
  3. 错误处理

    • 全面的错误类型
    • 对所有 JNI 操作进行空值检查
    • 出错时进行正确清理
  4. 对象管理

    • 安全地创建和销毁对象
    • 通过类型检查访问字段
    • 对数组进行带边界检查的处理

贡献

  1. Fork 此仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到该分支
  5. 创建 Pull Request

许可证

本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

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

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