1. 程式人生 > >VMP1.10最大保護分析

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分析外掛。