第15章 对抗反汇编
所谓对抗反汇编技术,就是程序中使用一些特殊构造的代码或数据,让反汇编分析工具产
生不正确的程序代码列表。这种技术由恶意代码编写者手工构造,在恶意代码编译和部署
阶段使用一个单独的混淆工具,或是直接在源码中插入混淆代码。
所有恶意代码的设计都有特殊目的:键击记录,后门访问,使用目标系统发送大量电子邮
件让服务器瘫痪,等等。
恶意代码编写者会使用对抗反汇编技术来延缓分析人员分析恶意代码。
除了延缓或者阻止人工分析之外,对抗反汇编也能在一定程度上阻碍特定的自动化分析技
术。许多恶意代码相似性检测算法和启发式反病毒引擎都采用反汇编分析技术对恶意代码
进行检测或者归类。使用个别程序指令的任何手动或自动反汇编过程。
1.何谓对抗反汇编技术 反汇编并不是一个简单的问题,可执行代码的序列可以有多种反汇
编代码的表达,有写可能无效,它的目的仅仅是掩盖程序的真实意图。实现对抗反汇编时,
恶意代码编写者会创建一段代码序列,欺骗反汇编器,让反汇编器展示与真正执行的代码
不同的指令列表。
对抗反汇编技术是利用反汇编器错误假设与局限性来实现的。例如,反汇编器在某个时
刻只能将程序的每一个字节作为指令的组成部分。
2.挫败反汇编算法。 对抗反汇编技术是基于反汇编算法的天生漏洞产生的。为了清晰地显
示反汇编代码,反汇编器在事前都会做某种特定的假设。一旦这种假设不成立,恶意代码
作者就有机会欺骗分析人员。
反汇编算法可以有俩种:线性反汇编算法和面向代码流的反汇编算法。其中线性反汇编
算法容易实现,但也易出错。
<1>线性反汇编 线性反汇编策略是遍历一个代码段,一次一条指令的线性反汇编,从不
偏离,反汇编器使用的这个基本策略已经被反汇编写作教程采用,并且被调试器广泛使
用。线性反汇编用已经反汇编的指令大小来决定下一个要反汇编的字节。
&l