10.4.2 动态混淆
2025年09月21日
10.4.2 动态混淆
1.预防性混淆
这种混淆通常是针对一些专用的反编译器而设计的,一般来说,这些技术利用反编译器的弱点或者漏洞来设计混淆方案。例如,有些反编译器对于Return后面的指令不进行反编译,而有些混淆方案恰恰将代码放在Return语句后面。这种混淆的有效性对于不同反编译器的作用也是不相同的。
一个好的混淆工具,通常会综合使用这些混淆技术。符号混淆主要应用于迷惑解读程序的攻击者,同时在抵抗反编译工具领域也起到一定作用。数据混淆目前主要针对的是对布尔变量的替换。控制混淆是应用比较广泛的一种混淆技术,主要是通过增加程序的复杂度来增强程序的抗攻击能力。预防混淆是针对不同的反编译软件而设计的。
2.自修改代码技术
自修改代码技术是程序运行期间修改或产生代码的一种机制,其主要利用了冯·诺依曼体系结构的存储程序的特点,即指令和数据存储在同一个内存空间中,因此指令可以被视作数据被其他指令读取和修改。程序在运行时向代码段中写数据,并且写入的数据被作为指令执行,达到自我修改的效果。自修改保护机制可以有效抵御静态逆向分析,而且由于代码仅在需要时才以明文的形式出现,可以在一定程度上阻碍逆向工具获取程序所有的明文代码,从而抵抗动态分析。
3.虚拟机保护技术
虚拟机保护其实也属于自修改代码的一种,但是由于其保护强度高,逐渐成为研究的热点,从而自成体系。虚拟机保护与传统自修改代码技术的最主要区别是虚拟机增加了一层自定义的指令集,而且其难以逆向,破解者想要获得程序源码,首先必须弄懂虚拟机的指令集,这极大地增加了逆向的开销。虚拟机保护技术通过增加复杂度和在时间和空间上的开销,获取了更高的保护强度。