|
软件的壳子分为压缩壳和加密壳,这次我们一起来探讨下压缩壳,单看名字大家应该会知道压缩壳用来干嘛的吧?没错,压缩壳就是用来压缩软件用的,因此它侧重的是把软件的体积降到最低而不是对软件的保护。 首先作者来给大家科普一下吧,问个问题,被压缩壳加壳的软件如果被脱掉了壳子,那体积会增加还是下降呢?有些童孩可能会想,既然壳子是“加”上去的,那应该是脱了后就会没了壳子,那自然体积应该减少。如果你这样想那真无语了,或者说你这句话说得用错地方了,如果你加的是加密壳那可能脱壳后体积就会就会减少(只是可能不是一定),但如果加的是压缩壳,那脱掉壳子后体积必定是增加的。那么加了压缩壳的软件运行过程又是怎样的呢? 和其他壳子一样,在执行到OEP之前是在壳的代码段上执行的,当壳段的代码执行完毕后就会跳到原程序的OEP继续执行,当在OEP的时候整个程序就已经解压缩了,这时候Dump出来的文件是可以正常在本机运行的,所有资源也是可见的状态。 为什么说是在本机运行?因为IAT还没修复,程序只适合在本地运行,有时还会运行不了。所以说即使脱壳后可以正常运行也应该修复一下IAT,这样才是可以在所有电脑运行的脱壳程序。我为大家准备了一大堆用压缩壳处理的记事本,希望大家多点练习。
我们可以发现下面的数据窗口是空的,也就是说是完全没有数据的,虽然不是每个压缩壳都是这样,但是这个就比较特例了,数据还在压缩状态所以是空的很正常。在没解压前数据都是被压缩的。我们来单步走吧,下面是我的分析:
在这里我直接用”F4”显著是比较方便的,希望大家记得是执行完毕而并不是被打断吧。当以上代码被执行完了,整个程序也就被解压了,我们就会到达壳段的尽头,也就是返回OEP的时候,这里是通过retn来返回的,返回到的地址0100739D也就是程序的真正入口OEP。为了验证一下程序是不是被解压了,我们来查找一下字符串吧。 可以见到很正常地查到了所有的字符串,既然数据已经是解压完了,那现在就是脱壳的时候了。 用OD的脱壳插件来脱就可以了,复制一下OEP的修正地址,等下修复IAT时候可以用。转存出来的东西是可以正常运行的,但是到其他机子上就有可能出错,因此我们必须修复IAT,我们用ImportREC来修复,修复好后就可以正常运行的了,发到其他机子也是正常的,这时再查查壳就知道程序的语言是什么了。 以上运用的是单步法,下次将会教大家其他方式,敬请期待。 |
发表评论