AI 自动化逆向(九)AI 会记住错的公共常量
本文是「AI 自动化逆向」系列第 9 篇。上一篇:AI 写的代码会安静地吞掉 AI 的错误;下一篇预告:AI 会编错自己数据结构的字段名。
前言
上一篇讲的是代码把错误接住。这一篇讲另一种"不报错",更根子一点:
不是代码错了,是知识本身是错的 ------它记住的公共常量,记反了。而且错得毫无动静:查询照常成功,输出完整、格式正确,只是安静地给你另一个名字。
(同前几篇:文中"AI"指执行分析的模型,"我"指设定目标、审结果的人;内容均已脱敏。)
一、AI 在这里踩的坑:写反的两行
AI 写了一个内存枚举脚本,里面有一张小小的对照表------把几个系统 API 返回的数字翻译成人话。它是这么写的:
python
TYPE = {0x1000000: "IMAGE", 0x20000: "MAPPED", 0x40000: "PRIVATE"}
而正确的写法是:MAPPED 是 0x40000,PRIVATE 是 0x20000。 它把这一对的值写反了。
后果:13 个"私有可执行"内存区域,全部被报成了"文件映射";它据此写下结论------"13/13 全是映射"。错的。
这个错误为什么可怕?三件事叠在一起:
- 那个查询 API 永远成功。 常量写错不会有任何提示、任何异常------它只会给你一个错误但完整、格式正确的答案。
- 两个值都"长得对"。 它们都是干净的整数常量,谁先谁后从肉眼上看不出任何破绽------仔细看没用,不是"仔细"能防的错。
- 数字 13 和格式都对。 13 个区域一条不多、一条不少,表格齐全------你在输出里找不到任何可疑处。
人应该加的检查 :涉及公共常量时,"用两个独立来源各测一遍并比对名称"不是冗余,是唯一防线。错值自己不会喊疼,得让它撞上第二个来源。
二、过程:两种错法,只有一种会喊
这个坑有两种形态,危险程度完全不同。
形态一:值记反(安静的那种)
就是上面那次。发现它靠的是一次"重复劳动":换上第二份独立写法的脚本 (常量写法不同、代码独立)重扫同一批地址 ------它立刻报出 PRIVATE。两条输出一对照,错在哪、错成什么样,一目了然。
注意:发现它的方式不是"再读一遍第一个脚本"。 这没有用------AI"知道"的就是那个反的值,重读的时候依然会认它。同一个来源读不出同一个来源的错;换来源才行。
形态二:位置记错(会喊的那种)
同族的另一个错误:把某个 API 记到了错误的模块 里("这个函数应该在 A 库"------其实在 B 库)。这一种运气好一点:往错的模块里去找,常常直接抛一个"没有这个函数"的异常------响的错,容易抓。
所以这条经验反过来用更值钱:能把错误喊出来的形态不用怕,要专门提防的是"值错"这种安静的形态。 你的防线安排,应该向"安静的那种"倾斜。
顺带:这个错误教会的另一件事
那批内存里有一类没有来源文件 ------想回答"它由哪个文件映射而来",答案只能来自类型字段 ,不能靠去查文件名(文件名查询会返回空)。这提醒我们:外部世界的某个问题,可能只有一个合法的取证途径------一旦那个途径用错了常量,整批结论就是错的,而且错得没有替代途径可纠正。
三、判据与验证:三条
1. 公共常量不靠"记",靠"两个来源互测"。 一条防线做到两件事:换一份独立写法,重跑同一批输入,比对输出而不只是比对数字。两处一致才通过。
2. 对照要比"名字",不只比"数值"。 数值相同而含义错位的错误(比如两个常量互换),只有"名字"层面能暴露------让两份来源各自给同一批输入"命名",名字不一致,就是警报。
3. 把 AI 的记忆当成"未验证的上游"。 常量、枚举名、字段语义、默认值......凡是"从模型记忆里搬进代码的外部知识",都要按"上游资料"对待:引用它之前,先对一次表。(这条会在下一篇里以另一种形式再出现一次。)
四、结论
一句话:常量写错不会报错,只会安静地给你另一个名字。
这一篇和上一篇合起来,讲到的是同一件事的两面:错误的来源可以是代码(上篇),也可以是知识(本篇)。而两者都有同一个伪装------输出看起来很正常。
对"用 AI 干活的人",这里有一条格外省力的经验:AI 的知识大体可靠,但它从不自检自己的记忆。 所以流程里那句话要立起来:记忆负责起草,来源负责定稿。
五、边界声明
- 本文只讨论AI 自动化逆向中的判据设计与审核方法,不涉及任何具体产品、厂商或服务的分析结论。
- 文中所有地址、偏移、常量、字段名一律为占位符或示意值 ,
不代表任何真实目标中的取值;示例代码为说明判据而编写,不构成可运行的针对特定目标的工具。 - 文中提到的比例与数字均来自作者项目内的测量记录,仅用于说明方法失效的方式。
- 请勿将本文内容用于未授权的用途。
六、收尾
公共常量的错,至少还能靠"两个来源"对出来。下一篇讲一个更贴身、也更狼狈的同类:它给自己刚造的数据结构,编错了字段名------读取永远返回空,而整批输出"空得整整齐齐"。
下一篇计划聊:AI 会编错自己数据结构的字段名。

转载请注明出处: