UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo 手动脱壳
UPX 0.89.6 - 1.02 / 1.05 - 2.90 (Delphi) stub -> Markus & Laszlo这个壳很容易脱壳。当然,手动只是查找到脱壳的位置,然后用OD的插件即可脱壳了。
下面举个CrackMes的实例,看下如何脱这个壳,使用的依旧是ESP定律的方法找OEP,程序入口点。
(1)OD载入程序,会提示压缩或是加密或是嵌入程序等提示,问你要不要分析:这里不要分析,点击[否]
<ignore_js_op>
(2)进入第一个入口为:PUSHAD
<ignore_js_op>
- 0046AC00 > 60 pushad ;这里是不分析后,进入的入口(加壳后的程序的口,不是程序真正的OEP)。
- 0046AC01 BE 00104400 mov esi,ceycey.00441000
- 0046AC06 8DBE 0000FCFF lea edi,dword ptr ds:[esi+0xFFFC0000]
- 0046AC0C C787 D0940500 D>mov dword ptr ds:[edi+0x594D0],0x10A125D>
- 0046AC16 57 push edi ; ntdll.7C930228
- 0046AC17 83CD FF or ebp,0xFFFFFFFF
- 0046AC1A EB 0E jmp Xceycey.0046AC2A
- 0046AC1C 90 nop
- 0046AC1D 90 nop
- 0046AC1E 90 nop
- 0046AC1F 90 nop
- 0046AC20 8A06 mov al,byte ptr ds:[esi]
(3)往下拖动鼠标找Popad,这里可以使用单步,如果遇到向上跳转的,在这条指令下面点一下鼠标,然后F4。但是,也可以直接滚动鼠标,直接到我们要找的位置。如下:
<ignore_js_op>
- 0046AD0C ^\E2 D9 loopd Xceycey.0046ACE7 ;看到loopd基本上快到了
- 0046AD0E 8DBE 00700600 lea edi,dword ptr ds:[esi+0x67000]
- 0046AD14 8B07 mov eax,dword ptr ds:[edi]
- 0046AD16 09C0 or eax,eax
- 0046AD18 74 3C je Xceycey.0046AD56
- 0046AD1A 8B5F 04 mov ebx,dword ptr ds:[edi+0x4] ; ntdll.7C96F7E7
- 0046AD1D 8D8430 BCA90600 lea eax,dword ptr ds:[eax+esi+0x6A9BC]
- 0046AD24 01F3 add ebx,esi
- 0046AD26 50 push eax
- 0046AD27 83C7 08 add edi,0x8
- 0046AD2A FF96 5CAA0600 call dword ptr ds:[esi+0x6AA5C]
- 0046AD30 95 xchg eax,ebp
- 0046AD31 8A07 mov al,byte ptr ds:[edi]
- 0046AD33 47 inc edi ; ntdll.7C930228
- 0046AD34 08C0 or al,al
- 0046AD36 ^ 74 DC je Xceycey.0046AD14
- 0046AD38 89F9 mov ecx,edi ; ntdll.7C930228
- 0046AD3A 57 push edi ; ntdll.7C930228
- 0046AD3B 48 dec eax
- 0046AD3C F2:AE repne scas byte ptr es:[edi]
- 0046AD3E 55 push ebp
- 0046AD3F FF96 60AA0600 call dword ptr ds:[esi+0x6AA60]
- 0046AD45 09C0 or eax,eax
- 0046AD47 74 07 je Xceycey.0046AD50
- 0046AD49 8903 mov dword ptr ds:[ebx],eax
- 0046AD4B 83C3 04 add ebx,0x4
- 0046AD4E ^ EB E1 jmp Xceycey.0046AD31
- 0046AD50 FF96 64AA0600 call dword ptr ds:[esi+0x6AA64]
- 0046AD56 61 popad ;这里是popad,到了这里,基本上就找到了。
- 0046AD57 ^ E9 98CBFEFF jmp ceycey.004578F4 ;在这个jmp上F2下断点,直接F9到这里。然后点击F8,就到程序的OEP了。
- 0046AD5C ^ 74 AD je Xceycey.0046AD0B
(4)已经成功找到OEP。(在popad下面的 jmp XXXX 上F2下断点,直接F9到这里。然后点击F8,就到程序的OEP了。)
<ignore_js_op>
(5)使用脱壳插件脱壳:
<ignore_js_op>
<ignore_js_op>
点脱壳后,保存一个新文件即可,然后查看新文件,已经脱壳成功。
壳有很多种,方法不一样,这里只是针对这一个壳的脱法。。