REA 真实 Provider 验证完整指南:Hopper、Ghidra、IDA 三条 verify 泳道实操
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA 内置真实 Provider 验证泳道:用已安装的 Hopper、Ghidra、IDA 跑端到端测试,核对反编译、交叉引用与进程清理是否可信。本文带你完成环境自检与三条verify:*泳道的执行,并读懂 JSON 报告里cleanShutdown、process_lineage等关键字段。
适用场景与取舍
- 已安装 Hopper、Ghidra 或 IDA,想验证 REA 的引擎声明是否可信时,用这条泳道。
- 修改了 provider 适配器、需要端到端回归证据时,用它替代纯单元测试。
- 只想跑单元或边界测试时不用——
npm run test:focused等命令不需要真实引擎。 - 机器上没有对应引擎时不要硬跑:泳道会直接失败,mock 不能替代引擎声明(见 docs/testing.md)。
- 平台注意:
verify:hopper依赖 macOS 上安装的 Hopper;Ghidra 主泳道支持 Linux x64/arm64 与 macOS;IDA 已验证 Windows 与 macOS arm64。
前置条件与环境自检
| 项目 | 要求 | 自检方法(命令或查看方式) |
|---|---|---|
| REA 依赖与产物 | 已npm install,build:cached能成功 | npm run build:cached |
| Hopper 引擎 | 已安装且完成 first-run(demo 或 license) | rea doctor --provider hopper --json |
| Ghidra | 解包 Ghidra 12.1.4 + 64 位 JDK 21,含宿主架构原生反编译器 | 设GHIDRA_INSTALL_DIR后rea doctor --json |
| IDA | 已装 IDA + 上游 ida-pro-mcp 注册 JSON | REA_IDA_MCP_CONFIG指向文件后rea doctor --provider ida --json |
| 测试夹具 | Hopper 泳道需 conformance 夹具 | npm run verify:fixtures |
| 主机 C 编译器 | Ghidra 主泳道现场编译 C 预言机目标 | cc --version |
rea doctor --json会校验平台、架构、Ghidra 12.1.x 版本、analyzeHeadless可用性、JDK 位宽与javac是否存在(见 docs/installation.md)。
Step 1 准备仓库与产物
先克隆仓库并完成依赖安装:git clone https://gitcode.com/GitHub_Trending/rea2/rea,再执行npm install与npm run build:cached。
预期看到构建成功且无缺失依赖报错;三条泳道的npm run verify:*脚本都内置了build:cached,产物缺位会在启动阶段就暴露。
Step 2 运行三条验证泳道
Hopper 泳道:做什么
执行npm run verify:hopper。它先跑verify:fixtures生成夹具,再启动 scripts/verify-real-hopper.mjs,全程不 mock 任何 provider。
Hopper 泳道:验证点
- 加载三个夹具目标(c 主目标、version-v2 次目标、large 大型目标),逐一核对 SHA-256。
- MCP 会话声明的工具与服务端实际工具清单完全一致。
list_procedures、read_bytes、xrefs、batch_decompile与 C 夹具的 oracle 逐条比对。- 目标 A 切到 B 后文档被替换,重复打开同一目标不产生重复文档。
- 干净关闭:Hopper 自带 MCP 服务未运行、无关 Hopper 实例存活、临时会话目录清零。
Ghidra 泳道:做什么
设置GHIDRA_INSTALL_DIR指向解包的 Ghidra 12.1.4、JAVA_HOME指向 JDK 21,然后执行npm run verify:ghidra,入口是 scripts/verify-real-ghidra.mjs。
Ghidra 泳道:验证点
- 现场用
cc把版本化 C 预言机编成 debug 与 stripped 两个宿主目标(见 docs/ghidra-provider.md)。 - 覆盖 25 个只读操作:13 个清单/名称/搜索 + 12 个函数分析操作。
- 外部函数、解析后的 thunk、导出符号、stripped 符号行为,以及取消、启动超时、序列化并发、畸形目标拒绝。
- 进程与项目清理:临时项目删除、桥接进程无残留。
- 需要跨格式时另跑
verify:ghidra:cross-format(AArch64 ELF、x86-64 PE、x86-64 Mach-O,需clang、LLD、lld-link)。
IDA 泳道:做什么
按 docs/ida-provider.md 写好上游注册 JSON,设REA_IDA_MCP_CONFIG指向它,再执行npm run verify:ida -- --target /path/to/binary。该泳道不安装任何引擎;--procedure默认rea_fixture_add。
IDA 泳道:验证点
- CLI 阶段:用生产 CLI 跑
rea function <target> <procedure> --provider ida --json,断言伪代码与汇编非空、Evidence 结构完整。 - MCP 阶段:单条连接内完成
open_binary、analyze_function、xrefs、字符串搜索,并确认 CLI 与 MCP 的函数身份、伪代码、汇编完全一致(parity)。 - 清理阶段:attached 模式确认 GUI 打开的仍是原始输入;headless 模式确认自建数据库从上游会话消失、私有工作区被删除;原始二进制全程未被修改、从未被执行。
Step 3 读懂输出结果
| 字段 | 含义 | 异常时怎么办 |
|---|---|---|
cleanShutdown | Hopper 报告:资源是否全部回收 | false时会列出retainedRuntimePaths并抛错,先清理残留会话再重跑 |
targets/targetHashes | 被分析目标及其 SHA-256 | 哈希对不上说明夹具被改动,重跑npm run verify:fixtures |
verifier_run.process_lineage | 验证器自身子进程谱系 | status须为verified且descendants为空;Windows 上可能为unavailable(无 Job Object lease),换 Linux/macOS 跑 |
checks | IDA 报告逐条通过项 | 失败时看failed_phase定位阶段,用--report写本地诊断 |
passed | IDA 报告总体结果 | false且控制台不含目标路径;用--report(0600 权限)生成私有诊断文件排查 |
documentCountAfterTargetSwitch | Hopper 目标切换后的文档数 | 用于确认切换时旧文档被替换而非叠加 |
常见坑排错清单
- 现象:
verify:hopper在无头 macOS 上 Hopper 起不来。原因:first-run UI 未完成或 demo 弹窗阻塞。处理:在同一用户会话先完成 first-run,再用rea doctor --provider hopper --json读结构化诊断。 - 现象:
verify:ida直接报 "IDA verification requires --target and REA_IDA_MCP_CONFIG"。原因:缺--target参数或REA_IDA_MCP_CONFIG环境变量。处理:先备好注册 JSON,再补齐两个参数。 - 现象:IDA attached 模式身份校验失败。原因:传了
.idb/.i64数据库,或原始二进制 SHA-256 与 IDA 记录不符。处理:改用原始输入二进制,并确保 REA 能读取它。 - 现象:Ghidra 首次查询超时。原因:默认启动期限 330,000 ms 对大二进制不够。处理:在 server 环境设
REA_GHIDRA_STARTUP_TIMEOUT_MS为更大整数值(1 到 2,147,483,647 毫秒)。 - 现象:Hopper 泳道报
Missing fixture c。原因:conformance 夹具未生成。处理:先执行npm run verify:fixtures;verify:hopper泳道已内置该步,手动调脚本时需自行先跑。
收尾速查
| 目的 | 命令 / 入口 |
|---|---|
| Hopper 泳道 | npm run verify:hopper→ scripts/verify-real-hopper.mjs |
| Ghidra 泳道 | npm run verify:ghidra→ scripts/verify-real-ghidra.mjs |
| IDA 泳道 | npm run verify:ida -- --target <binary>→ scripts/verify-real-ida.mjs |
| 环境自检 | rea doctor --json、rea doctor --provider hopper|ida --json |
| 测试方法论 | docs/testing.md |
| Ghidra 语义契约 | docs/ghidra-provider.md |
💡 环境不满足时的低门槛替代:跑
npm run test:acceptance(编译后 CLI/MCP 验收旅程,注入 provider 仍属集成层)和npm run test:focused -- <文件>看单个边界;真实引擎声明留给对应verify:*泳道。
参考资料
- docs/testing.md:测试方法论与真实工具链泳道清单
- scripts/verify-real-hopper.mjs:Hopper 验证器入口
- scripts/verify-real-ghidra.mjs:Ghidra 验证器入口
- scripts/verify-real-ida.mjs:IDA 验证器入口
- docs/ghidra-provider.md:Ghidra 只读操作与函数分析契约
- docs/ida-provider.md:IDA 注册 JSON 与 attached/headless 两种模式
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考