AI 自动化逆向(二十八)先量保护面,再决定要不要脱壳

本文提出在AI自动化逆向中,面对受保护代码区域时应优先量化“保护面”而非直接脱壳。核心方法是三步归并法:定位保护区域、统计明文到保护区的转移点(区分入口/体内)、按函数归并得出真实保护比例(如3%而非体积误估的26%)。强调保护面是算术问题,需区分“包围”与“解开”,并结合工具自述日志、入口点位置等多维证据验证局部保护形态,避免全局误判。

AI 自动化逆向(二十八)先量保护面,再决定要不要脱壳

本文是「AI 自动化逆向」系列第 28 篇。上一篇:一个地图格式族的三角关系;下一篇预告:受保护区间的真实形状是「夹层」。

前言

数据讲完了,从这一篇走向代码。第一问是最实际的那种:

目标里有一块"被保护起来、读不出来"的区域。要不要硬啃它?

AI 在这类问题上的反应很一致——把"保护"当成一个全局障碍:读不出来就是"整体不可分析",然后要么绕开一切、要么直奔"脱壳"这条最重的路。

正确的第一动作只有一个:先量。

(同前几篇:文中"AI"指执行分析的模型,"我"指设定目标、审结果的人;内容均已脱敏。)

一、AI 在这里踩的坑:三种错法,一个根源

围绕"保护面",项目里栽过三种错法。

错法一:拿"保护区的体积"当"保护范围"

最早有一版计算:保护区约 0.9MB,明文代码约 2.6MB——“保护区只占两者之和的 26% 左右,所以74% 的代码都是明文的,壳不是障碍!”

听起来合理极了。方法本身是错的:那块保护区里绝大部分是保护器自己的"解释器"和派发网——是保护者自己的机器,不是"被保护的原始代码"。

把"转移"归并到函数上重数,真实数字是:代码段的 3% 量级——和 26% 的估计差了八倍多。

节区大小 ≠ 保护范围。 范围是"哪些代码被弄进了保护区",必须按函数归并着数,不能拿一块内存的体积顶替。

错法二:把"读不出来"升级成"整体不可分析"

工具在保护区里的自白(“控制流跟到了不存在的地址”“无法读取字节”)被读成了"这个目标整体不可静态分析"——于是整条路线都按"黑箱"来规划。这是第 1 篇陷阱 3 的完整现场:工具读不出来是工具层面的正常反应,不是给你下"全局判决"。

错法三:把"包围"说成"解决了"

"不需要脱壳"这句话在这个项目里出现过很多次。它的真实身份是:

一个包围决策(containment)——知道边界在哪、决定不进去、用别的路绕。

而不是 “解开了(solved)”。两者混为一谈的后果很具体:后来的会话不再回头看它——整个区域被一句话冻结,谁也不知道它到底是"已知的墙"还是"没人看的门"。

二、过程:把"保护面"量成一道算术题

怎么量:三步归并法

  1. 定位范围:哪一段是被保护的区域;
  2. 数转移:从明文代码区跳进保护区的转移有多少处、落在哪里——特别要分成两类数:落在函数入口的、落在函数体内的(这一步直接定性"换头式"还是"分支级");
  3. 归并到函数:把转移按函数合并——被触及的函数有几个、占全部函数的多少、占代码字节的多少。只有这一步的输出才叫"保护面"。

量出什么(形状)

  • 转移:一千六百多处,落在一千四百多个不同的入口上;
  • 其中落在函数入口的只有 3% 出头——分支级为绝对主流:绝大多数被触及的函数,只是体内被零星换桩,不是整个函数被搬走;
  • 被触及函数:一百来个——占全部函数(一万七千多个)的不到 1%,占代码段的 3% 量级。

于是决策自己浮出来了:为 3% 走"脱壳"这条最重的路,不划算。 能读的照读;被护住的那一小块,用别的证据绕——咬合验证、动态闭环(第 20 篇那套)。

顺带量的"形态":为什么敢说"它不是整文件加壳"

两条独立检查也给了一致的方向:

  • 入口点不在保护区内(整文件级保护器通常会把入口重定向进自己的域——这里没有);
  • 没有装"开机就想跑"的守护回调(同类保护的惯用伎俩,这里也没有)。

保护是局部的——这和"3% 量级"互相印证,两路独立证据同向。

还有一条"工具级证据"值得抄

"静态提升在保护区里走不通"的最硬证据不是熵统计,是工具自己的自白:反编译器在保护区内追控制流、追到不存在的地址,把失败原样写进了日志。

工具的自述日志,比统计数字更直接。 熵值高只说明"像压缩/加密",反编译器失败说明的是"控制流本身是假的"——后者才是那一块的定性。

三、判据与验证:四条

1. 先用比例说话。 被保护字节 / 代码段字节 这个比值必须先算出来——它决定路线:3% 和 30% 是两种项目,30% 和 90% 又是两种。

2. 量范围按函数归并,不拿体积顶替。 也不许反向偷懒:“没数过"不等于"没有”(第 5 篇的老账)。

3. "包围"和"解开"分开命名。 包围决策要显式写成"已知边界 + 决定不进入 + 内容未解",并标注"这里仍然没解"。省掉最后半句,它就会腐化成"已解决"。

4. 边界双向诚实。 已证的(范围、形态、总量)和未证的(内容:指令集、处理表、运行上下文;哪些是"变形"、哪些是"虚拟化")——分开列。“已证范围"不许冒名"已解内容”。

四、结论

保护面是一道算术题,不是一道情绪题。

而"包围"既不是耻辱,也不是胜利——它是一个有账的决策:知道边界在哪、知道里面没解、知道什么条件下值得回头。量错了比例(26% 对 3%),算出来的就是另一条路线。

先量,再决定;量的是比例,决定的是路线。

五、边界声明

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

六、收尾

比例量完了,但那块区域本身还只被当作"边界"。下一篇往里看一步——那道边界里面长什么样:它既不是整齐的"代码或数据",也不是不可穿透的黑箱,它的真实形状是一个很有画面感的结构:夹层。

下一篇计划聊:受保护区间的真实形状是「夹层」。


在这里插入图片描述
转载请注明出处:
https://lizhiyong.blog.csdn.net/article/details/169268773

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值