VMP1.10最大保护分析

这次的样本只是一条mov eax,0x200指令,用vmp1.10开全部保护:

分析如下:

首先来到vm_dipatcher处:

这里是每次对取opcode会进行解码,此时的vm_data中不会看到一样的opcode,就是因为每次会进行解码,而且在进行handler执行的时候也会对操作数进行解码,并且更新bl这个密钥因子。

比如这个vPushReg32这个handler,先用bl进行解码,然后根据解码内容再更新下bl这个密钥因子,这防止了直接提取handler进行静态分析,当然,也可以提权所有的opcode,以及相应的解码算法,进行还原到没有加密过的opcode表:

其次就是在handler执行的过程中,常量被加密了,执行时候会对这些常量进行很多步的解码,最后才能还原,以及加入了很多无用的步骤,具体的看分析记录吧,每次执行完handler记录一下堆栈的情况:

------------vPushImm32 40C3CDEE ————******————
0019FF38   40C3CDEE

------------vPushImm32 BF3C3412 ————******————
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushImm32 7607BB5D ————******————
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

/*************************
------------vPushReg32  vecx
0019FF2C   00000000
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushReg32  vebp
0019FF28   0019FF80
0019FF2C   00000000
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------Nor32
0019FF28   0282****
0019FF2C   FFE6007F
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vShr8
0019FF2C   FFE60200
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushImm32  B82F6173
0019FF28   B82F6173
0019FF2C   FFE60200
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPopReg32 R7
0019FF2C   FFE60200
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vShr8
0019FF2C   0200****
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPopReg16 R7
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE
*************************/

------------vPushImm32 8A39EAFE ————******————
0019FF2C   8A39EAFE
0019FF30   7607BB5D  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32               ————******————
0019FF30   0041A65B  
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushReg32 Image_Base ————******————
0019FF2C   00000000
0019FF30   0041A65B  Max_Prot.0041A65B
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32                ————******————
0019FF30   0041A65B  Max_Prot.0041A65B
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vGetEsp32             ————******————
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushImm32  E9780960  ————******————   
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

/********************
------------vPushEsp
0019FF28   0019FF2C
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vGetEsp8
0019FF28   0060****  
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushEsp
0019FF24   FF2A****
0019FF28   00600019
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vGetEsp16
0019FF28   00600060
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vShl16
0019FF28   00600A13
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------Nor16
0019FF28   F58C****
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPushImm16 00A4
0019FF28   F58C00A4
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vShr8
0019FF28   00000A46
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPopReg16 R7
0019FF28   0000****
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vPopReg16 key
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE
***************************/

------------vPushImm32 3A9DF7C7 ————******————
0019FF28   3A9DF7C7
0019FF2C   E9780960
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32              ————******————
0019FF2C   24160127
0019FF30   DBE9FED9
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32              ————******————
0019FF30   00000000
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32              ————******———— 
0019FF34   BF3C3412
0019FF38   40C3CDEE

------------vAdd32              ————******————
0019FF38   00000200

------------vPopReg32 veax
------------vPopad
------------vPopfd
------------vRet


一条mov eax,0x200指令,除去pushad popfd等保存寄存器信息操作之外,被解释成了30条的handler,其中后面——****——为有效指令,/************ 和**********/之间的都是无效指令,我们可以直接在OD中不让这些无效handler执行,只执行解密opcde部分,运行后的效果还是一样。最后常量0x200是通过push的几次立即数,加上通过一个vmp的handler地址取四字节进行add操作最后还原到0x200。经过这么分析之后,对vmp的部分Handler都熟悉了一下,命名等借鉴了下vmp分析插件。

猜你喜欢

转载自blog.csdn.net/a893574301/article/details/82811294
今日推荐