聚合Vip网络社区 集合 HK共享吧 合购VIP等精品教程

 找回密码
 立即注册

QQ登录

只需一步,快速开始

关闭
聚合Vip社区
欢迎QQ或来电咨询
工作时间:周一至周五
AM9:00-PM22:00
淘宝店铺 淘宝皇冠店铺
论坛邀请码
查看: 1034|回复: 43

对一个IAT加密壳的分析(包含图片分析演示图等)

[复制链接]

1930

主题

22

听众

8875

积分

管理员

Rank: 9Rank: 9Rank: 9

  • TA的每日心情
    慵懒
    2015-8-3 14:17
  • 签到天数: 8 天

    [LV.3]偶尔看看II

    发表于 2015-5-6 11:16:30 |显示全部楼层

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    立即注册 已有账号?点击登录 或者 用QQ帐号登录

    x
    免责声明:以下资源由聚合VIP资源网整理提供,本资源来源于网络仅供用户学习交流之用,版权归资源方所有,
    本网站不承担任何法律风险,请自觉在下载学习后24小时内删除,不得用作商业用途;如果喜欢请购买正版资源。谢谢
       OD载入后,不分析,如图,一开始就是一个异常安装,并故意产生一个向[00000000]写入的异常如图:
        4.JPG


        SHIFT+F7进入异常处理,在ZWContinue前看堆栈中有一个地址是00401016,如图:

       5.JPG


        到00401016处,是一个无条件跳转指令:

       3 (1).JPG


        那么我们就到00720FAF处直接下断,然后F9到此处,如图:

        6.JPG


        取消此处的断点,然后继续向下跑,来到此处:

        7.JPG
      

        此时,应该进入到此CALL内部,因为直接F8的话会产生不能继续的异常(进程终止),估计此CALL中有作怪的地方,F7进入:
      
        8.JPG


       继续向下,来到这里,果然发现了捣乱的地方:

        9.JPG


        此处的两个je任意一个让其实现即可避过壳的检测。如果用SoftICE,会有通过CreateFile检测调试器的代码,本文忽略。过了拦路虎,就能顺利通过此CALL了,如图:

        10.JPG


        继续F8向下,发现一个大的跨段跳跃,通过它走向OEP处的(如图):

       

        F8来到了程序的OEP,此时DUMP,然后用ImportREC修复,发现有很多无效的的函数指针,如图:

        11.JPG


        这时可以用它强行一个一个地对函数的IAT进行修复,但是数量十分大,上百个函数,得找到一个更明智的办法才行啊!为什么加壳的程序能正常运行,而我们脱出来的就不行了,还有这么多无效的指针?应该是壳对部分的IAT进行了加密处理,只要找到了加密部分,绕过去不就能正常脱壳了么?

        然后就来实现吧,CTRL+F2重新载入程序,找到IAT的起始地址 1D4090加上基址就是5D4090,CTRL+F2重新载入程序,d 5d4090, 在此处下硬件写入断点

        12.JPG


        重复前面的一些步骤,F9几次以后来到这里,发现向IAT的首地址写入了数据:

        13.JPG


        而后面是一个回跳,继续向IAT的后续地址写入函数指针,所以可以判断,这就是IAT的加密代码部分(这个壳加密的是kernel32.dll中的部分函数IAT):

    003914A7    C783 CC1A0010 0>mov     dword ptr [ebx+10001ACC], 0
    003914B1    8B02            mov     eax, dword ptr [edx]
    003914B3    85C0            test    eax, eax
    003914B5    74 67           je      short 0039151E
    003914B7    52              push    edx
    003914B8    8983 CC1A0010   mov     dword ptr [ebx+10001ACC], eax
    003914BE    A9 00000080     test    eax, 80000000
    003914C3    74 09           je      short 003914CE
    003914C5    25 FFFFFF7F     and     eax, 7FFFFFFF
    003914CA    6A 00           push    0
    003914CC    EB 0E           jmp     short 003914DC
    003914CE    8B4D 08         mov     ecx, dword ptr [ebp+8]
    003914D1    0341 08         add     eax, dword ptr [ecx+8]
    003914D4    33C9            xor     ecx, ecx
    003914D6    66:8B08         mov     cx, word ptr [eax]
    003914D9    51              push    ecx
    003914DA    40              inc     eax
    003914DB    40              inc     eax
    003914DC    50              push    eax
    003914DD    FF75 FC         push    dword ptr [ebp-4]
    003914E0    FF93 0A210010   call    dword ptr [ebx+1000210A]
    003914E6    5A              pop     edx
    003914E7    50              push    eax
    003914E8    8B02            mov     eax, dword ptr [edx]
    003914EA    A9 00000080     test    eax, 80000000
    003914EF    75 18           jnz     short 00391509
    003914F1    8B4D 08         mov     ecx, dword ptr [ebp+8]
    003914F4    0341 08         add     eax, dword ptr [ecx+8]
    003914F7    C600 00         mov     byte ptr [eax], 0
    003914FA    40              inc     eax
    003914FB    C600 00         mov     byte ptr [eax], 0
    003914FE    40              inc     eax
    003914FF    8A08            mov     cl, byte ptr [eax]
    00391501    C600 00         mov     byte ptr [eax], 0
    00391504    40              inc     eax
    00391505    84C9            test    cl, cl
    00391507  ^ 75 F6           jnz     short 003914FF
    00391509    58              pop     eax
    0039150A    85C0            test    eax, eax
    0039150C  ^ 0F84 3FFFFFFF   je      00391451
    00391512    8906            mov     dword ptr [esi], eax
    00391514    8902            mov     dword ptr [edx], eax
    00391516    83C2 04         add     edx, 4
    00391519    83C6 04         add     esi, 4
    0039151C  ^ EB 89           jmp     short 003914A7
       
        我们要让IAT部分得到正确的地址,就必须让EAX的值是对应的函数地址值!由于我们到达加密IAT代码部分时IAT的首部已经被写入了加密的IAT值,也就是说加密函数至少已经运行了一次!所以此时必须CTRL+F2再次重新载入程序,来到加密代码首部,然后继续向下,修改代码如下,保持EDX的值是压栈时的值,得到正确的函数地址指针:

       

        这样,这个加密IAT的部分就相当于被我们绕过去了。直接F4到加密结束部分,发现IAT部分已经被写入了正确的函数地址信息:

       

        最后,再次将我们修改的部分还原,就可以直接到达原来的OEP处了!(CTRL+G,输入原来我们找到的OEP地址,F2下断,F9到达后dump即可!)再用ImportREC修复时,发现所有的IAT都有效了,如图:

       

        修复后程序能正常运行,PEID查壳,VC++编写:

       

    回复

    使用道具 举报

    15

    主题

    1

    听众

    528

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-6 11:16:35 |显示全部楼层
    这就是传说中坐沙发的感觉吗?好鸡动!!!
    回复

    使用道具 举报

    13

    主题

    0

    听众

    551

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-6 12:35:54 |显示全部楼层
    支持,赞一个
    回复

    使用道具 举报

    12

    主题

    0

    听众

    503

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-7 22:12:07 |显示全部楼层
    不错,支持下
    回复

    使用道具 举报

    19

    主题

    0

    听众

    539

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-8 16:21:01 |显示全部楼层
    看起来不错
    回复

    使用道具 举报

    17

    主题

    0

    听众

    503

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-8 17:38:19 |显示全部楼层
    锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
    回复

    使用道具 举报

    12

    主题

    0

    听众

    476

    积分

    中级会员

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2015-5-8 22:29:14 |显示全部楼层
    回复

    使用道具 举报

    15

    主题

    1

    听众

    539

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-9 16:41:01 |显示全部楼层
    LZ是天才,坚定完毕
    回复

    使用道具 举报

    11

    主题

    0

    听众

    672

    积分

    高级会员

    Rank: 4

    该用户从未签到

    发表于 2015-5-9 18:39:08 |显示全部楼层
    向楼主学习
    回复

    使用道具 举报

    17

    主题

    0

    听众

    484

    积分

    中级会员

    Rank: 3Rank: 3

    该用户从未签到

    发表于 2015-5-9 19:36:28 |显示全部楼层
    锄禾日当午,发帖真辛苦。谁知坛中餐,帖帖皆辛苦!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    回帖奖励

    [详情]

  • * 每天自己主题被回复3次可获得额外2金钱奖励。
  • * 每天回复他人主题5次可获得额外3贡献的奖励。
  • * 奖励每天都可领取,一定要多参与论坛讨论哦。
  • * 同一主题的重复回复不计。
  • Archiver|手机版|聚合Vip网络社区 ( 鲁ICP备14030129号-2 )Discuz超级管家   

    GMT+8, 2018-12-11 15:33 , Processed in 1.171890 second(s), 64 queries .

    Powered by Discuz! X2.5

    © 2001-2018 Comsenz Inc. Template by A3cn

    回顶部