简单介绍:

FSG壳是一款压缩壳。

我们这里使用9种方式来进行脱壳



工具:ExeinfoPE或PEid、OD、LordPE、ImportREConstructor
脱壳文件:05.手脱PECompact2.X壳.rar

1 单步

    我们发现有两处call会跑飞。那么我们须要在跑飞处进入,然后在跟就可以。


       第一个跑飞的call,我们此时不应该单步而是进入

简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c





       第二个跑飞的call,我们此时不应该单步而是进入

简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_02


    OEP

简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_03

2 ESP定律

   单步到在此处。并在数据窗体中尾随,下断点,单步跟踪就可以。可參考前面的笔记内容。

简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_04


3 使用BP VirtualFree断点

首先下 bp VirtualFree断点

         简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_05



然后 SHIFT+F9执行,接着按F2取消断点

         简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_06



接着ALT+F9运行到用户代码

         简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_07



ctrl+f 进行查找 push 8000(特征码)

     简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_08 

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_09



F2设置断点 , shift+f9执行到这,然后取消断点

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_10



接着单步跟就可以。就会到达OEP

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_11



4   相同设置BP VirtualFree

首先设置断点


      简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_12


然后。两次SHIFT+F9。 

     简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_13


然后,取消断点。Alt+F9 并运行到用户代码

      简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_14




然后单步走。就会到达OEP


    简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_15


5.

1、载入程序后,会发现首行有个地址   

     0040A86D >  B8 74DE4500     mov eax,qqspirit.0045DE74


     简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_16



2、在该地址处下断点    bp 0045de74


      简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_17



3、然后shift+f9执行,并取消断点

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_18


4、我们在该处的retn 下一行 设置断点,然后shift+f9执行,并取消断点

   简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_19


045DE74    B8 F9CB45F0     mov eax,F045CBF9

0045DE79    8D88 9E120010   lea ecx,dword ptr ds:[eax+1000129E]

0045DE7F    8941 01         mov dword ptr ds:[ecx+1],eax

0045DE82    8B5424 04       mov edx,dword ptr ss:[esp+4]

0045DE86    8B52 0C         mov edx,dword ptr ds:[edx+C]

0045DE89    C602 E9         mov byte ptr ds:[edx],0E9

0045DE8C    83C2 05         add edx,5

0045DE8F    2BCA            sub ecx,edx

0045DE91    894A FC         mov dword ptr ds:[edx-4],ecx

0045DE94    33C0            xor eax,eax

0045DE96    C3              retn

0045DE97    B8 78563412     mov eax,12345678                      //下断点



5、接着单步跟就可以。就会到达OEP



6

1、设置bp VirtualAlloc 断点。然后shift+f9 执行,并取消断点

     简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_20



    简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_21


2、alt+f9 执行到用户代码    向下拉。看到JMP。

执行到这




     简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_22



3、然后接着单步就可以。



7.最后一次异常法。

1、选项---》调试设置---》异常------取消全部异常。

简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_23



2、然后将程序又一次加载


3、按shift+f9 ,发现2次shift+f9 就会让程序跑起来了。

(之所以叫最后一次异常法,我们利用的就是利用最后一次异常,也就是说,

我们有执行shift+f9有M次,就让程序跑起来了。那么我们又一次加载程序后,

仅仅须要按 M-1次shift+f9就可以)


4、因为2次跑飞,我们按1次shift+f9,然后在堆栈窗体中  找SE句柄

      简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_24




        简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_25


5、然后 我们转到 0045de74处, 并在retn下一行下断 (和第5种类似)

      简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_26 




     简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_27



045DE74    B8 F9CB45F0     mov eax,F045CBF9

0045DE79    8D88 9E120010   lea ecx,dword ptr ds:[eax+1000129E]

0045DE7F    8941 01         mov dword ptr ds:[ecx+1],eax

0045DE82    8B5424 04       mov edx,dword ptr ss:[esp+4]

0045DE86    8B52 0C         mov edx,dword ptr ds:[edx+C]

0045DE89    C602 E9         mov byte ptr ds:[edx],0E9

0045DE8C    83C2 05         add edx,5

0045DE8F    2BCA            sub ecx,edx

0045DE91    894A FC         mov dword ptr ds:[edx-4],ecx

0045DE94    33C0            xor eax,eax

0045DE96    C3              retn

0045DE97    B8 78563412     mov eax,12345678//下断



6、shift+f9执行到该位置,取消断点后 ,接着单步跟就可以





注意:


假设不能用最后一次异常法脱强壳。一用 shift+f9 就直接跑飞,解决例如以下

在OD插件--StrongOD--Options--Skip Some Exceptions选项取消,重新启动OD再试试。

简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_28




使用完毕后,我们要将异常-Skip Some Exceptions选项  恢复


8 两次内存

 1、在内存窗体中,找到第一个.rsrc, 然后F2下断点,并执行

简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_29



2、再次在内存窗体中找到

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_30


3、然后单步跟就可以,当遇到 retn的时候,要在retn下一行设置断点,然后单步就可以。


9 at GetVersion


 1、因为该程序是c++编写,所以能够设置 at GetVersion断点。

       简单脱壳教程笔记(7)---手脱PECompact2.X壳_视频教程_31

  2、向下 在retn处设置断点。并执行

     简单脱壳教程笔记(7)---手脱PECompact2.X壳_加载_32

3、然后取消断点,单步,向上拖就会看到OEP了

    简单脱壳教程笔记(7)---手脱PECompact2.X壳_3c_33