小白, 每次遇到VMP 就想哭。。。
这是一个crackme 程序。 也算求助吧 程序在附件
PEID查壳 是UPX 0.89.6 - 1.02 / 1.05 - 2.90 -> Markus & Laszlo
载入od
00401000 > $ 60 PUSHAD
00401001 . BE 00908B00 MOV ESI,8B9000
00401006 . 8DBE 0080B4FF LEA EDI,DWORD PTR DS:[ESI+FFB48000]
0040100C . 57 PUSH EDI
0040100D . 83CD FF OR EBP,FFFFFFFF
00401010 . EB 3A JMP SHORT crackme.0040104C
-------------------------------------------------------------------------
0040104C > \58 POP EAX ; crackme.<模块入口点>
0040104D . 61 POPAD
0040104E . 90 NOP
0040104F .- E9 6A780D00 JMP crackme.004D88BE
的确长得挺像upx。。。
---------------------------------------------------------------------
004D88BE 60 PUSHAD
004D88BF E8 00000000 CALL crackme.004D88C4
004D88C4 83C4 04 ADD ESP,4
004D88C7 8B6C24 FC MOV EBP,DWORD PTR SS:[ESP-4]
004D88CB E8 8B020000 CALL crackme.004D8B5B
004D88D0 E8 74240000 CALL crackme.004DAD49
004D88D5 E8 88430000 CALL crackme.004DCC62
判断是 RLpack 伪装。。 有vm
下VirtualProtectEx 断点。。。
停在
7C801AD4 > 8BFF MOV EDI,EDI ; ntdll.7C930228
7C801AD6 /. 55 PUSH EBP
7C801AD7 |. 8BEC MOV EBP,ESP
7C801AD9 |. FF75 14 PUSH DWORD PTR SS:[EBP+14] ; /pOldProtect
7C801ADC |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |NewProtect
7C801ADF |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Size
7C801AE2 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |Address
7C801AE5 |. 6A FF PUSH -1 ; |hProcess = FFFFFFFF
7C801AE7 |. E8 75FFFFFF CALL kernel32.VirtualProtectEx ; \VirtualProtectEx
7C801AEC |. 5D POP EBP
7C801AED \. C2 1000 RETN 10
--------------------------------------------------
应该是vm了。。 如果不是 大牛们不要笑我哦
F9运行 到最后一次。。 (为什么晓得是最后一次 因为我试了N多次)
004D9758 83C6 0C ADD ESI,0C
004D975B 833E FF CMP DWORD PTR DS:[ESI],-1
004D975E 75 01 JNZ SHORT crackme.004D9761 ; 没跳的
004D9760 47 INC EDI
004D9761 0BFF OR EDI,EDI
004D9763 ^ 74 CD JE SHORT crackme.004D9732 ; 没跳的
004D9765 61 POPAD
004D9766 C3 RETN
004D9767 C3 RETN
到这里了。。。。 如果没运行到最后一次。 4D9763会跳上去。。 继续走迷宫。。。
004D8B3F E8 850A0000 CALL crackme.004D95C9
004D8B44 83BD 0C4E0000 0>CMP DWORD PTR SS:[EBP+4E0C],0
004D8B4B 74 07 JE SHORT crackme.004D8B54
004D8B4D E9 10100000 JMP crackme.004D9B62
004D8B52 EB 01 JMP SHORT crackme.004D8B55
004D8B54 61 POPAD
004D8B55 - E9 77D9F6FF JMP crackme.004464D1
004D8B5A 90 NOP
004D8B5B 60 PUSHAD
004D8B5C 6A 40 PUSH 40
----------------到这里了。。。。 个人感觉。。 4D8B55 JMp 到OEP。。。
004464D1 ? 55 PUSH EBP
004464D2 . 8BEC MOV EBP,ESP
004464D4 . 6A FF PUSH -1
004464D6 . 68 E0C14600 PUSH crackme.0046C1E0
004464DB ? 68 DCAC4400 PUSH crackme.0044ACDC
004464E0 . 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
004464E6 . 50 PUSH EAX
004464E7 ? 64:8925 00000>MOV DWORD PTR FS:[0],ESP
004464EE . 83EC 58 SUB ESP,58
004464F1 ? 53 PUSH EBX
004464F2 . 56 PUSH ESI
004464F3 ? 57 PUSH EDI
004464F4 . 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
004464F7 ? FF15 98514600 CALL DWORD PTR DS:[465198] ; kernel32.GetVersion
------------------到此。。 又对照下特征。。 易语言OEP
好吧。。 断定是这里了。。。 但是下面。。 用OD插件 dump
脱下来的 运行错误。。。 用lordpe 完整转存 还是错误。。 用ImportREC 附加。。
找不到一个输入表函数。。。
小白。 大牛们指导。。。。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!