REA 逆向工程检查为什么宁报 unknown 不报 pass:fail-closed 设计的完整避坑指南
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
REA(Reverse Engineer Anything)是在本地跑的逆向工程工具包,让 AI Agent 从 App 行为一路逆向到 native 二进制,并把 Hopper、Ghidra、浏览器观察这些能力统一成 MCP 接口喂给 Agent。它最反直觉的规矩是:重构就绪检查里,证据一缺就落unknown,绝不美化成pass。这套"三态检查"的取舍,正是本文要拆的。
把"没测过"默认成"没事",会埋多大的雷
先做个类比。体检报告上有一项写着"未检测",医生不会替你打勾填成"正常"——那样你就再不去补这项检查,真有问题也被这行绿字盖过去了。没测,就是没测。
逆向工程里是同一个道理。Agent 重建一段实现时,某个符号查不到,多半只是调试信息没带出来,不代表对应的功能真的不存在。可要是工具把"没查到"回成"没问题",Agent 就会顺着这个错前提一路重建,整条实现跟着歪掉。🩺 REA 的立场是 fail-closed:不确定的宁可挂起,也不放行。
REA 怎么把"不确定"拆成能读的状态
对外常叫"三态",实际是pass、fail之外再补三个中间态。核心思路:不给结论留模糊地带,把每一种"没搞定"单独标出来,再配一条下一步建议。
五种状态,各管各的事
| 状态 | 它到底在说什么 |
|---|---|
unknown | 证据不够,下不了结论(最常被缺证据触发) |
unsupported | 引擎本身不支持这项分析 |
truncated | 分析中途被截断 |
skipped | 这一步被主动跳过了 |
区分它们的意义在于处方不同:truncated提醒你"没跑完,重跑一次",unsupported提醒你"换个引擎",unknown则提醒你"补证据"。同是"没通过",下一步完全不一样。🔎
整体结论怎么定:少一项就抢不回 pass
汇总逻辑在 reconstructionReadiness.ts 的聚合函数里,一条一条过:
- 只要有一个必需阶段挂在
fail上,整体直接判fail; - 每个必需阶段都拿到
pass,整体才有资格pass; - 其余情形按
unknown→truncated→unsupported→skipped的先后,谁先命中就返回谁; - 全都落空时,默认仍回
unknown。
第 2 条的反面值得注意:哪怕只缺一个必需阶段,整体也拿不到pass。阶段层面还更严一点——某个阶段哪怕自己填了pass,只要还挂着未解决的 finding,也会被压回unknown。
证据本身也分了可信度档
每条 Evidence 还带一个confidence字段,分三档:observed(亲眼看到)、derived(推算得出)、inferred(靠推断补的)。evidence.ts 里另有authority标明这条证据来自 shipped-artifact、controlled-replay 还是 analyst-inference 等来源。状态分层加置信度分层,等于给每条证据配了一本小账本。📚
三个边界 case,看机制怎么落地
- 空证据包:义务台账文档 写得很直白——空请求只会产出一个
unknown台账,里面一条义务都没有;源证据不到位,"闭环"这种话根本不该说。 - 对比不完整:九阶段里的
compare-authority-candidate要求,只要对比被截断、权限拿不到、或撞到矛盾证据,结论就强制降为unknown,专治"看起来等价"的假阳性(规则见 reconstruction-readiness 文档)。 - 阶段没交:在输入里找不到的阶段不会按通过处理,而是直接标成缺失,并附一句
Supply the missing conformance stage.——缺了这一科,总分自然给不了满分。📋
报告到手,先做什么、怎么读
拿到报告后按这个顺序看:
- 先看整体
status。是pass就放心用;是fail,照着 finding 里的稳定 reason code 改。 - 是
unknown别慌,那不是报错,而是工具在跟你明说"我还不能确定"。顺着每个阶段的next_action补证据就行。 - 想本地复算一遍,跑
npm run verify:readiness,校验脚本 会走完整九阶段闭环,并验证对陈旧、被篡改输入的拒绝。
一句话收尾
没验证过,就别当验证过。REA 把"缺证据"钉死在unknown上,好unknown是在提醒 Agent 还差哪块拼图,坏pass才会把它架着错误前提往前冲——这正是逆向工程这条信任链的地基。🎯
【免费下载链接】reaReverse engineer anything with agents, from app behavior down to native binaries.项目地址: https://gitcode.com/GitHub_Trending/rea2/rea
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考