关于 Ghidra MCP Zig Plugin
Ghidra 插件通过 JNI 将 Ghidra 与 Zig MCP 服务连接,面向需要程序分析操作的用户。它提供函数反编译、符号管理及导入导出列表功能。
主要功能
- 01JNI 桥接 Ghidra 与 Zig
- 02反编译并重命名函数
- 03管理数据符号
- 04列出导入与导出
适用场景
- 01检查函数反编译结果
- 02重命名函数或数据对象
- 03查看程序导入与导出
MCP 相关
Zig MCP 服务向 MCP 客户端提供 Ghidra 程序分析工具,包括反编译、重命名及列表查询。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
暂未收录安装方式
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
还没有获取到工具列表
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Ghidra MCP Zig 插件
一个 Ghidra 插件,可在 Ghidra 与基于 Zig 的 MCP 服务之间搭建桥梁,增强程序分析能力。
功能
- 基于 JNI 的 Ghidra 与 Zig 通信
- 函数反编译与重命名
- 数据符号管理
- 导入项/导出项列表
- MCP 服务集成
- 全面的测试套件
- 基于 Zig 的现代构建系统
- 高效的内存管理
- 类型安全的 JNI 桥接实现
- Go 客户端库,便于集成
先决条件
- Zig(版本 0.13.0 或更高)
- Ghidra(版本 11.3.1 或更高)
- Java Development Kit(JDK)17 或更高版本
- Go(版本 1.22.4 或更高)
- Gradle(版本 8.13 或更高)
- Make
项目结构
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/ -
重启 Ghidra
用法
- 启动 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 桥接错误 |
开发
添加新功能
- 更新
src/plugin/jni/bridge.zig中的 JNI 接口 - 在
src/plugin/analysis.zig中实现相应功能 - 根据需要更新
src/server/main.zig中的服务端实现 - 重新构建并测试
调试
- 使用
make clean删除构建产物 - 查看 Ghidra 日志中的插件相关消息
- 使用
make run-server运行时,可在控制台查看服务端日志
JNI 桥接实现
JNI 桥接为 Zig 和 Java 提供了类型安全的接口:
- 通过正确的分配和释放进行内存管理
- 使用
DeleteLocalRef管理 JNI 引用 - 通过空值检查处理错误
- 在 Zig 和 Java 类型之间进行类型转换
- 创建数组并设置元素
- 创建对象并设置字段
主要特性
-
内存安全
- 自动清理 JNI 引用
- 通过 UTF-8 转换正确处理字符串
- 安全地分配和释放内存
-
类型安全
- 所有 JNI 操作均采用强类型
- 编译时类型检查
- 安全的类型转换
-
错误处理
- 全面的错误类型
- 对所有 JNI 操作进行空值检查
- 出错时进行正确清理
-
对象管理
- 安全地创建和销毁对象
- 通过类型检查访问字段
- 对数组进行带边界检查的处理
贡献
- Fork 此仓库
- 创建功能分支
- 提交更改
- 推送到该分支
- 创建 Pull Request
许可证
本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。
评论
支持 Markdown
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。