看到网上有用SEH脱壳的,看的不是很明白(最主要还是讲的很不明白,然后很多人千篇一律的转载,所以就看不明白了)。另外还有看到用ESP脱壳的,这个比较好理解(ESP定律就那么一个套路,不懂的请看《ESP定律脱壳》一文)。
首先,对目标程序用PEiD查壳,提示PECompact 2.x -> Jeremy Collake,然后OD载入,OD会提示数据有加密或者压缩,点击否。然后OD断下的代码大概如下:
00401000 > B8 D09A6D00 MOV EAX,Watermar.006D9AD0
00401005 50 PUSH EAX
00401006 64:FF35 0000000>PUSH DWORD PTR FS:[0] ;运行到这里时观察ESP,用ESP定律设硬件访问断点
0040100D 64:8925 0000000>MOV DWORD PTR FS:[0],ESP
00401014 33C0 XOR EAX,EAX
00401016 8908 MOV DWORD PTR DS:[EAX],ECX
00401018 50 PUSH EAX |
接下来F9运行程序,OD断下:
;这里是ntdll的领空
7C94A889 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]
7C94A88C 72 09 JB SHORT ntdll.7C94A897
7C94A88E 3B45 F4 CMP EAX,DWORD PTR SS:[EBP-C]
7C94A891 ^ 0F82 B7E0FFFF JB ntdll.7C94894E
7C94A897 50 PUSH EAX
7C94A898 E8 67000000 CALL ntdll.7C94A904
7C94A89D 84C0 TEST AL,AL
7C94A89F ^ 0F84 A9E0FFFF JE ntdll.7C94894E
7C94A8A5 F605 1AE4997C 8>TEST BYTE PTR DS:[7C99E41A],80
7C94A8AC 0F85 61590200 JNZ ntdll.7C970213
7C94A8B2 FF73 04 PUSH DWORD PTR DS:[EBX+4] |
一路F8,来到一个jmp eax的地方:
006D9B65 8956 08 MOV DWORD PTR DS:[ESI+8],EDX
006D9B68 8B4B 0C MOV ECX,DWORD PTR DS:[EBX+C]
006D9B6B 894E 14 MOV DWORD PTR DS:[ESI+14],ECX
006D9B6E FFD7 CALL EDI
006D9B70 8985 3F130010 MOV DWORD PTR SS:[EBP+1000133F],EAX
006D9B76 8BF0 MOV ESI,EAX ; Watermar.00636300
006D9B78 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14]
006D9B7B 5A POP EDX
006D9B7C EB 0C JMP SHORT Watermar.006D9B8A
006D9B7E 03CA ADD ECX,EDX
006D9B80 68 00800000 PUSH 8000
006D9B85 6A 00 PUSH 0
006D9B87 57 PUSH EDI
006D9B88 FF11 CALL DWORD PTR DS:[ECX]
006D9B8A 8BC6 MOV EAX,ESI
006D9B8C 5A POP EDX
006D9B8D 5E POP ESI
006D9B8E 5F POP EDI
006D9B8F 59 POP ECX
006D9B90 5B POP EBX
006D9B91 5D POP EBP
006D9B92 FFE0 JMP EAX ;OEP就是这里了 |
跳转之后,在反汇编窗口右键“用OllyDump脱壳调试进程”,然后保存文件,OK。
本文地址: 程序人生 >> PECompact 2.x -> Jeremy Collake脱壳
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!
|