AI 自动化逆向(六)AI 解一个 9 万条目的资源容器
本文是「AI 自动化逆向」系列第 6 篇。上一篇:控制组:区分「没有」和「没取到」;下一篇预告:AI 一旦找到单一指标就会崇拜它。
前言
上一篇讲的是"空"必须被担保。这一篇反过来:看一个"全绿"的结果——九万多个条目、100% 解码、0 失败。
越是漂亮的清单,越值得问一句:它凭什么敢说自己是对的?
这一篇的答案是四个词:先立等式。
(同前几篇:文中"AI"指执行分析的模型,"我"指设定目标、审结果的人;内容均已脱敏,只保留量级与比例。)
一、先看这个坑:"猜字段"为什么必然翻车
容器类格式的逆向有一个甜蜜的陷阱:字段是猜出来的。
打开一个包,看到一小段定长头、一段数据区、一个索引区。很自然的第一步是猜:哪个数字是条目数?哪个是偏移?路径长度用几个字节存?——每一个猜测单独看都可能对,猜到"能跑通几个样本"就宣布解出来了。
这就是翻车的形状:每个字段都"看起来对",但没有任何东西能证明你是对的。猜错一个宽度,后面的字段全部错位;而错位之后的输出依然"格式整齐、读得出东西"——你又回到了"看起来像结论的错答案"。
这一篇讲的是它躲开这条路的做法,只有一句话:
先不猜任何字段的含义,先找出"无论字段怎么解释,都必须成立"的等式。
二、过程:先立等式,再让字段就位
第一步:四条恒等式
对这个容器的结构,AI 写下的是四条守恒式(描述为形状,具体取值不外泄):
| # | 恒等式的形状 | 直觉解释 |
|---|---|---|
| 1 | 文件尾 − 索引起点 == 索引大小 | 索引恰好贴到文件尾 |
| 2 | 各条目的压缩后大小之和== 数据区大小 | 数据区没有任何缝隙(7 个包实测 gaps = 0) |
| 3 | 最后一条的位置 + 大小 == 索引起点 | 最后一块恰好抵住索引 |
| 4 | 头部声明的索引位置 == 索引实际位置 | 头部不自相矛盾 |
注意顺序:写下这四条的时候,"条目"里每个字段的宽度都还没定。等式先于解析成立——它们约束的是结构,不是解释。
然后跑全部 7 个包:四条全部通过,7/7。从这一刻起,"我解对了"不再是一句话,而是一个算得上的结论:任何一条不成立,解析必错,且能被立刻指出来。
人应该加的检查:凡是"索引 + 数据"结构的格式,先写守恒式,再认字段。守恒式是最便宜的验收标准——它不需要知道任何字段的含义,就能告诉你解析有没有错。
第二步:字段一个一个就位
有了等式做底,索引条目才被逐个定下来:一条路径、一个"种子/标志"字段、一个位置、两份大小(原始大小与压缩后大小)。每个字段的宽度在这里不重要,重要的是——它们填进的每一格,都要让上面四条等式继续成立。
其中那个"种子/标志"字段的语义,是靠证伪定下来的,过程很典型:
- 假设 A:它是内容哈希。第一条证据支持——同一份内容出现在不同包里,这个值一模一样(确定性 ✓)。
- 但第二条证据反它:不同内容撞出相同值的比例,明显高于随机——哈希不该这么容易撞。
- 结论:它不是什么哈希,是一个文件级的随机种子——参与后面那层变换的密钥派生。
字段的含义不是猜出来的,是被判据挑出来的。
第三步:一层自定义变换 + 两种标准压缩
主体压缩用的是两种公开的通用压缩算法(按头部的一个标识字段分发);在此之下还有一层自定义的逐字节变换:由种子字段派生出两个游标,逐字节异或。
关键不是它的公式,是它的自证方式:
- 拿一个空文件——0 字节的原始数据,整条"变换 → 压缩"链的每一环都被走通;
- 再拿已知明文构造一组小向量——保证"明文进、可解出"这两个方向都有可重放的样板。
两个方向都钉死之后,才做全量:九万多个条目、100% 解码、0 失败——不是抽样,是全部。
三、判据与验证
这个案例留下的可迁移判据,四条:
1. 恒等式是验收标准,不是副产品。"看起来对"和"算得上"是两个世界:前者能过眼睛,后者能过硬约束。任何一次解析,都该问一句:有什么等式是它必须满足的?
2. 全量断言 > 抽样。"试了两百个都能解"和"九万多个全部 0 失败"不是一个量级的证据。有全量的分母,就别用抽样。
3. 双向向量:空输入 + 已知明文。空输入把"边界"钉住,已知明文把"语义"钉住。自证一个变换/解析器,两个方向都要有可重放的样板。
4. 字段语义用证伪来定,而不是用"像"来定。“这个字段像哈希"不是结论,是假设;找出"哈希会怎样、它又没有怎样”,才算把语义收口。
最后是诚实边界,写进结论而不是藏起来:还有几个更老的标识值并没有出现在这批包里,这一支没有深入;有一个标志位的含义仍未定论。全绿的清单之所以可信,一部分正因为它把"哪里还没绿"也一并写出来了。
四、结论
一个"全绿"的结果,可信度不在绿本身,而在绿的定义:
- 四条恒等式 7/7 全过(结构层自证);
- 空文件 + 已知明文双向样板(变换层自证);
- 九万多条目 100% 解码、0 失败(全量层自证);
- 未解的部分明明白白列着(边界层诚实)。
先找等式,再找字段——这条秩序是可以搬走的。它把"我以为我解开了"换成了"我算过我解开了",中间差的不是聪明,是一组在动手之前就愿意先写下来的约束。
五、边界声明
- 本文只讨论AI 自动化逆向中的判据设计与审核方法,不涉及任何具体产品、厂商或服务的分析结论。
- 文中所有地址、偏移、常量、字段名一律为占位符或示意值,
不代表任何真实目标中的取值;示例代码为说明判据而编写,不构成可运行的针对特定目标的工具。 - 文中提到的比例与数字均来自作者项目内的测量记录,仅用于说明方法失效的方式。
- 请勿将本文内容用于未授权的用途。
六、收尾
到这里,这个系列的第一段路走完了:从"它翻车"(第 1–2 篇),到"它做到了什么"(第 3 篇),到"人在哪"(第 4 篇),再到两份审核协议——空结果要有担保,全绿结果要有等式。
从下一篇起,主线转向失效模式:一个一个拆——每个都是一种 AI 特有的、安静的、格式漂亮的错误。第一个:它一旦找到一个好用的指标,就会开始崇拜它。
下一篇计划聊:AI 一旦找到单一指标就会崇拜它。
转载请注明出处:
https://lizhiyong.blog.csdn.net/article/details/167921348