一个提供 Ghidra 和基于 Zig 的 MCP 服务器之间桥梁的 Ghidra 插件,以增强程序分析能力。
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 # 构建自动化
克隆仓库:
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
构建项目:
# 构建所有组件
make all
# 或构建特定组件
make build-server # 构建 MCP 服务器
make build-plugin # 构建 Ghidra 插件
运行服务器:
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/
重启 Ghidra
| 命令 | 描述 | 参数 |
|---|---|---|
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 桥接错误 |
src/plugin/jni/bridge.zig 中的 JNI 接口src/plugin/analysis.zig 中实现相应的功能src/server/main.zig 中更新服务器实现make clean 删除构建工件make run-server 运行时,服务器日志将在控制台中可用JNI 桥接提供了 Zig 和 Java 之间的类型安全接口:
DeleteLocalRef 进行 JNI 引用管理内存安全性
类型安全性
错误处理
对象管理
该项目采用 MIT 许可证 - 详情见 LICENSE 文件。