Ghidra MCP Zig插件
  
 
一个Ghidra插件,在Ghidra和基于Zig的MCP服务器之间提供桥梁,以增强程序分析能力。
特性
- 基于JNI的Ghidra与Zig通信
- 函数反编译和重命名
- 数据符号管理
- 进出口清单
- MCP服务器集成
- 全面的测试套件
- 使用Zig的现代构建系统
- 高效的内存管理
- 类型安全JNI网桥实施
- Go客户端库,便于集成
先决条件
项目结构
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绑定
建筑
- 克隆存储库:
git clone https://github.com/yourusername/ghidra-mcp-zig.git
cd ghidra-mcp-zig- 创建一个
.env包含以下变量的文件:
GHIDRA_PATH=/path/to/ghidra_11.3.1_PUBLIC/Ghidra/Features/Base/lib/Base.jar
JAVA_HOME=/path/to/your/jdk- 构建项目:
# Build everything
make all
# Or build specific components
make build-server # Build the MCP server
make build-plugin # Build the Ghidra plugin- 运行服务器:
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安装
- 构建插件:
make build-plugin- 将构建的插件复制到Ghidra插件目录:
cp zig-out/lib/libghidra-mcp-zig.dylib /path/to/ghidra/Extensions/Ghidra/ghidra-mcp-zig/- 重新启动 Hydro
用法
- 启动Ghidra并打开程序进行分析
- MCP插件将在Ghidra插件管理器中提供
- 通过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网桥错误 |
发展
添加新功能
- 在中更新JNI接口
src/plugin/jni/bridge.zig - 在中实现相应的功能
src/plugin/analysis.zig - 更新中的服务器实现
src/server/main.zig如有需要 - 重建和测试
调试
- 使用
make clean删除构建工件 - 检查Ghidra日志中与插件相关的消息
- 使用运行时,服务器日志将在控制台中可用
make run-server
JNI网桥实施
JNI桥在Zig和Java之间提供了一个类型安全的接口:
- 具有适当分配/释放的内存管理
- JNI参考管理
DeleteLocalRef - 使用空检查进行错误处理
- Zig和Java类型之间的类型转换
- 数组创建和元素设置
- 对象创建和字段设置
主要特点
- 内存安全
- 自动清理JNI引用 - 使用UTF-8转换进行正确的字符串处理 - 安全内存分配和释放
- 类型安全
- 所有JNI操作的强打字 - 编译时类型检查 - 安全类型转换
- 错误处理
- 全面的错误类型 - 所有JNI操作的空检查 - 正确清理错误
- 对象管理
- 安全对象创建和销毁 - 带类型检查的现场访问 - 带边界检查的数组处理
贡献
- 分叉存储库
- 创建要素分支
- 提交您的更改
- 推到分支
- 创建拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
