kirkderp/rbinghidra
GitHub: kirkderp/rbinghidra
这是一个基于 Ghidra 的二进制分析 MCP 服务器,用于自动化和集成逆向工程任务。
Stars: 2 | Forks: 0
# 运行 rbinghidra
[](LICENSE)
[](rust-toolchain.toml)
[](https://ghidra-sre.org/)
基于 Ghidra 的二进制分析 MCP 服务器。
`rbinghidra` 管理每个二进制文件的 Ghidra 项目,导入二进制文件,并通过 `analyzeHeadless` 运行 44 个由 Ghidra 驱动的工具。它作为一个 [Model Context Protocol](https://modelcontextprotocol.io) 服务器通过 stdio 运行,将每个查询暴露为一个命名的工具。
## 工具
**项目与缓存**
- `ghidra_health` / `ghidra_inventory` / `ghidra_lock_status` / `ghidra_cached_metadata`
**函数发现**
- `ghidra_list_functions` - 带有名称过滤的函数清单
- `ghidra_imports` / `ghidra_exports` / `ghidra_symbols` - 导入/导出/符号表
- `ghidra_namespaces` / `ghidra_data_types` / `ghidra_search_strings` / `ghidra_memory_map` / `ghidra_defined_data`
- `ghidra_string_context` - 字符串搜索,包含来自引用函数的交叉引用和反编译器代码片段
- `ghidra_function_stats` - 圈复杂度、指令计数、基本块计数、调用计数
- `ghidra_equates` - 命名常量
**反编译**
- `ghidra_decompile` - 类C 伪代码,支持可配置的简化风格
- `ghidra_decompile_meta` - 带有相邻函数上下文的反编译
- `ghidra_decompiler_calls` - 外部/内部调用分析
- `ghidra_decompiler_cfg` - 反编译器级别的控制流图,附带块摘要
- `ghidra_decompiler_memory` - 按反编译器块划分的内存访问模式
- `ghidra_decompiler_block_behavior` - 按反编译器块划分的行为分类
- `ghidra_decompiler_slice` - 基于种子的反编译器切片提取
- `ghidra_function_slices` - 更高级别的调用点、字段、缓冲区、间接和谱系切片
- `ghidra_path_digest` - 函数路径的紧凑块/事件摘要
- `ghidra_variables` - 函数参数和局部变量列表
- `ghidra_pcode` - P-code 提取
- `ghidra_search_decompilation` - 在反编译伪代码中进行有界正则表达式搜索
**分析**
- `ghidra_behaviors` - 基于 API 和字符串证据的行为威胁模式扫描
- `ghidra_anti_analysis` - 反调试、反虚拟机、时序检查、PEB 访问检测
- `ghidra_function_checkpoints` - 带有栈增量分析的延迟 P-code 检查点
- `ghidra_constants` - 常见、精确或基于范围的指令立即数扫描
- `ghidra_go_metadata` - 启发式 Go 构建/版本/模块/包指示器
**导航与 CFG**
- `ghidra_callgraph` - 可配置深度和节点限制的调用图遍历
- `ghidra_cfg` - 基本块控制流图
- `ghidra_xrefs` - 指向或来自函数/地址的交叉引用
**搜索与恢复**
- `ghidra_search_bytes` - 十六进制模式搜索
- `ghidra_disassemble`
- `ghidra_context_api_slots` / `ghidra_thunk_target` / `ghidra_dynamic_dispatch_table`
- `ghidra_read_bytes`
**导入与清理**
- `ghidra_import` - 导入二进制文件,可选加载器/处理器/cspec 选项
- `ghidra_delete` - 删除某个二进制文件的缓存 Ghidra 项目数据
## 要求
- **Ghidra 12.1+**,可通过 `GHIDRA_INSTALL_DIR` 发现
- **Java 21+** (Ghidra 启动脚本)
- **Rust stable** 工具链
- `ghidra_scripts/` 中的 Java 脚本已预编译为 `.class` 文件,与源代码一起存放(Ghidra 12.1 无头模式所需)。
## 快速开始
```
cargo build --workspace
cargo test --workspace
# 运行 MCP server
GHIDRA_INSTALL_DIR=/opt/ghidra_12.1 \
RBM_CACHE_DIR=./cache \
cargo run -p rbm-server
```
服务器通过 stdio 使用 MCP 协议通信。将您的 MCP 客户端配置为使用其作为 stdio 子进程:
```
{
"mcpServers": {
"rbinghidra": {
"command": "/path/to/rbinghidra",
"args": [],
"env": {
"GHIDRA_INSTALL_DIR": "/opt/ghidra_12.1"
}
}
}
}
```
## 配置
| 变量 | 默认值 | 描述 |
| --- | --- | --- |
| `GHIDRA_INSTALL_DIR` | (自动检测) | Ghidra 安装根目录 |
| `RBM_CACHE_DIR` | `./rbinghidra-cache` | 缓存根目录 (相对于当前工作目录) |
| `RBM_GHIDRA_TIMEOUT` | 60 | 每次调用超时时间 (秒) |
| `RBM_GHIDRA_IMPORT_TIMEOUT` | 900 | 导入超时时间 (秒) |
## 架构
```
MCP Client
-> stdio JSON-RPC
-> rbinghidra server
-> Ghidra analyzeHeadless
(cold path: import per SHA-256)
(warm path: -process -noanalysis for cached projects)
-> JSON results
```
项目一次性导入并按 SHA-256 进行缓存。后续的查询使用热路径调用,跳过重新分析,使得大多数操作都能实现亚秒级响应时间。
## 项目结构
```
crates/
rbm-core/ Cache paths, config, environment, error types
rbm-ghidra/ Ghidra project management, import, and query modules
rbm-server/ MCP server binary (rbinghidra)
ghidra_scripts/ Java post-scripts executed by analyzeHeadless
```
## 许可证
MIT - 详见 [LICENSE](LICENSE)。
标签:DAST, Ghidra, JS文件枚举, MCP服务器, Model Context Protocol, Rust语言, stdio通信, TLS抓取, URL提取, 二进制分析, 二进制逆向, 云安全监控, 云安全运维, 云资产清单, 代码分析, 内存映射, 凭证管理, 函数发现, 反编译, 可视化界面, 导入导出分析, 工具链, 工具集成, 恶意软件分析, 情报收集, 控制流图, 漏洞研究, 符号表, 软件安全, 逆向工程, 通知系统, 静态分析