返回市场
吉德拉-MCP-齐格

吉德拉-MCP-齐格

作者:streamerd6 星标更新:2025-03-26

项目介绍

Ghidra MCP Zig 插件

Ghidra Zig License

Go Gradle

Ghidra MCP Zig 插件

一个提供 Ghidra 和基于 Zig 的 MCP 服务器之间桥梁的 Ghidra 插件,以增强程序分析能力。

功能

  • 基于 JNI 的 Ghidra 和 Zig 之间的通信
  • 函数反编译和重命名
  • 数据符号管理
  • 导入/导出列表
  • MCP 服务器集成
  • 完整的测试套件
  • 使用 Zig 的现代构建系统
  • 高效的内存管理
  • 类型安全的 JNI 桥接实现
  • 用于轻松集成的 Go 客户端库

先决条件

  • Zig(版本 0.13.0 或更高)
  • Ghidra(版本 11.3.1 或更高)
  • Java 开发工具包(JDK)17 或更高
  • Go(版本 1.22.4 或更高)
  • Gradle(版本 8.13 或更高)
  • Make

项目结构

ghidra-mcp-zig/
├── src/
│   ├── plugin/
│   │   ├── jni/
│   │   │   └── bridge.zig    # JNI 接口实现
│   │   ├── analysis.zig      # 程序分析逻辑
│   │   └── plugin.zig        # 插件初始化
│   └── server/
│       └── main.zig          # MCP 服务器实现
├── java/                     # Ghidra 插件 Java 代码
│   ├── build.gradle         # Gradle 构建配置
│   ├── gradlew             # Gradle 包装脚本
│   └── src/                # Java 源文件
├── pkg/
│   └── mcp/
│       └── client/         # Go MCP 客户端库
│           ├── client.go   # 客户端实现
│           └── client_test.go # 客户端测试
├── build.zig               # 构建配置
├── build.zig.zon          # 依赖项配置
├── go.mod                 # Go 模块定义
└── Makefile              # 构建自动化

依赖项

  • 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. 构建项目:

    # 构建所有组件
    make all
    
    # 或构建特定组件
    make build-server    # 构建 MCP 服务器
    make build-plugin   # 构建 Ghidra 插件
    
  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 引用管理
  • 对所有 JNI 操作进行空检查的错误处理
  • 在 Zig 和 Java 类型之间进行类型转换
  • 数组创建和元素设置
  • 对象创建和字段设置

关键特性

  1. 内存安全性

    • 自动清理 JNI 引用
    • 使用 UTF-8 转换的字符串处理
    • 安全的内存分配和释放
  2. 类型安全性

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

    • 全面的错误类型
    • 对所有 JNI 操作的空检查
    • 错误时的适当清理
  4. 对象管理

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

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 提交更改
  4. 推送到分支
  5. 创建拉取请求

许可证

该项目采用 MIT 许可证 - 详情见 LICENSE 文件。