恶意软件反检测技术介绍
les ax,[bp+2]
cs mov w[09a0],ax ;masm mod. needed
cs mov w[09a2],es ;masm mod. needed
cs mov b[0a],1
pop es
pop ax
and w[bp+6],0feff
pop bp
iret
一样平常情况下,当没有安装调试器的时间,钩子例程被设置为IRET。V2Px利用钩子来解密带有INT 1和INT 3的病毒体。在代码运行期间,会不停地用到INT 1和INT 3向量,有关盘算是经过停止向量表来完成的。
一些病毒还会清空调试存放器(DRn的内容。有两种方法达此目的,一是利用系统挪用NtGetContextThread和NtSetContextThread。而是引起一个异常,修改线程上下文,然后用新的上下文恢复正常运行,如下所示:
push offset handler
push dword ptr fs:[0]
mov fs:[0],esp
xor eax, eax
div eax ;generate exception
pop fs:[0]
add esp, 4
;continue execution
;...
handler:
mov ecx, [esp+0Ch] ;skip div
add dword ptr [ecx+0B8h], 2 ;skip div
mov dword ptr [ecx+04h], 0 ;clean dr0
mov dword ptr [ecx+08h], 0 ;clean dr1
mov dword ptr [ecx+0Ch], 0 ;clean dr2
mov dword ptr [ecx+10h], 0 ;clean dr3
mov dword ptr [ecx+14h], 0 ;clean dr6
mov dword ptr [ecx+18h], 0 ;clean dr7
xor eax, eax
ret
上面的第一行代码将处置惩罚程序的偏移量压入货仓,以确保当异常被抛出时它自己的处置惩罚程序能取得控制权。之后进行相应设置,包括用自己异或自己的方式将eax设为0,以将控制权传送给该处置惩罚程序。div eax 指令会引起异常,因为eax为0,所以AX将被除以零。该处置惩罚程序然后跳过除法指令,清空dr0-dr7,同样也把eax置0,表现异常将被处置惩罚,然后恢复运行。
9.排除调试器线程
我们可以经过系统挪用NtSetInformationThread从调试器装配线程。为此,将ThreadInformationClass设为0x11(ThreadHideFromDebugger)来挪用NtSetInformationThread,要是存在调试器的话,这会将程序的线程从调试器拆上去。以下代码便是一个例子:
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用于解密的代码:
perform_encryption_decryption:
mov bx,0
mov si,0960
mov cx,0960
mov dl,b[si]
xor b[bx],dl
inc si
inc bx
cmp si,09a0
jb 0a61 ;masm mod. needed
mov si,0960
loop 0a52 ;masm mod. needed
ret
the_file_decrypting_routine:
push cs
pop ds
mov bx,4
mov si,0964
mov cx,0960
mov dl,b[si]
add b[bx],dl
inc si
inc bx
cmp si,09a4
jb 0a7e ;masm mod. needed
mov si,0964
loop 0a6f ;masm mod. needed
jmp 0390 ;masm mod. needed
人们正在研究可用于未来的新型反调试技能,此中一个项目的课题是关于多处器盘算机的,因为当进行调试时,多处置惩罚器中的一个会处于闲置状态。这种新技能利用并行处置惩罚技能来解密代码。
二、逆转录病毒
逆转录病毒会设法禁用反病毒软件,好比可以经过携带一列进程名,并杀死正在运行的与表中同名的那些进程。很多逆转录病毒还把进程从启动列表中踢出去,这样该进程就无法在系统引导期间启动了。这种范例的歹意软件还会设法挤占反病毒软件的CPU时间,或者制止反病毒软件毗连到反病毒软件公司的办事器以使其无法更新病毒库。
三、混淆技能
W32.Gobi病毒是一个多态逆转录病毒,它结合了EPO和其他一些反调试技能。该病毒还会在TCP端口666上翻开一个后门。
Simile(又名Metaphor)是一个非常有名的复合型病毒,它含有约莫14,000行汇编代码。这个病毒经过探求API挪用ExitProcess()来利用EPO,它还是一个多态病毒,因为它利用多态解密技能。它的90%代码都是用于多态解密,该病毒的主体和多态解密器在每次熏染新文件时,都会放到一个半随机的地方。Simile的第一个有用载荷只在3月、6月、9月或12月份才会激活。在这些月份的17日变体A和B表现它们的音讯。变体C在这些月份的第18日表现它的音讯。变体A和B中的第二个有用载荷只要在五月14日激活,而变体C中的第二个有用载荷只在7月14日激活。
Ganda是一个利用EPO的逆转录病毒。它查抄启动进程列表,并用一个return指令更换每个启动进程的第一个指令。这会使所有防病毒程序变得毫无用处。
四、小结
本文中,我们先容了歹意软件用以拦阻对其进行逆向工程的多少反调试技能,同时先容了逆转录病毒和各种反检测技能的组合。我们应该很好的明白这些技能,只要这样才气够更有用地对歹意软件进行静态检测和分析。
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|
上一篇: 一款屏幕录像软件的分析
下一篇: 几招常用破解方法