jxdyxg 发表于 2009-11-2 11:28:29

不用ImportREC完美脱nPack

【文章标题】: 不用ImportREC完美脱nPack
【文章作者】: 尘渺
【作者邮箱】: [email protected]
【作者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都是从头算起的。0040C1B0 >833D 4CCE4000 0>cmp   dword ptr , 0            ;停在这里
0040C1B7    75 05         jnz   short 0040C1BE                   ; 0040C1BE
0040C1B9    E9 01000000   jmp   0040C1BF                         ; 0040C1BF
0040C1BE    C3            retn
0040C1BF    E8 46000000   call    0040C20A                         ;第一个CALL 取VirtualAlloc和VirtualFree的地址
0040C1C4    E8 73000000   call    0040C23C                         ;第二个CALL 0040C23C
0040C1C9    B8 B0C14000   mov   eax, 40C1B0
0040C1CE    2B05 08CE4000   sub   eax, dword ptr           ; 算基址
0040C1D4    A3 48CE4000   mov   dword ptr , eax          ; 基址存入
0040C1D9    E8 9C000000   call    0040C27A                         ;第三个CALL 对每一个段解压
0040C1DE    E8 2D020000   call    0040C410                         ;第四个CALL 还原IAT
0040C1E3    E8 DD060000   call    0040C8C5                         ;第五个CALL 0040C8C5
0040C1E8    E8 2C060000   call    0040C819                         ;第六个CALL
0040C1ED    A1 48CE4000   mov   eax, dword ptr
0040C1F2    C705 4CCE4000 0>mov   dword ptr , 1
0040C1FC    0105 00CE4000   add   dword ptr , eax
0040C202    FF35 00CE4000   push    dword ptr
0040C208    C3            retn                                     ;返回到OEP现在来脱壳:
在载入之后在第三个CALL的上一句下断,F9运行到那里,记录此时EAX的值,这就是镜像基址。然后第四个CALL和第五个CALL下断(这两句是相连的)。然后F9运行,断下之后,用LordPR完整脱壳,之后F7,停在:0040C410    A1 04CE4000   mov   eax, dword ptr 记录内存中存放的数据(注释窗口可以看到),这就是输入表RVA。然后F9,停在第五个CALL上。此时取消所有断点,F8到下面的RETN的上一句上,这句PUSH的就是OEP的VA,所以,记录内存中的数据。OEP的RVA=OEP的VA-镜像基址。现在我们打开LordPE,用PE编辑器打开刚才dump的文件,将入口点改成算好的OEP RVA,记住点保存!然后点
右边目录,将输入表RVA改为之前记录的值,保存之后确定,就OK了。(这里不知道为什么不用修改输入表大小)
之后用CFF Explorer来去除壳区段,保存,测试~可以运行,手工~
--------------------------------------------------------------------------------
【总结】: 这个壳没有处理掉原来的区段,所以要完美脱壳还是比较简单的。:)
PS:由于壳子报毒,就不传附件了~

asdfslw 发表于 2009-11-2 14:42:02

谢谢楼主分享自己的经验。/:014

HDd1145 发表于 2009-11-2 15:02:39

jxdyxg 发表于 2009-11-3 09:07:55

谢谢支持~我会努力的~

qifeon 发表于 2009-11-4 20:07:38

支持完美脱壳。

TSobo 发表于 2009-11-10 21:57:46

不错学习了。

pcwind 发表于 2015-12-24 22:52:00

是,完美脱壳,没有看懂.

机智崔 发表于 2016-3-31 14:22:48

不错不错学习了
页: [1]
查看完整版本: 不用ImportREC完美脱nPack