使用说明
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许可证获得许可-请参阅 许可证 文件以获取详细信息。