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

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

 2008-10-14 13:28:07 来源:WEB开发网   
核心提示: push 0push 0push 11h ;ThreadHideFromDebuggerpush -2call NtSetInformationThread在本例中,首先将NtSetInformationThread的参数压入堆栈,恶意软件反检测技术简介(下)(7),然后调用该函数来把程序

push 0
push 0
push 11h ;ThreadHideFromDebugger
push -2
call NtSetInformationThread

在本例中,首先将NtSetInformationThread的参数压入堆栈,然后调用该函数来把程序的线程从调试器中去掉。这是因为这里的0用于线程的信息长度和线程信息,传递的-2用于线程句柄,传递的11h用于线程信息类别,这里的值表示ThreadHideFromDebugger。

10.解密

解密可以通过各种防止调试的方式来进行。有的解密依赖于特定的执行路径。如果这个执行路径没被沿用,比如由于在程序中的某个地方启动了一个调试器,那么解密算法使用的值就会出错,因此程序就无法正确进行自身的解密。HDSpoof使用的就是这种技术。

一些病毒使用堆栈来解密它们的代码,如果在这种病毒上使用调试器,就会引起解密失败,因为在调试的时候堆栈为INT 1所用。使用这种技术的一个例子是W95/SK病毒,它在堆栈中解密和构建其代码;另一个例子是Cascade病毒,它将堆栈指针寄存器作为一个解密密钥使用。代码如下所示:

lea  si, Start  ; position to decrypt
mov  sp, 0682 ; length of encrypted body
Decrypt:
xor  [si], si  ; decryption key/counter 1
xor  [si], sp ; decryption key/counter 2
inc  si  ; increment one counter
dec  sp  ; decrement the other
jnz  Decrypt  ; loop until all bytes are decrypted
Start:      ; Virus body

对于Cascade病毒如何使用堆栈指针来解密病毒体,上面代码中的注释已经做了很好的说明。相反,Cryptor病毒将其密钥存储在键盘缓冲区中,这些密钥会被调试器破坏。Tequila使用解密器的代码作为解密钥,因此如果解密器被调试器修改后,那么该病毒就无法解密了。下面是Tequila用于解密的代码:

上一页  2 3 4 5 6 7 8  下一页

Tags:恶意 软件 检测技术

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