这个是双重的压缩壳,不难的,连续用ESP定律就搞定了!
具体的步骤:
OD载入:
00436480 > 60 pushad
00436481 BE 00004200 mov esi, 00420000
00436486 8DBE 0010FEFF lea edi, dword ptr [esi+FFFE1000]
0043648C 57 push edi
0043648D 83CD FF or ebp, FFFFFFFF
00436490 EB 10 jmp short 004364A2
.....
004365C8 FF96 E8630300 call dword ptr [esi+363E8]
004365CE 61 popad
004365CF - E9 27AEFCFF jmp 004013FB
来到:
004013FB 50 push eax
004013FC 53 push ebx
004013FD 51 push ecx
004013FE 2BC9 sub ecx, ecx
00401400 52 push edx
00401401 56 push esi
00401402 57 push edi
到这里UPX脱完了!
一连的PUSH,跟PUSHAD差不多的!
00401402 57 push edi
00401403 ^ 0F84 B3FDFFFF je 004011BC
F8到这里,寄存器的信息如下:
=================================
EAX 00000000
ECX 00000000
EDX 7C92EB94 ntdll.KiFastSystemCallRet
EBX 7FFDF000
ESP 0012FFAC
EBP 0012FFF0
================================= 在命令行下如下命令:hr 12ffac 再 shift+F9
来到这里:
00401272 5F pop edi
00401273 5E pop esi
00401274 5A pop edx
00401275 59 pop ecx
00401276 5B pop ebx
00401277 58 pop eax
00401278 ^ E9 E3FEFFFF jmp 00401160
。。。
00401160 /E9 EC2A0000 jmp 00403C51
00401165 |C9 leave 。。。
这里就到OEP了!
00403C51 55 push ebp
00403C52 8BEC mov ebp, esp
00403C54 6A FF push -1
00403C56 68 F0724000 push 004072F0
00403C5B 68 C4504000 push 004050C4
00403C60 64:A1 00000000 mov eax, dword ptr fs:[0]
IAT的修复就不说了!
====================下面是附加数据的处理!====================
用PE编辑器查看区段信息!
最后一个区段的Roffset跟RSize相加得到:16A00H+600H = 17000H
用HEX编辑器打开原来未脱壳的文件!来到17000H处:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00016FE0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00016FF0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00017000 A5 B7 9A 82 04 00 00 00 A3 7C E3 0C 71 EC 32 A0 シ殏....?q??
00017010 5B 93 1B A3 04 7F E0 DE F5 B8 9F 64 8A 93 54 C7 [??噢醺焏姄T
看到一堆的0数据跟附加数据的分割处:0x00017000
在这里开始到文件末,全部以HEX格式复制下来!
再用HEX编辑器打开刚才脱壳完并修复过IAT的文件,来到文件末,粘贴,保存!
到这里,附加数据就处理完了!
上传的附件: