飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3107|回复: 7

[原创] 不用ImportREC完美脱nPack

[复制链接]

该用户从未签到

发表于 2009-11-2 11:28:29 | 显示全部楼层 |阅读模式
【文章标题】: 不用ImportREC完美脱nPack
【文章作者】: 尘渺
【作者邮箱】: 673636269@qq.com
【作者QQ号】: 673636269
【软件名称】: 98记事本
【加壳方式】: nPack 1.1.300.2006 Beta
【使用工具】: OD,LordPE,CFF explorer
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
第一次写脱文,先拣“软”的捏~。一个很小很简单的压缩壳,估计现在没什么人玩了,太简单了!一路F8,见到ret,返回就可以脱壳,修复就OK的东东,但注意,本文的重点不再这里,我们的目标是——不用ImportREC完美脱壳。
     首先明确两点:
     1. 一般,压缩壳无非要做两件事,解码和还原IAT。
     2.手动脱壳理想的最佳dump时机是指壳已经把程序代码包括资源等数据全部解密、输入表等数据还原但还未
     填充系统函数地址、DLL则还未重定位,此时dump出来的文件只需修正OEP、ImportTableRVA等信息
即可正常运行完成脱壳。(fly)
      不废话了,OD载入加了壳程序。这个壳CALL比较多且比较密集,下面说的第几个CALL都是从头算起的。
  1.   0040C1B0 >  833D 4CCE4000 0>cmp     dword ptr [40CE4C], 0            ;停在这里
  2.   0040C1B7    75 05           jnz     short 0040C1BE                   ; 0040C1BE
  3.   0040C1B9    E9 01000000     jmp     0040C1BF                         ; 0040C1BF
  4.   0040C1BE    C3              retn
  5.   0040C1BF    E8 46000000     call    0040C20A                         ;第一个CALL 取VirtualAlloc和VirtualFree的地址
  6.   0040C1C4    E8 73000000     call    0040C23C                         ;第二个CALL 0040C23C
  7.   0040C1C9    B8 B0C14000     mov     eax, 40C1B0
  8.   0040C1CE    2B05 08CE4000   sub     eax, dword ptr [40CE08]          ; 算基址
  9.   0040C1D4    A3 48CE4000     mov     dword ptr [40CE48], eax          ; 基址存入[40CE48]
  10.   0040C1D9    E8 9C000000     call    0040C27A                         ;第三个CALL 对每一个段解压
  11.   0040C1DE    E8 2D020000     call    0040C410                         ;第四个CALL 还原IAT
  12.   0040C1E3    E8 DD060000     call    0040C8C5                         ;第五个CALL 0040C8C5
  13.   0040C1E8    E8 2C060000     call    0040C819                         ;第六个CALL
  14.   0040C1ED    A1 48CE4000     mov     eax, dword ptr [40CE48]
  15.   0040C1F2    C705 4CCE4000 0>mov     dword ptr [40CE4C], 1
  16.   0040C1FC    0105 00CE4000   add     dword ptr [40CE00], eax
  17.   0040C202    FF35 00CE4000   push    dword ptr [40CE00]
  18.   0040C208    C3              retn                                     ;返回到OEP
复制代码
现在来脱壳:
  在载入之后在第三个CALL的上一句下断,F9运行到那里,记录此时EAX的值,这就是镜像基址。然后第四个CALL和第五个CALL下断(这两句是相连的)。然后F9运行,断下之后,用LordPR完整脱壳,之后F7,停在:
  1. 0040C410    A1 04CE4000     mov     eax, dword ptr [40CE04]
复制代码
记录内存[40CE04]中存放的数据(注释窗口可以看到),这就是输入表RVA。然后F9,停在第五个CALL上。此时取消所有断点,F8到下面的RETN的上一句上,这句PUSH的就是OEP的VA,所以,记录内存中的数据。OEP的RVA=OEP的VA-镜像基址。现在我们打开LordPE,用PE编辑器打开刚才dump的文件,将入口点改成算好的OEP RVA,记住点保存!然后点
右边目录,将输入表RVA改为之前记录的值,保存之后确定,就OK了。(这里不知道为什么不用修改输入表大小)
之后用CFF Explorer来去除壳区段,保存,测试~可以运行,手工~
--------------------------------------------------------------------------------
【总结】: 这个壳没有处理掉原来的区段,所以要完美脱壳还是比较简单的。:)
PS:由于壳子报毒,就不传附件了~
PYG19周年生日快乐!

该用户从未签到

发表于 2009-11-2 14:42:02 | 显示全部楼层
谢谢楼主分享自己的经验。/:014
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-29 07:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-11-2 15:02:39 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!

    该用户从未签到

     楼主| 发表于 2009-11-3 09:07:55 | 显示全部楼层
    谢谢支持~我会努力的~
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2018-12-18 12:34
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2009-11-4 20:07:38 | 显示全部楼层
    支持完美脱壳。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-11-10 21:57:46 | 显示全部楼层
    不错学习了。
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2015-12-24 22:52:00 | 显示全部楼层
    是,完美脱壳,没有看懂.
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-1 13:26
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2016-3-31 14:22:48 | 显示全部楼层
    不错不错学习了
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表