WEB开发网
开发学院网络安全安全技术 恶意软件反检测技术简介(上) 阅读

恶意软件反检测技术简介(上)

 2008-10-14 13:28:12 来源:WEB开发网   
核心提示: 五、模拟器超限技术所谓模拟器超限技术,是指执行一组将导致仿真器崩溃或可以表明仿真器正在运行的指令,恶意软件反检测技术简介(上)(5),调用仿真器不支持的未公开指令就是一种导致仿真器掷出异常并停止运行的方法,W95/Vulcano就是这样一个例子,以便能够更有效地对恶意软件进行动态检测和分析

五、模拟器超限技术

所谓模拟器超限技术,是指执行一组将导致仿真器崩溃或可以表明仿真器正在运行的指令。调用仿真器不支持的未公开指令就是一种导致仿真器掷出异常并停止运行的方法。W95/Vulcano就是这样一个例子,它使用了非正式的CPU指令SALC。用来检测仿真或导致正在运行的仿真器崩溃(如果有的话)的另一种方法是,尝试一次访问大量内存,大到什么程度呢?如果机器上安装了2G内存,那么你就一次访问1G以上的内存。这通常是不能有效执行的,因为大多数的操作系统,以及仿真器,将阻止程序的这种行为。

检测是否正在运行仿真器的一种方法是,将每次调用都返回不同的值的函数调用两次,例如,我们可以对任何时间函数调用两次,然后检查两个返回值之差的大小。在Windows系统下,我们可以通过kernel32!QueryPerformanceCounter(包装有ZwQueryPerformaceCounter),kernel32!GetTickCounter达到上述目的;或通过RDTSC(读时间戳计数器)指令查询自从机器启动以来目前已经执行的机器周期数也能达到目的。下面是一个例子:

push offset handler
push dword ptr fs:[0]
mov fs:[0],esp
rdtsc
push eax
xor eax, eax
div eax ;trigger exception
rdtsc
sub eax, [esp] ;ticks delta
add esp, 4
pop fs:[0]
add esp, 4
cmp eax, 10000h ;threshold
jb @not_debugged
@debugged:
...
@not_debugged:
...
handler:
mov ecx, [esp+0Ch]
add dword ptr [ecx+0B8h], 2 ;skip div
xor eax, eax
ret

上例向我们展示了如何利用RDTSC指令来检测是否存在调试器。如果存在的话,RDTSC被调用两次后返回的值会有变化。然后用这个差异跟一个阈值(在本例中它是10000h)进行比较。如果差异较大,那么就表明存在调试器,所以它会执行一个跳离恶意代码的jump指令。

虽然导入各种迷惑性的程序库不能导致仿真器停止运行,但是如果不导入这些库,恶意软件本身代码就无法运行。

恶意软件还可以寻找网页,看看它是否可以使用互联网。这样会导致当病毒的代码所在机器当前没有连接到互联网的时候,它就不执行;另外,当仿真器运行时病毒的代码也会停止运行,因为大多数仿真器不允许访问互联网。

使用协处理器浮点运算单元(FPU)指令是另一种过分扩展仿真器的方法,因为大部分仿真器都不会仿真FPU指令。Prizzy polymorphic engine (PPE)能够产生43条不同的协处理器指令供其多态解密器使用。如果不提供这些FPU指令的话,就无法对Prizzy进行解密。

同理,恶意软件也可以使用MMX指令。这个指令集为X86架构新增了了8个寄存器。恶意软件可以通过CPUID指令检查是否支持MMX。使用这种技术恶意软件的例子是W32/Legacy和W32/Thorin。

恶意软件还可以设置一个异常处理程序,执行一些无用的代码块,然后间接执行自己的处理程序,以将控制权传送到多态解密器的另一部分。这一诡计之所以得逞,是因为仿真器不能处理异常。3.7部分给出了类似于这种技术的例子。

六、小结

本文中,我们介绍了恶意软件用以阻碍对其进行逆向工程的若干技术,并着重讲解了当前恶意软件常用的反仿真技术。我们应该很好的理解这些技术,以便能够更有效地对恶意软件进行动态检测和分析。在下篇中,我们会为读者介绍恶意软件常用来的反调试技术。

上一页  1 2 3 4 5 

Tags:恶意 软件 检测技术

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接