AI 自动化逆向(二十九)受保护区间的真实形状是「夹层」
本文是「AI 自动化逆向」系列第 29 篇。上一篇:先量保护面,再决定要不要脱壳;下一篇预告:片段级恢复:单位是片段,不是函数。
前言
上一篇量完了边界------被保护的部分大约占代码段的 3%。这一篇往里看一眼:
那道边界里面,究竟长什么样?
答案是这一篇要讲的唯一一件事:它不是黑箱,也不是"代码或数据"的二选一。它有一个具体、可描述、可以拿来干活的结构------一个很有画面感的词:
夹层。
(同前几篇:文中"AI"指执行分析的模型,"我"指设定目标、审结果的人;内容均已脱敏。)
一、AI 在这里踩的坑:两个坏心智模型
面对"读不出来的区域",AI 用过两个坏模型,都不对,而且错在同一处。
坏模型一:黑箱化
"读不出来"被升级成"里面不可知"------于是要么绕着走,要么放弃。这是上一篇讲过的错法二。真实情况是:区域里的东西是可以被看的,只是不能像看普通代码那样顺着看。
坏模型二:齐次化
"一个区间要么是代码、要么是数据"------于是用一个函数级 的比例去给它贴标签。这是第 2 篇那条判据链连翻五次的根源。真实情况是:区间内部是"分层的混合"------两种东西同时住在一段字节里。
两个模型错在同一处:把"混合"当成"整体"。 一个说整段是谜,一个说整段是一个物种;真相是整段是夹心。
二、过程:看清夹层
形状本身
把这类区间拆开看,长这样(文字示意):
[ 桩 ][ 壳字节流 ][ 幸存的原始指令 ][ 桩 ][ 壳字节流 ][ 幸存的原始指令 ] ...
机制并不复杂:原指令被逐条"换桩" ------每条(或每几条)原始指令被一个"跳进保护区"的桩替换;但原始字节留在原地 。于是还活着的真指令,就这样夹在桩与桩之间,被字节流隔断。
它直接解释了一个曾经很费解的现象:为什么从区间开头向后线性解码,一定翻车。 因为解码是一列火车,从起点顺着轨道开;只要轨道的任何一段被拆掉,火车后面的每一站都错位 。而这里的轨道是每隔几根枕木就断一次。
"解不出来"是解码器行进方式的问题,不是内容的属性。 换一种走法(不从区间开头走,而是"逐偏移扫描"),路就通了。
三个观测:这个形状是怎么被看见的
观测一:反比。 给全部可疑区间算"线性解码率"的时候出现了一个刺眼的反比------解码率最低的那个区间,反而藏着最多的真代码片段 (二十多块片段,其中十七块带证据------比大部分"正常"区间还多)。"解码率与含真代码量完全不成正比"(第 7 篇记下的怪象),到这里看见了结构原因:越是被桩替换得彻底的区间,线性解码越是寸步难行,而幸存字节偏偏还在原地。
观测二:链条。 解码率最低的那个区间里,捞出了一条完整的比较链------逐项比较、跳转串联、语义完全自洽,"自洽到不可能不是代码"。(就是第 2 篇的那条反例。)
观测三:零交集。 把全部可疑区间都跑一遍片段恢复:"一个片段都捞不出来"的区间:零个。 ------混合不是特例,是普遍形态。
怎么读它:两层读法
有了形状,读法也跟着分成两层:
- 桩层 (执行路径层):从函数入口往下看,找"跳进保护区"的转移------它告诉你哪些分支被护住了;
- 幸存层 (残留结构层):逐偏移 尝试解码,保留"以返回/间接跳转结尾、且不含跳进保护区的转移"的连续段------它告诉你体内还留着什么真东西。
两层的产出分开记、对起来用:桩负责交代"被动了哪里",片段负责交代"还剩下什么"。
三、判据与验证:四条
1. 保护区不是黑箱------它有形状。 形状不用猜:把区间打开,两种东西都看得见;看不见,是读法不对。
2. "解不出来"先问解码器的行进方式。 线性失步是方式问题:换"逐偏移 + 结构闭合"就能捞(第 30 篇展开)。
3. 混合是常态。 看到低解码率,先想夹层------不是"纯数据",也不是"全没了",而是"部分幸存"。
4. 单位跟着形状走。 结构是片段级的,读数就用片段级;桩层与幸存层的证据分开记录,别合成一个布尔(第 12 篇的老账)。
四、结论
一句话:受保护区间不是一堵墙,是一层夹心。
墙让你绕;夹心让你挑着吃 。弄清楚形状的价值,是把"能不能读"这个问题从态度问题 ("放弃吧/硬啃吧")变成了结构问题("桩在哪、幸存段在哪、单位是什么")------而结构问题,是可以有答案的。
五、边界声明
- 本文只讨论AI 自动化逆向中的判据设计与审核方法,不涉及任何具体产品、厂商或服务的分析结论。
- 文中所有地址、偏移、常量、字段名一律为占位符或示意值 ,
不代表任何真实目标中的取值;示例代码为说明判据而编写,不构成可运行的针对特定目标的工具。 - 文中提到的比例与数字均来自作者项目内的测量记录,仅用于说明方法失效的方式。
- 请勿将本文内容用于未授权的用途。
六、收尾
形状看清了,下一步是把它变成工具 :一种"单位是片段、不是函数"的恢复方法------以及它自带的一条很有意思的性质:对某类区域,它天然返回空------而那恰好是它能立足的地方。
下一篇计划聊:片段级恢复:单位是片段,不是函数。

转载请注明出处: