【文章标题】: 手脱VMP2.09
【文章作者】: bbchylml
【软件名称】: 飞鸽传书
【软件大小】: 156k
【下载地址】: 网上有下载
【加壳方式】: VMProtect v 2.09
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: VMProtect V2.09、OD、PEID v0.94、ImportREC_fix
【操作平台】: winXP
【软件介绍】: 大家熟知的局域网聊天文件传输工具
【作者声明】: 只是感兴趣,没有其他目的。本人也只是个菜鸟,失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
1.首先自己给程序加壳,加壳后的程序名字为飞鸽传书.vmp.exe。
2.用PEID查查壳,显示“什么也没发现”。
3.用OD载入程序,对于VMP壳来说我们可以用ESP定律进行脱壳,在命令行输入“hr esp”确定。然后F9并记录F9的次数(1次)程序到了,
004AE44E 89E5 mov ebp,esp
004AE450 81EC C0000000 sub esp,0C0
004AE456 89E7 mov edi,esp
004AE458 0375 00 add esi,dword ptr ss:[ebp]
004AE45B 8A06 mov al,byte ptr ds:[esi]
004AE45D 46 inc esi
004AE45E 0FB6C0 movzx eax,al
F9(2次)
004AE385 83C5 04 add ebp,4
004AE388 891438 mov dword ptr ds:[eax+edi],ed>
004AE38B E9 CB000000 jmp 飞鸽传书.004AE45B
004AE390 0FB606 movzx eax,byte ptr ds:[esi]
004AE393 66:8B55 00 mov dx,word ptr ss:[ebp]
004AE397 83C5 02 add ebp,2
004AE39A 46 inc esi
F9(3次)
004AE4D2 ^\E9 64FDFFFF jmp 飞鸽传书.004AE23B
004AE4D7 66:8B6D 00 mov bp,word ptr ss:[ebp]
004AE4DB ^ E9 5BFDFFFF jmp 飞鸽传书.004AE23B
004AE4E0 89E8 mov eax,ebp
004AE4E2 83ED 02 sub ebp,2
004AE4E5 66:8945 00 mov word ptr ss:[ebp],ax
F9(4次)
004AE9DF 8945 00 mov dword ptr ss:[ebp],eax
004AE9E2 ^ E9 74FAFFFF jmp 飞鸽传书.004AE45B
004AE9E7 66:8B45 00 mov ax,word ptr ss:[ebp]
004AE9EB 83ED 02 sub ebp,2
004AE9EE 66:0145 04 add word ptr ss:[ebp+4],ax
004AE9F2 9C pushfd
004AE9F3 8F45 00 pop dword ptr ss:[ebp]
F9(5次)第五次还是在这里
004AE9DF 8945 00 mov dword ptr ss:[ebp],eax
004AE9E2 ^ E9 74FAFFFF jmp 飞鸽传书.004AE45B
004AE9E7 66:8B45 00 mov ax,word ptr ss:[ebp]
004AE9EB 83ED 02 sub ebp,2
004AE9EE 66:0145 04 add word ptr ss:[ebp+4],ax
004AE9F2 9C pushfd
004AE9F3 8F45 00 pop dword ptr ss:[ebp]
F9(6次)
004AE32C F7D0 not eax
004AE32E F7D2 not edx
004AE330 21D0 and eax,edx
004AE332 8945 04 mov dword ptr ss:[ebp+4],eax
004AE335 9C pushfd
004AE336 8F45 00 pop dword ptr ss:[ebp]
004AE339 E9 1D010000 jmp 飞鸽传书.004AE45B
F9(7次)
004AE335 9C pushfd
004AE336 8F45 00 pop dword ptr ss:[ebp]
004AE339 E9 1D010000 jmp 飞鸽传书.004AE45B
004AE33E 8B45 00 mov eax,dword ptr ss:[ebp]
004AE341 8A55 04 mov dl,byte ptr ss:[ebp+4]
004AE344 83C5 06 add ebp,6
004AE347 36:8810 mov byte ptr ss:[eax],dl
由于
pushfd
pop dword ptr ss:[ebp]
是进出栈,所以我们F8单步并实现jmp来到
004AE45B 8A06 mov al,byte ptr ds:[esi]
004AE45D 46 inc esi
004AE45E 0FB6C0 movzx eax,al
004AE461 FF2485 D9E54A00 jmp dword ptr ds:[eax*4+4AE5D>
004AE468 8B45 00 mov eax,dword ptr ss:[ebp]
004AE46B 8A4D 04 mov cl,byte ptr ss:[ebp+4]
004AE46E 83ED 02 sub ebp,2
继续F9(8次)
004AE32C F7D0 not eax
004AE32E F7D2 not edx
004AE330 21D0 and eax,edx
004AE332 8945 04 mov dword ptr ss:[ebp+4],eax
004AE335 9C pushfd
004AE336 8F45 00 pop dword ptr ss:[ebp]
004AE339 E9 1D010000 jmp 飞鸽传书.004AE45B
F9(9次)
004AE335 9C pushfd
004AE336 8F45 00 pop dword ptr ss:[ebp]
004AE339 E9 1D010000 jmp 飞鸽传书.004AE45B
004AE33E 8B45 00 mov eax,dword ptr ss:[ebp]
004AE341 8A55 04 mov dl,byte ptr ss:[ebp+4]
004AE344 83C5 06 add ebp,6
004AE347 36:8810 mov byte ptr ss:[eax],dl
我们又来到pushfd,同样F8单步并实现jmp
004AE45B 8A06 mov al,byte ptr ds:[esi]
004AE45D 46 inc esi
004AE45E 0FB6C0 movzx eax,al
004AE461 FF2485 D9E54A00 jmp dword ptr ds:[eax*4+4AE5D>
004AE468 8B45 00 mov eax,dword ptr ss:[ebp]
004AE46B 8A4D 04 mov cl,byte ptr ss:[ebp+4]
004AE46E 83ED 02 sub ebp,2
继续F9(10次)
004AE306 83C5 04 add ebp,4
004AE309 9D popfd
004AE30A E9 4C010000 jmp 飞鸽传书.004AE45B
004AE30F 8B45 00 mov eax,dword ptr ss:[ebp]
004AE312 8A4D 04 mov cl,byte ptr ss:[ebp+4]
004AE315 83ED 02 sub ebp,2
004AE318 D3E0 shl eax,cl
F9(11次)
004AE411 ^\E9 25FEFFFF jmp 飞鸽传书.004AE23B
004AE416 0FB606 movzx eax,byte ptr ds:[esi]
004AE419 46 inc esi
004AE41A 83ED 02 sub ebp,2
004AE41D 66:8945 00 mov word ptr ss:[ebp],ax
004AE421 ^ E9 15FEFFFF jmp 飞鸽传书.004AE23B
F9(12次)
004AE506 9C pushfd
004AE507 8F45 00 pop dword ptr ss:[ebp]
004AE50A ^ E9 4CFFFFFF jmp 飞鸽传书.004AE45B
004AE50F 66:8B45 00 mov ax,word ptr ss:[ebp]
004AE513 8A4D 02 mov cl,byte ptr ss:[ebp+2]
004AE516 83ED 02 sub ebp,2
又是pushfd,我们还是F8单步并实现jmp
004AE45B 8A06 mov al,byte ptr ds:[esi]
004AE45D 46 inc esi
004AE45E 0FB6C0 movzx eax,al
004AE461 FF2485 D9E54A00 jmp dword ptr ds:[eax*4+4AE5D>
004AE468 8B45 00 mov eax,dword ptr ss:[ebp]
004AE46B 8A4D 04 mov cl,byte ptr ss:[ebp+4]
继续F9(13次)
004183D7 /. 55 push ebp
004183D8 |. 8BEC mov ebp,esp
004183DA |. 6A FF push -1
004183DC |. 68 18CB4100 push 飞鸽传书.0041CB18
004183E1 |. 68 2C9D4100 push 飞鸽传书.00419D2C ; SE 句柄安装
好了,经过13次F9,我们终于到达OEP了,一看就是VC++的程序,然后就是脱壳了。
脱壳后用ImportREC_fix修复。
【经验总结】: 本文只是提供一种脱VMP壳的思路,没有什么技术含量,大牛笑过。。。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于bbchylml, 转载请注明作者并保持文章的完整, 谢谢!
2011年05月13日 21:56:20
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课