ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

REA 逆向工程检查为什么宁报 unknown 不报 pass:fail-closed 设计的完整避坑指南

REA 逆向工程检查为什么宁报 unknown 不报 pass:fail-closed 设计的完整避坑指南

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 的聚合函数里,一条一条过:

  1. 只要有一个必需阶段挂在fail上,整体直接判fail;
  2. 每个必需阶段都拿到pass,整体才有资格pass;
  3. 其余情形按unknown→truncated→unsupported→skipped的先后,谁先命中就返回谁;
  4. 全都落空时,默认仍回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.——缺了这一科,总分自然给不了满分。📋

报告到手,先做什么、怎么读

拿到报告后按这个顺序看:

  1. 先看整体status。是pass就放心用;是fail,照着 finding 里的稳定 reason code 改。
  2. 是unknown别慌,那不是报错,而是工具在跟你明说"我还不能确定"。顺着每个阶段的next_action补证据就行。
  3. 想本地复算一遍,跑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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进