AI 自动化逆向三十五假设空间枚举的完备性是假设出来的本文是「AI 自动化逆向」系列第 35 篇。上一篇自建指令缓存把分钟级查询压到秒级下一篇预告先找不加密的部分。前言从这一篇起进入整卷最敏感的一段——协议与密码。处理方法照旧只讲思路一个字段、一个常量都不给。这一篇讲一个特别自信的方法是怎么翻车的手上有一条完整样本一段明文、一段对应的密文把常见变体全部排列组合枚举一遍谁能让加密明文 密文谁就是答案。这个思路看似科学——直到你意识到它有一个从不被写在纸上的前提。同前几篇文中AI指执行分析的模型我指设定目标、审结果的人本篇只讲方法与自证思路不给任何具体参数。一、AI 在这里踩的坑“两万多种全灭”枚举的真实规模是这样的轮数档位 × 用加密子还是解密子 × 字节序 × 两个半块是否互换 × 半步更新的细节 ×链接模式若干种 × 明文在信封里的偏移逐格扫——乘出来大约两万两千种配置。验收判据也很严格“与明文重叠的全部块都要对——只对一块算巧合。”结果零个配置成立。全灭。然后 AI 写下了一句看起来很扎实的推论“两万两千种组合全部失败 ⇒这个二进制里的密码核不是那个标准家族。”这句推论是错的。错的地方不在算术在于枚举再大也只是我列出的那张变体表里的大。而那张表是我按标准实现的常见形态假设出来的——枚举的完备性建立在假设之上。表漏掉的形态枚举一亿种也不会覆盖。二、过程两处根子都在表上根子一链接层漏了一整类形态真相是后来把那段函数从头读完才拿到的——而它是这样的核本身就是标准家族的标准实现——没有任何异常问题在链接层它用了两个互相独立的反馈量——一个来自密文侧、一个来自明文侧两个寄存器各司其职而枚举里所有链接模式的选项都是围绕单一反馈量设计的。于是任意单一反馈的假设必然全灭——不是差一点是结构性够不着。标准核 自定义链接是一种完全合理的组合而枚举假设空间的时候人们默认链接也该是标准的。全灭的第一解释对象应该是表不是目标。这是第 7 篇先怀疑模型、别怀疑阈值的协议层版本把被怀疑的一端选对。根子二那条样本的配对本身没被证明更早一层还有一处松土被拿来拟合的那条明文-密文对是怎么配上的——按尺寸自洽反推的只有那一条满足长度关系。尺寸自洽只证明了它们长度上兼容没有证明它们真的是同一帧的两面缓冲区里甚至看到过两帧指向同一地址的征兆。教训一句话拟合的输入如果本身是猜的配对那么无论拟合多全都在拟合噪声。三、正确的姿势三件事后来的一次性破局用的正是下面三件事——它们组合成了一条不用枚举的路。1. 在输入侧取对——配对由构造保证不用证。不去猜缓冲区的哪个是明文、哪个是密文而是在编码器的入口取一对“这串明文进去、那串密文出来”是同一次调用保证的。配对问题被构造性地消灭了。2. 让程序自证——终点判据是重算 截获。模型建好后把明文重新加密一遍与线上截获的密文逐字节比对全等才算成立。再叠加几条互相独立的旁证同时成立长度关系、偏移、尾巴、逐字节——一个巧合不可能同时满足四路。多路独立同向才敢宣布。3. 枚举之前先读代码。这次的两万两千种全灭最后是把函数读完一次破的——枚举是穷举我的想象读代码是看它的现实。从这一战提炼出的四条判据1. 枚举之前先给变体表标上这是假设。全灭的第一解释对象是表的完备性不是目标的反常。2. 标准家族 ≠ 标准组合。核可以是标准实现链接/信封层可以是自定义的——两类因素分开枚举、分开怀疑否则全家桶一起排会让某一层的缺失污染整张表。3. 拟合的输入要构造性配对。在输入侧取对同一次调用产生的明文进、密文出永远不要按尺寸猜配对。4. 终点是重算 截获外加边界诚实。逐字节相等 多条独立信号同向样本是简化情形的部分真实条件下不可观测的项、以及另一半链条是否成立未测就写未测——那是部分证明的标准写法。四、结论一句话收束这一篇全部的内容枚举的边界不是计算机的时间是写枚举的人想象力的边界——而那张想象力的表常常被误当成世界的表。两万多种全灭听起来像一座丰碑其实它只是假设空间的边界被画在了哪里。而越过边界的方法从来不是枚举得更狠是换一个认识论别试了去读。五、边界声明本文只讨论AI 自动化逆向中的判据设计与审核方法不涉及任何具体产品、厂商或服务的分析结论。文中所有地址、偏移、常量、字段名一律为占位符或示意值不代表任何真实目标中的取值示例代码为说明判据而编写不构成可运行的针对特定目标的工具。文中提到的比例与数字均来自作者项目内的测量记录仅用于说明方法失效的方式。请勿将本文内容用于未授权的用途。六、收尾还剩最后一条也是最便宜的一条方法——它把所有昂贵的难题都先推到一边先找不加密的部分。同一套协议栈里未必每一段都设防先把明文段的红利吃干再谈剩下的。下一篇计划聊先找不加密的部分。转载请注明出处https://lizhiyong.blog.csdn.net/article/details/169268951