kirkderp/rbinghidra

GitHub: kirkderp/rbinghidra

这是一个基于 Ghidra 的二进制分析 MCP 服务器,用于自动化和集成逆向工程任务。

Stars: 2 | Forks: 0

# 运行 rbinghidra [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) [![Rust](https://img.shields.io/badge/rust-stable-blue)](rust-toolchain.toml) [![Ghidra](https://img.shields.io/badge/Ghidra-12.1+-purple)](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提取, 二进制分析, 二进制逆向, 云安全监控, 云安全运维, 云资产清单, 代码分析, 内存映射, 凭证管理, 函数发现, 反编译, 可视化界面, 导入导出分析, 工具链, 工具集成, 恶意软件分析, 情报收集, 控制流图, 漏洞研究, 符号表, 软件安全, 逆向工程, 通知系统, 静态分析