看到网上有用SEH脱壳的,看的不是很明白(最主要还是讲的很不明白,然后很多人千篇一律的转载,所以就看不明白了)。另外还有看到用ESP脱壳的,这个比较好理解(ESP定律就那么一个套路,不懂的请看《ESP定律脱壳》一文)。
首先,对目标程序用PEiD查壳,提示PECompact 2.x -> Jeremy Collake,然后OD载入,OD会提示数据有加密或者压缩,点击否。然后OD断下的代码大概如下:
00401000 > B8 D09A6D00 MOV EAX,Watermar.006D9AD000401005 50 PUSH EAX00401006 64:FF35 0000000>PUSH DWORD PTR FS:[0] ;运行到这里时观察ESP,用ESP定律设硬件访问断点0040100D 64:8925 0000000>MOV DWORD PTR FS:[0],ESP00401014 33C0 XOR EAX,EAX00401016 8908 MOV DWORD PTR DS:[EAX],ECX00401018 50 PUSH EAX |
接下来F9运行程序,OD断下:
;这里是ntdll的领空7C94A889 3B45 F8 CMP EAX,DWORD PTR SS:[EBP-8]7C94A88C 72 09 JB SHORT ntdll.7C94A8977C94A88E 3B45 F4 CMP EAX,DWORD PTR SS:[EBP-C]7C94A891 ^ 0F82 B7E0FFFF JB ntdll.7C94894E7C94A897 50 PUSH EAX7C94A898 E8 67000000 CALL ntdll.7C94A9047C94A89D 84C0 TEST AL,AL7C94A89F ^ 0F84 A9E0FFFF JE ntdll.7C94894E7C94A8A5 F605 1AE4997C 8>TEST BYTE PTR DS:[7C99E41A],807C94A8AC 0F85 61590200 JNZ ntdll.7C9702137C94A8B2 FF73 04 PUSH DWORD PTR DS:[EBX+4] |
一路F8,来到一个jmp eax的地方:
006D9B65 8956 08 MOV DWORD PTR DS:[ESI+8],EDX006D9B68 8B4B 0C MOV ECX,DWORD PTR DS:[EBX+C]006D9B6B 894E 14 MOV DWORD PTR DS:[ESI+14],ECX006D9B6E FFD7 CALL EDI006D9B70 8985 3F130010 MOV DWORD PTR SS:[EBP+1000133F],EAX006D9B76 8BF0 MOV ESI,EAX ; Watermar.00636300006D9B78 8B4B 14 MOV ECX,DWORD PTR DS:[EBX+14]006D9B7B 5A POP EDX006D9B7C EB 0C JMP SHORT Watermar.006D9B8A006D9B7E 03CA ADD ECX,EDX006D9B80 68 00800000 PUSH 8000006D9B85 6A 00 PUSH 0006D9B87 57 PUSH EDI006D9B88 FF11 CALL DWORD PTR DS:[ECX]006D9B8A 8BC6 MOV EAX,ESI006D9B8C 5A POP EDX006D9B8D 5E POP ESI006D9B8E 5F POP EDI006D9B8F 59 POP ECX006D9B90 5B POP EBX006D9B91 5D POP EBP006D9B92 FFE0 JMP EAX ;OEP就是这里了 |
跳转之后,在反汇编窗口右键“用OllyDump脱壳调试进程”,然后保存文件,OK。
本文地址: 程序人生 >> PECompact 2.x -> Jeremy Collake脱壳
作者:代码疯子(Wins0n) 本站内容如无声明均属原创,转载请保留作者信息与原文链接,谢谢!
联系客服