☰
REA 真实 Provider 验证完整指南:Hopper、Ghidra、IDA 三条 verify 泳道实操
2026/10/13 1:59:08 网站建设 项目流程

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 注册 JSONREA_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 读懂输出结果

字段含义异常时怎么办
cleanShutdownHopper 报告:资源是否全部回收false时会列出retainedRuntimePaths并抛错,先清理残留会话再重跑
targets/targetHashes被分析目标及其 SHA-256哈希对不上说明夹具被改动,重跑npm run verify:fixtures
verifier_run.process_lineage验证器自身子进程谱系status须为verified且descendants为空;Windows 上可能为unavailable(无 Job Object lease),换 Linux/macOS 跑
checksIDA 报告逐条通过项失败时看failed_phase定位阶段,用--report写本地诊断
passedIDA 报告总体结果false且控制台不含目标路径;用--report(0600 权限)生成私有诊断文件排查
documentCountAfterTargetSwitchHopper 目标切换后的文档数用于确认切换时旧文档被替换而非叠加

常见坑排错清单

  • 现象: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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询