各位高手大哥们,本人想学脱壳,第一次脱UPX这类壳,研究了三天,没法脱,请高手们指教下,我脱的是红色警戒2的游戏主程序平台NPManager.exe,用PEiD V0.94查壳:
入口点:000131E0 EP区段:UPX1
文件偏移:000065E0 首字节:60,BE,00,D0
链接器信息:8.0 子系统:Win32 GUI
UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
在ollyDbg中打开这个NPManager.exe文件,出现前几行如下:
004131E0 > 60 PUSHAD
004131E1 BE 00D04000 MOV ESI,NPManage.0040D000
004131E6 8DBE 0040FFFF LEA EDI,DWORD PTR DS:[ESI+FFFF4000]
004131EC 57 PUSH EDI
我一直按F8往下走,有几个回跳的,高手看看我F4的位置对不对,如下:
00413209 ^\72 ED JB SHORT NPManage.004131F8
0041320B B8 01000000 MOV EAX,1(我在这里F4跳到这个位置)
往下、、、
004132AD ^\E9 4CFFFFFF JMP NPManage.004131FE
004132B2 5E POP ESI NPManage.00401000(我在这里F4跳到这个位置)
004132B3 89F7 MOV EDI,ESI
004132B5 B9 94030000 MOV ECX,394
004132BA 8A07 MOV AL,BYTE PTR DS:[EDI]
004132BC 47 INC EDI
004132BD 2C E8 SUB AL,0E8
004132C1 ^\77 F7 JA SHORT NPManage.004132BA
004132C3 803F 09 CMP BYTE PTR DS:[EDI],9(我在这里F4跳到这个位置)
004132C6 ^ 75 F2 JNZ SHORT NPManage.004132BA
004132C8 8B07 MOV EAX,DWORD PTR DS:[EDI](我在这里F4跳到这个位置)
004132CA 8A5F 04 MOV BL,BYTE PTR DS:[EDI+4]
004132E4 ^\E2 D9 LOOPD SHORT NPManage.004132BF
004132E6 8DBE 00100100 LEA EDI,DWORD PTR DS:[ESI+11000](我在这里F4跳到这个位置)
004132EC 8B07 MOV EAX,DWORD PTR DS:[EDI]
004132EE 09C0 OR EAX,EAX
00413312 /79 07 JNS SHORT NPManage.0041331B(这里说要往下跳到0041331B,在下面没有啊,我再按F8时,它就到0041331B段,这里要不要F4跳过去?)
00413314 |0FB707 MOVZX EAX,WORD PTR DS:[EDI]
00413317 |47 INC EDI
00413318 |50 PUSH EAX
00413319 |47 INC EDI
0041331A |B9 5748F2AE MOV ECX,AEF24857
0041331F 55 PUSH EBP
00413320 FF96 48470100 CALL DWORD PTR DS:[ESI+14748]
00413326 09C0 OR EAX,EAX
我按F8后跳到0041331B,
0041331B 57 PUSH EDI ; NPManage.00412009
0041331C 48 DEC EAX
0041331D F2:AE REPNE SCAS BYTE PTR ES:[EDI]
0041331F 55 PUSH EBP
然后往下走、、、
0041332F ^\EB D8 JMP SHORT NPManage.00413309
00413331 FF96 50470100 CALL DWORD PTR DS:[ESI+14750]
00413337 8BAE 4C470100 MOV EBP,DWORD PTR DS:[ESI+1474C] ; kernel32.VirtualProtect(这里F4跳到这个位置)
0041333D 8DBE 00F0FFFF LEA EDI,DWORD PTR DS:[ESI-1000]
00413343 BB 00100000 MOV EBX,1000
往下走就到了POPAD了,网上教程说出口就在附近
00413366 61 POPAD
00413367 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
0041336B 6A 00 PUSH 0
0041336D 39C4 CMP ESP,EAX
0041336F ^ 75 FA JNZ SHORT NPManage.0041336B
00413371 83EC 80 SUB ESP,-80
00413374 - E9 7CE4FEFF JMP NPManage.004017F5
上面这段最后那个JMP NPManage.004017F5是不是出口点,它前面还有一个回跳,是不是要F4到00413371 83EC 80 SUB ESP,-80这里,请高手指点一下,我选择跳过那个回跳,到00413371,F8后到004017F5:
004017F5 E8 8C1A0000 CALL NPManage.00403286
004017FA ^ E9 16FEFFFF JMP NPManage.00401615
004017FF 55 PUSH EBP
00401800 8BEC MOV EBP,ESP
00401802 51 PUSH ECX
00401803 56 PUSH ESI
00401804 8B75 0C MOV ESI,DWORD PTR SS:[EBP+C]
00401807 56 PUSH ESI
到了这里之后我发现第一个不是PUSH EBP,而是CALL,如何办,请高手们指导下,我错在那里了。多谢了。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法