Wang-Yang-source/ghidrai
GitHub: Wang-Yang-source/ghidrai
一款终端优先的逆向工程 TUI 工具集,整合 Ghidra、Rizin、Capstone 等多引擎,提供从快速预筛到深度反编译的一体化二进制分析工作流。
Stars: 0 | Forks: 0
# GhidrAI (v0.8.1)
**Terminal Reverse Engineering TUI Toolkit Aggregator**
*终端逆向工程 TUI 工作台 · 键盘优先与鼠标混用 · 多引擎协同互补*
GhidrAI is a terminal-first reverse engineering workspace. It bundles local static analysis with Ghidra bridge workflows and MCP tooling for consistent automation.
它将行业标准逆向引擎(Ghidra、Rizin)、反汇编/模拟引擎(Capstone、Unicorn)以及安全审计工具(Binwalk)作为子模块统一编排,形成“快扫描 + 深反编译 + 全景联动”的终端化分析流水线。
本项目的目标是把“多工具并联分析”变成可复用的单点工作流:先用轻量分析拿到快速结论,再以 Ghidra Headless 产出高精度反编译和引用关系,用 TUI 做统一呈现。
项目长期产品记忆和设计哲学记录在 [MEMORY.md](MEMORY.md) 和 [DESIGN.md](DESIGN.md)。
## 一句话项目说明(适合 GitHub 主页)
- **定位**:终端化逆向工程工作台 + MCP 适配层,兼容本地 CLI、TUI 与 MCP 客户端调用。
- **核心亮点**:在 `external` MCP 模式下兼容 `bridge_mcp_ghidra.py` 端点路径,可复用 `bethington/ghidra-mcp` 的工具语义。
- **安装体验**:首次运行涉及 Ghidra Headless 的命令时,默认自动下载并安装 `~/.ghidrai/ghidra`(可通过 `GHIDRA_AUTO_SETUP=0` 关闭)。
## 安装即用
cargo install --locked ghidrai
ghidrai --help
首次执行 `bridge`/`analyze`/`run-script` 等 Ghidra 依赖命令时会触发自动安装。
## 子模块(Submodules)架构与协同互补的意义
在 `v0.8.1` 中,GhidrAI 全面引入并规范了第三方逆向与模拟引擎的 submodule 架构。它们保存在 `third_party/` 目录下:
third_party/
├── ghidra # 行业标准反编译器,提供精确的控制流恢复、高阶类型重建与全局交叉引用
├── rizin # 极速的底层静态分析引擎,适用于瞬间提取符号、Sections 与字符串
├── capstone # 多架构指令级解码反汇编器,保障 TUI 能够以超低延迟展示精确机器码
├── unicorn # 多架构 CPU 模拟器,在沙箱中对基本块或函数进行指令级模拟执行
├── binwalk # 固件包分析与文件系统提取工具,在反编译前进行多层提取
└── ROPgadget # 专业 ROP 链配件提取器,为漏洞利用开发提供精确定位
### 协同互补的逆向工作流
这些子模块并不是简单的堆砌,而是在统一的内部数据模型(ToolEvent Bus)下各展所长,实现**互补协同**:
1. **快慢结合的静态分析**:启动二进制时,TUI 首先使用 `rizin` 和原生 Rust 工具进行秒级粗筛(字符串符号提取、硬防护检测、熵分析);在此期间,后台静默拉起 `ghidra` 进行深度反编译与全局 XRef 计算。当 Ghidra 结果就绪后,TUI 会将两者的数据无缝融合,使用户同时享有“秒级响应”与“高精度反编译”的体验。
2. **模拟验证静态分析**:当用户在 `Decompiler` 视图中浏览一段复杂的反编译代码并存有疑问时,可一键将该代码段/基本块传入基于 `unicorn` 与 `capstone` 驱动的微型沙箱模拟器,在终端内单步执行并观察寄存器 Diff 变化,以此验证反编译的逻辑,这就是**“以动态模拟验证静态推导”**。
3. **从解包到分析的垂直流**:对于固件文件,由 `binwalk` 子模块完成结构分析与文件系统解包后,解包出来的关键 ELF/PE 二进制将直接被拉入静态分析面板中,无缝链接。
## 设计哲学
GhidrAI 的核心是将强大的逆向分析引擎(尤其是 Ghidra)的能力转化为终端里的可组合命令、面板和工作流。
- **不重写引擎**:不要一开始尝试用 Rust 重写 Ghidra 数百万行的 Java/C++ 代码。相反,把 Ghidra 作为 upstream engine 纳入本项目,通过 headless analyzer 抽取核心数据。
- **快慢结合双路径**:
- 快速路径:使用原生 Rust 库(如 `goblin`、`memmap2`)进行秒级预分析(ELF/PE解析、字符串、符号表、熵分析)。
- 深度路径:调用 Ghidra Headless 进行耗时的反编译、交叉引用计算、高级图分析,并在后台运行不阻塞 UI。
- **AI 记忆管理**:所有 AI 结论必须区分 `Fact`(已确认)、`Hypothesis`(假设)和 `Question`(疑问),用户的每一次改名和注释都应沉淀在 `.ghidrai/` 项目记忆中。
- **终端瑞士军刀**:整合 Rizin、Radare2、Binwalk、Capstone 等工具作为特定功能的 adapter 补充。
## 核心功能 (Core Features)
GhidrAI 提供了一个统一的终端 TUI 工作区,整合了多种逆向工程与二进制分析工具。目前它能为你做以下事情:
1. **反编译与静态分析 (Decompilation & Static Analysis)**
- **Ghidra 头端桥接**:启动 Headless Ghidra,在终端直接列出函数表、一键反编译 C 伪代码、查看并跳转交叉引用(XRefs - Callers / Callees)、获取内存布局和导入/导出表。
- **Rizin 静态分析**:调用 `rizin` 引擎快速列出函数列表、搜索字符串、提取 sections 结构、导入导出符号及交叉引用。
2. **安全防范审计与 CWE 风险扫描**
- **Checksec 防护检查**:原生分析 ELF/PE/Mach-O 二进制文件的硬安全机制,如 Canary、NX(DEP)、PIE(ASLR)和 RELRO 是否开启。
- **CWE 风险静态扫描**:自动Triager,扫描包括:
- 不安全函数调用(如 `gets`、`strcpy`、`sprintf` 等 CWE-120 缓冲区溢出隐患)。
- 命令执行调用(CWE-78 注入风险)。
- 可疑硬编码密匙(CWE-798 凭据泄漏,扫描 "password"、"secret"、"token"、"apikey" 等敏感字符串)。
- 明文 URL 传输检查(CWE-319 风险)。
3. **固件提取与二进制结构分析**
- **Binwalk 固件签名分析**:调用内置 binwalk 引擎,扫描固件镜像的已知魔术头字节,发现并定位嵌入的文件系统(SquashFS、YAFFS 等)、压缩包、Bootloader 及加密段。
- **LIEF 二进制头解析**:瞬间提取 ELF/PE/Mach-O 的文件格式头部元数据、编译架构、节区和依赖动态库。
- **香农熵 (Entropy) 扫描**:分析文件或特定 Section 的熵值,判定是否存在加壳、压缩或加密数据块。
4. **指令反汇编与 ROP Gadget 构建**
- **Rust 原生反汇编**:无需外部工具即可针对 x86/x64 的 `.text` 代码段执行高速反汇编。
- **ROP Gadget 发现引擎**:基于 `iced-x86` 解码指令,自动定位、提取并排重 `ret` 结尾的 ROP 链小配件 (Gadgets)。
5. **内存与调试分析**
- **GDB 批处理 & GDB/MI 元数据**:基于 Machine Interface 协议交互,获取运行时符号或只读转储元数据。
- **Volatility 原生 triage**:对内存映像或大型二进制块进行特定模式识别与 IOC 分类。
6. **交互式 TUI 与命令控制台**
- 支持命令面板(Command Palette),配备 Fish 风格的控制台输入补全和历史建议。
- 事件日志支持双模式切换:不仅可以在底部看到命令的原始 stdout/stderr 输出,而且在后台运行完毕后,**安全漏洞发现、ROP 机器码、固件签名**等扫描结果将自动映射到对应的 UI 选项卡中,支持使用键盘上下键交互浏览与详细分析。
## 核心架构与工作流
GhidrAI 采用分层调度架构,完全解耦 UI、项目状态与重型分析计算:
GhidrAI TUI
↓
Rust Core:项目管理 / TUI 渲染 / 缓存索引 / AI Memory
↓
Adapter Layer:Ghidra headless 脚本 / Rizin / Capstone / 原生解析
↓
Analysis Engines:反编译、反汇编、符号、字符串、图、调试
典型的交互流程:
1. TUI 调用 `goblin` 秒开目标文件,展示基础段、导入导出、字符串。
2. 后台启动 `ghidra headless analyzer` 挂载 `third_party/ghidra`。
3. 自定义 Java/Python script 在后台抽取反编译、调用图、交叉引用,并以 JSON 格式增量流式输出。
4. GhidrAI TUI 实时消费 JSON,将数据呈现到反编译视图、函数调用图等面板中。
## 阶段性交付路线 (MVP)
- **MVP 0:项目合规与引擎纳入**
- 以 `third_party/ghidra` 形式引入 submodule,保留其开源许可证,搭建基础环境。
- **MVP 1:TUI 框架与操作体系**
- 构建核心三栏 TUI 面板、命令面板(Command Palette)、日志系统与快捷键绑定。
- **MVP 2:Rust 原生预分析**
- 不依赖 Ghidra,利用 Rust 原生库实现瞬间的文件格式识别、导出表、基础字符串和熵扫描。
- **MVP 3:Ghidra Headless 数据桥接**
- 实现从 Ghidra 导出函数列表、反编译代码、交叉引用及 Call Graph 数据,结构化渲染到终端。
- **MVP 4:AI 辅助与项目记忆 (Project Memory)**
- 实现本地/云端大模型接口对接,保存用户的函数重命名、注释,推断结果,并持久化到 SQLite 和 JSON 缓存中。
- **MVP 5:瑞士军刀扩展适配器**
- 接入 Rizin、Radare2、GDB、Binwalk 等工具,填补内存取证、固件解包、动态调试等能力拼图。
## 目录结构规划
ghidrai/
├── crates/
│ ├── ghidrai-core/ # Rust 核心:项目、任务、缓存、数据模型
│ ├── ghidrai-tui/ # Ratatui / Crossterm TUI 界面
│ ├── ghidrai-ai/ # AI 总结、命名、项目记忆
│ ├── ghidrai-bridge/ # 外部工具桥接层
│ ├── ghidrai-ghidra/ # Ghidra adapter (Headless 控制器)
│ └── ghidrai-db/ # 索引与持久化
│
├── adapters/
│ ├── ghidra/
│ │ ├── scripts/ # Ghidra 侧的 Java/Python 解析脚本
│ │ └── schema/ # JSON 输出协议定义
│ ├── rizin/
│ └── capstone/
│
├── third_party/
│ ├── ghidra/ # Ghidra 逆向分析引擎 (Java Headless)
│ ├── rizin/ # Rizin 快速分析框架 (C)
│ ├── capstone/ # Capstone 多架构反汇编引擎 (C)
│ ├── unicorn/ # Unicorn CPU 模拟器引擎 (C)
│ ├── binwalk/ # Binwalk 固件分析框架 (Python/Rust)
│ └── ROPgadget/ # ROPgadget gadget 提取工具 (Python)
│
├── .ghidrai/ # 运行时项目记忆缓存
│ ├── project.sqlite
│ ├── symbols.json
│ ├── comments.md
│ └── hypotheses.json
│
└── README.md
## 当前命令与状态
目前项目仍保留早期的 CLI 工具链入口,后续将逐步重构到 `ghidrai-core` 和 `ghidrai-tui` 的全新架构中。
首次执行涉及 Ghidra Headless 的命令时(如 `bridge`/`analyze`/`run-script`),默认会自动下载并安装到 `~/.ghidrai/ghidra`,以减少手工步骤。若要关闭自动安装,请设置:
export GHIDRA_AUTO_SETUP=0
关闭后再手动安装:
ghidrai setup
## MCP 兼容说明(含 ghidra-mcp 外部后端)
项目支持两种 MCP 运行模式:
- `legacy`(默认):使用本仓库自带的轻量 MCP 实现,仅暴露可由内建 bridge 直接代理的核心工具。
- `external`:代理运行外部 `bridge_mcp_ghidra.py`(对应 `bethington/ghidra-mcp`)进程,支持完整 `ghidra-mcp` 端点映射。
在 `external` 模式下,`ghidra-mcp` 的 MCP 工具集合会被完整代理,因此可直接服务支持 `ghidra-mcp` 的外部客户端和脚本;`legacy` 则保留兼容性和轻量启动体验。
如果你设置了 `GHIDRA_MCP_COMMAND`,`ghidrai mcp` 在未显式传 `--backend` 时会自动切到 `external`,可以直接走完整能力:
export GHIDRA_MCP_COMMAND=python3
export GHIDRA_MCP_ARGS='-m tools.bridge --transport stdio'
ghidrai mcp
当仅运行 `ghidrai mcp` 且未设置 `GHIDRA_MCP_COMMAND` 时,仍保持 legacy 模式。
当你要“尽量完整对齐 ghidra-mcp”时,建议优先走 `external`:
GHIDRA_MCP_COMMAND=python3 \
GHIDRA_MCP_ARGS='-m tools.bridge' \
ghidrai mcp --backend external
如果你的 `bridge_mcp_ghidra.py` 不是通过 `python3 -m` 启动,也可以直接传完整命令:
GHIDRA_MCP_COMMAND='python3 bridge_mcp_ghidra.py' \
GHIDRA_MCP_ARGS='--transport stdio' \
ghidrai mcp --backend external
辅助变量:
- `GHIDRA_MCP_BACKEND`:环境变量可选,等价于 `--backend`。
- `GHIDRA_MCP_COMMAND`:外部命令(或可解析的 JSON 数组)。
- `GHIDRA_MCP_ARGS`:额外参数(支持普通字符串或 JSON 数组)。
在无 ghidra-mcp 环境时做回归检查:
./tests/run_mcp_regression.sh external --expected-connect-fail
这样当外部后端没安装时会跳过失败,方便 CI/本地快速验证脚本本身。
也可以直接跑覆盖率对账脚本,快速看到还差哪些工具分组:
python3 tests/compare_mcp_coverage.py
如果你有 `ghidra-mcp` 仓库,传入它的 `tests/endpoints.json`:
python3 tests/compare_mcp_coverage.py --ghidra-endpoints /path/to/ghidra-mcp/tests/endpoints.json
如果你不想每次都准备 `ghidra-mcp` 仓库,仓库也提供了本地 `tests/endpoints.json` 快照用于回归对照。
需要自定义时可用环境变量指定:
export GHIDRA_MCP_ENDPOINTS_PATH=/path/to/ghidra-mcp/tests/endpoints.json
python3 tests/compare_mcp_coverage.py
# 启动 TUI 工作台
ghidrai tui
# 原生预分析工具测试
ghidrai toolkit lief ./tests/crackme
ghidrai toolkit strings ./tests/crackme
ghidrai toolkit entropy ./tests/crackme
## License
GPL-3.0-or-later. (注:集成的第三方引擎遵循其原有协议,如 Ghidra 的 Apache-2.0)。
标签:Ghidra, Rust, 二进制分析, 云安全监控, 云安全运维, 云资产清单, 可视化界面, 终端用户界面(TUI), 网络流量审计, 逆向工程, 通知系统, 静态分析