码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-04-10 01:20:03      阅读:354      评论:0      收藏:0      [点我收藏+]

标签:

         本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记。本笔记用到的工具下载地址:

http://download.csdn.net/detail/obuyiseng/9466056

简介:

FSG壳是一款压缩壳。我们这里使用9种方式来进行脱壳

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

1 单步

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

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



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

    OEP
技术分享

2 ESP定律

   单步到在此处,并在数据窗口中跟随,下断点,单步跟踪即可,可参考前面的笔记内容。
技术分享

3 使用BP VirtualFree断点

首先下 bp VirtualFree断点
         技术分享

然后 SHIFT+F9运行,接着按F2取消断点
         技术分享


接着ALT+F9执行到用户代码
         技术分享


ctrl+f 进行查找 push 8000(特征码)
     技术分享 
    技术分享


F2设置断点 , shift+f9运行到这,然后取消断点
    技术分享


接着单步跟即可,就会到达OEP
    技术分享


4   同样设置BP VirtualFree

首先设置断点

      技术分享

然后,两次SHIFT+F9。 
     技术分享

然后,取消断点。Alt+F9 并执行到用户代码
      技术分享

 
然后单步走,就会到达OEP

    技术分享

5.

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

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

     技术分享


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

      技术分享

3、然后shift+f9运行,并取消断点
    技术分享

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


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 运行,并取消断点
     技术分享
   
    技术分享

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


     技术分享

3、然后接着单步即可。


7.最后一次异常法;

1、选项---》调试设置---》异常------取消所有异常。
技术分享


2、然后将程序重新载入

3、按shift+f9 ,发现2次shift+f9 就会让程序跑起来了,
(之所以叫最后一次异常法,我们利用的就是利用最后一次异常,也就是说,
我们有运行shift+f9有M次,就让程序跑起来了,那么我们重新载入程序后,
只需要按 M-1次shift+f9即可)
 
4、由于2次跑飞,我们按1次shift+f9,然后在堆栈窗口中  找SE句柄
      技术分享

     
        技术分享

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

     技术分享


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再试试。
技术分享



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

8 两次内存

 1、在内存窗口中,找到第一个.rsrc, 然后F2下断点,并运行
技术分享


2、再次在内存窗口中找到
    技术分享

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

9 at GetVersion

 1、由于该程序是c++编写,所以可以设置 at GetVersion断点。

       技术分享

  2、向下 在retn处设置断点,并运行

     技术分享

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

    技术分享

 

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

标签:

原文地址:http://blog.csdn.net/obuyiseng/article/details/50988504

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!