AI 自动化逆向(九)AI 会记住错的公共常量

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 全是映射"。错的。

这个错误为什么可怕?三件事叠在一起:

  1. 那个查询 API 永远成功。 常量写错不会有任何提示、任何异常------它只会给你一个错误但完整、格式正确的答案。
  2. 两个值都"长得对"。 它们都是干净的整数常量,谁先谁后从肉眼上看不出任何破绽------仔细看没用,不是"仔细"能防的错。
  3. 数字 13 和格式都对。 13 个区域一条不多、一条不少,表格齐全------你在输出里找不到任何可疑处。

人应该加的检查 :涉及公共常量时,"用两个独立来源各测一遍并比对名称"不是冗余,是唯一防线。错值自己不会喊疼,得让它撞上第二个来源。

二、过程:两种错法,只有一种会喊

这个坑有两种形态,危险程度完全不同。

形态一:值记反(安静的那种)

就是上面那次。发现它靠的是一次"重复劳动":换上第二份独立写法的脚本 (常量写法不同、代码独立)重扫同一批地址 ------它立刻报出 PRIVATE。两条输出一对照,错在哪、错成什么样,一目了然。

注意:发现它的方式不是"再读一遍第一个脚本"。 这没有用------AI"知道"的就是那个反的值,重读的时候依然会认它。同一个来源读不出同一个来源的错;换来源才行。

形态二:位置记错(会喊的那种)

同族的另一个错误:把某个 API 记到了错误的模块 里("这个函数应该在 A 库"------其实在 B 库)。这一种运气好一点:往错的模块里去找,常常直接抛一个"没有这个函数"的异常------响的错,容易抓。

所以这条经验反过来用更值钱:能把错误喊出来的形态不用怕,要专门提防的是"值错"这种安静的形态。 你的防线安排,应该向"安静的那种"倾斜。

顺带:这个错误教会的另一件事

那批内存里有一类没有来源文件 ------想回答"它由哪个文件映射而来",答案只能来自类型字段 ,不能靠去查文件名(文件名查询会返回空)。这提醒我们:外部世界的某个问题,可能只有一个合法的取证途径------一旦那个途径用错了常量,整批结论就是错的,而且错得没有替代途径可纠正。

三、判据与验证:三条

1. 公共常量不靠"记",靠"两个来源互测"。 一条防线做到两件事:换一份独立写法,重跑同一批输入,比对输出而不只是比对数字。两处一致才通过。

2. 对照要比"名字",不只比"数值"。 数值相同而含义错位的错误(比如两个常量互换),只有"名字"层面能暴露------让两份来源各自给同一批输入"命名",名字不一致,就是警报。

3. 把 AI 的记忆当成"未验证的上游"。 常量、枚举名、字段语义、默认值......凡是"从模型记忆里搬进代码的外部知识",都要按"上游资料"对待:引用它之前,先对一次表。(这条会在下一篇里以另一种形式再出现一次。)

四、结论

一句话:常量写错不会报错,只会安静地给你另一个名字。

这一篇和上一篇合起来,讲到的是同一件事的两面:错误的来源可以是代码(上篇),也可以是知识(本篇)。而两者都有同一个伪装------输出看起来很正常。

对"用 AI 干活的人",这里有一条格外省力的经验:AI 的知识大体可靠,但它从不自检自己的记忆。 所以流程里那句话要立起来:记忆负责起草,来源负责定稿。

五、边界声明

  • 本文只讨论AI 自动化逆向中的判据设计与审核方法,不涉及任何具体产品、厂商或服务的分析结论。
  • 文中所有地址、偏移、常量、字段名一律为占位符或示意值 ,
    不代表任何真实目标中的取值;示例代码为说明判据而编写,不构成可运行的针对特定目标的工具。
  • 文中提到的比例与数字均来自作者项目内的测量记录,仅用于说明方法失效的方式。
  • 请勿将本文内容用于未授权的用途。

六、收尾

公共常量的错,至少还能靠"两个来源"对出来。下一篇讲一个更贴身、也更狼狈的同类:它给自己刚造的数据结构,编错了字段名------读取永远返回空,而整批输出"空得整整齐齐"。

下一篇计划聊:AI 会编错自己数据结构的字段名。


转载请注明出处:

https://lizhiyong.blog.csdn.net/article/details/168773669

相关推荐
量化分析码农39 分钟前
股票API 日线、周线、月线与分钟级返回结构差异:一份统一解析代码
人工智能
这个DBA有点耶40 分钟前
MCP隔离层+行级语义审计+输出校验:AI访问数据库的安全边界拆解
数据库·人工智能·ai编程
IT_陈寒1 小时前
Vue的watch把我坑惨了,原来要这样用才靠谱
前端·人工智能·后端
`流年づ1 小时前
策略梯度(Policy Gradient)
人工智能
疯华整猫1 小时前
删掉 LeakCanary 那天,我用 Trae 自己撸了一套:最难的不是分析堆,是决定什么时候 dump
android·人工智能·性能优化
慢慢来不要急1 小时前
Anthropic 弃用 Git 自建源码控制系统 · 11-11
人工智能·开发工具
用户别睡觉2 小时前
有时候放弃也是一种收获
人工智能·github
东姬AI2 小时前
文心5.5 Flash今日发布:内容管线连配音都自动化了,最后卡住的为什么是「会表演」?
百度·大模型·数字人·ai视频·moe·文心5.5·联合生成
shengjk12 小时前
从一条 Bash 命令看懂 LLM Agent:为什么大模型会执行命令?
人工智能
Yuzhiyuxia3 小时前
【AI Agent面试系列】AI Agent可观测、评测、安全相关的知识点
人工智能·安全·面试