Ghidra MCP Zig插件

一个为Ghidra提供与基于Zig的MCP服务器桥接的插件,增强程序分析能力。

  • by streamerd
  • Zig
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 streamerd/ghidra-mcp-zig

使用说明

Ghidra MCP Zig插件

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

特性

  • 基于JNI的Ghidra与Zig通信
  • 函数反编译和重命名
  • 数据符号管理
  • 进出口清单
  • MCP服务器集成
  • 全面的测试套件
  • 使用Zig的现代构建系统
  • 高效的内存管理
  • 类型安全JNI网桥实施
  • Go客户端库,便于集成

先决条件

  • 之字形 (0.13.0或更高版本)
  • 希德拉 (11.3.1或更高版本)
  • Java开发工具包(JDK)17或更高版本
  • 去 (版本1.22.4或更高版本)
  • Gradle (8.13或更高版本)
  • 制造

项目结构

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. 重新启动 Hydro

用法

  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 程序状态无效
JNIError JNI网桥错误

发展

添加新功能

  1. 在中更新JNI接口 src/plugin/jni/bridge.zig
  2. 在中实现相应的功能 src/plugin/analysis.zig
  3. 更新中的服务器实现 src/server/main.zig 如有需要
  4. 重建和测试

调试

  • 使用 make clean 删除构建工件
  • 检查Ghidra日志中与插件相关的消息
  • 使用运行时,服务器日志将在控制台中可用 make run-server

JNI网桥实施

JNI桥在Zig和Java之间提供了一个类型安全的接口:

  • 具有适当分配/释放的内存管理
  • JNI参考管理 DeleteLocalRef
  • 使用空检查进行错误处理
  • Zig和Java类型之间的类型转换
  • 数组创建和元素设置
  • 对象创建和字段设置

主要特点

  1. 内存安全

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

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

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

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

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 提交您的更改
  4. 推到分支
  5. 创建拉取请求

许可证

此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。