TMD/WL (Themida / Winlicense ) SDK VM的解决方案 (应用篇,非引擎分析)

Themida / Winlicense脱壳后,在以下几种情况可能需要对SDK  VM 进行处理。

1,程序分析需要。

2,由于最新版本anti-dump原因,有可能导致脱壳后的程序不能运行。

3,需要减小程序体积,删去TMD/WL壳区段。

 

TMD/WL VM的两种常见方式,

1,JMP 方式

在程序中很容易找到

jmp aaaaaaaa

aaaaaaaa:  

push key

JMP vm_start

2,非jmp方式,如call XXXXXXXX。

 

TMD/WL VM的虚拟机出入口的一般方式:

push key
Jmp Vm_Start   进入虚拟机

00514835    9C                 pushfd                          ; Vm_Start  虚拟机入口


00519518    311C24             xor dword ptr ss:[esp],ebx
0051951B    331C24             xor ebx,dword ptr ss:[esp]
0051951E    8B2424             mov esp,dword ptr ss:[esp]
00519521    61                 popad
00519522    9D                 popfd
00519523    C3                 retn                            ;Vm_Retn    虚拟机出口

 

在虚拟机出口处可以得到返回的地址,如VM的API函数等:

popad
popfd
retn  

 

Un VM步骤:

1,在OD的CPU窗口上 右键---选择find reference
2,在出现的reference窗口上选择要VM的jmp / call。
3,右键---选择UnVirtualizer with jump / no jump.
4,点确定。
5,再次 右键---选择UnVirtualizer with jump,此时会弹出一个文本窗口,查找

POP ESP
或者
MOV ESP, DWORD PTR SS:[ESP]
或者
MOV ESP,DWORD PTR [ESP]
或者
ADD ESP,0x4

一般从最后面往上找起,如找到
 00C27B02 POP EAX
 00C27B0D POP ESP
 00C27B13 MOV ECX,DWORD PTR [EBP+0xfffffff0]
 00C27B70 CMP DWORD PTR [ECX+0xfffffff8],EDI

那么,在弹出的窗口中输入00C27B13这个地址,点确定即可。

6,如何确认unVM的数据是否正确:
A,根据unVM后的最后一个数据JMP是否为(EB 10).或EB 11等,即最后面这个JUMP是短距离的往后跳,如果是跳到前面那说明unVM的

数据太多了。
B,只能根据上下文来判断。

以上过程如有补充或疑问,可问QQ: 9112627, 对软件破解、Winlicense脱壳,Zprotect脱壳,NP过校验,网络验证破解等有一定的研究。

 

 

 

 

 

你可能感兴趣的:(逆向工程,Winlicense脱壳,Themida脱壳)