本节摘要:聚合层一天能给你几十个结论,决定成败的是你能不能分辨哪些可信。本节先拆 REA 结论里最有价值的结构设计:每条结论附证据(可指认的反汇编片段、字符串、引用)与局限说明(「基于静态分析」「未验证运行时」「样本为混淆代码」)——这是所有 AI 分析工具都该学的输出格式,也是第 11 章证据链的雏形;配一个把三条结论标分层的实操示例。第二部分给证据分层读法:事实、推断、猜测三级,各自的处理动作不同,口诀「事实直接收,推断核一步,猜测进流水」。第三部分是 5.1 节承诺的媒体素养:27 万 stars 的增速异常怎么理性看待——一张项目成熟度自查表(提交频率、贡献者分布、issue 比、release 节奏),star 数字不在表里,同一张表适用于任何一夜爆红的工具。第四部分正面回答聚合层的适用与不适用,最后把 REA 放回全书工具箱,以前半本自测清单收束。
看一份合格输出的骨架(示意):
# rea_output.md —— REA 结论结构示例(示意) 结论:hello-go 为命令行工具,仅向标准输出打印问候,无网络与文件操作。 证据: - 入口 main.main;调用链落在 fmt.Println(伪代码节选如下) - 字符串表仅含 "hello re",未见 URL / 路径 / 密钥类内容 局限: - 基于静态分析,未验证运行时行为 - 未覆盖反射等动态分发路径(Go 程序常见)
这个三段结构的价值不在礼貌,在可争议性:证据给了你反驳的抓手(「字符串表我看过了,确实没有」),局限给了你追问的方向(「那动态路径怎么办」)。对比裸结论「该程序安全无害」——无从核起,等于什么都没说。第 03、04 章的命名建议(带理由与置信度)、假设验证(带命令与观测)其实是同一个设计哲学:AI 产出的一切结论都要能被拆开检查。 第 11 章会把这套做法升级成正式的证据链规范。
如果某个工具不输出这种结构,结构就由你来补:拿到裸结论后追问两句「证据是什么、局限在哪」,把答案手工补进结论再归档。结构是纪律,不是功能——纪律不挑工具。
把任何 AI 分析结论(不限于 REA)按证据强度分三级:
| 层级 | 特征 | 处理动作 |
|---|---|---|
| 事实 | 有可指认证据:反汇编片段、字符串、引用、流量记录 | 直接采信,标注出处 |
| 推断 | 由事实合理推出,但未经逐项验证:「未见网络调用,推断无回传」 | 复核关键一环后再用 |
| 猜测 | 模式匹配式断言:「这个常量像 TEA 密钥」 | 当作假设清单,进第 4.3 节流水线验证 |
实操口诀:事实直接收,推断核一步,猜测进流水。 局限说明的每一行都在告诉你这条结论最容易在哪一级翻车——「基于静态分析」提示推断层、「样本为混淆代码」提示猜测层——先读局限再读结论,顺序反过来会先入为主。
拿三条结论练一遍分层(对象仍是 demo_stripped):
# grading.md —— 给结论标证据层级(练习示意) A「check 类函数与参数做 strcmp 比较」 -> 事实:伪代码可见 strcmp,调用点可指认 B「该程序除许可校验外无其他功能」 -> 推断:函数表与字符串都指向单一功能,但未逐函数确认 C「异或常量 0x5a 来自某种默认配置习惯」 -> 猜测:无从验证动机,直接丢弃或当线索
三条结论三个待遇:A 直接入报告,B 标「待逐项确认」再用,C 不进任何正式产出。这个手感比记住任何工具参数都值钱。
分层还有一个团队价值:报告里直接标注证据层级,读报告的人就不用重走你的心路。事实区拿来就用,推断区带着「待确认」标签流转,猜测区留在工作笔记里——证据链的雏形,其实从这里就开始了。
5.1 节摆过事实:REA 约 27.1 万 stars(社区口径),2026-04 创建、半年至此,增速显著异常。本节把「自行甄别」落成可操作的表——四项指标都从公开仓库页面可查:
| 指标 | 健康形态 | 异常形态 |
|---|---|---|
| 提交频率 | 持续稳定,有审阅痕迹(merge 记录) | 突击式大批提交、机器人生成痕迹 |
| 贡献者分布 | 多人持续贡献,核心与外围有梯度 | 一人独写或贡献者只有符号性参与 |
| issue 比 | 开放 issue 与已关闭比例合理,维护者有回应 | 几百 issue 无人理,或全部秒关无讨论 |
| release 节奏 | 有规律的版本与变更说明 | 无 release 或只有持续滚动的主干 |
star 数字为什么不在表里:它衡量热度(可被话题、营销、刷量推高),不衡量工程。一个半年 27 万星的项目,值得按上表逐项查一遍再决定是否进入你的工具链;查完无论结论如何,你都对得起「自行甄别」四个字。同一个方法也适用于你以后遇到的任何「一夜爆红」工具——这是比 REA 本身更通用的收获。配套的工程姿势在 5.1 节已经给出:版本锁定、可回退、第二意见来源。
自查的执行细节提示三条:其一,看指标要带时间轴——近三十天与近一年的提交分布都看,突击式维护一眼可辨;其二,issue 读前二十条而不是只看数字,回应质量比关闭速度更说明问题;其三,把自查结果记进选型笔记,半年后复查一次——成熟度是动态的,今天的判断不该是终身的判断。
| 适用 | 不适用 |
|---|---|
| 陌生对象初判:「这是什么、值不值得挖」 | 深度精读:工程化重命名与长期留痕(回第 01 章) |
| 多对象混排的盘点任务(一次十来个异构样本) | 需要动态验证的问题(回调试器与第 08 章 angr) |
| 快速覆盖多引擎交叉印证 | 结论要进正式报告的关键证据(证据链要可追溯,回第 11 章规范) |
| 个人探索与原型阶段 | 团队关键路径依赖(见 5.1 节的可回退纪律) |
判断的最终标准只有一条:这个结论出错时,你发现得了吗? 能复核(有第二意见来源、有证据可查)的场景,聚合层放大你的效率;复核不了的场景(关键路径、正式证据),聚合层只是把风险也放大了。
前半本工具栈全景(第 00~05 章) 第 05 章 REA 聚合层 广度:一个入口问遍多类对象 ▲ 第 04 章 r2ai / r2mcp 自动化:角色、ReAct、RAG、验证流水线 ▲ 第 03 章 GhidraMCP 对话式:模型直接操作 Ghidra 工程 ▲ 第 02 章 radare2 / r2pipe 轻快:命令行 + 备料 JSON ▲ 第 01 章 Ghidra 地基:反编译、xref、headless、PyGhidra ▲ 第 00 章 立场 AI 提假设,人与工具做验证
自下而上是「人驱动工具」,自上而下是「模型驱动工具」;无论哪一层,验证权都在你手里——这是第 0.1 节立场的兑现。
这张栈图也是排障图:工具流出问题时往下一层退。MCP 对话结果可疑,退回 r2 / Ghidra 手工验证;脚本结果可疑,退回界面操作复现;连界面结论都存疑,就换工具互证(第 2.1 节的 r2 与 Ghidra 互证)。每一层都有下一层兜底,这比任何单点信任都可靠——「可回退」不只适用于 REA,也适用于整条工具栈。
收尾自测,六条能全答「是」才算把前半本拿到手:
哪条答不上,就回对应章重做一遍练习——自测的意义不是打分,是给回访指路。
后半本(第 06~11 章)转向纵深:semgrep 与 CodeQL 的规则化扫描、Joern 的属性图查询、angr 的符号执行验证、反编译专用模型与命名恢复,最后收束为方法论与证据链合规。
工具流时代收官。下一章起进入纵深篇:semgrep 与 CodeQL 两台静态分析引擎,把「模式与数据流」变成可查询的问题。