第二个就是动态调试工具OD(ollydbg),这个工具同样可以自己再网络上找到下载。
我们以一个ascii转换的小工具为例子。因为刚刚好是用aspack加的壳。所以我们就拿它开刀。
上图是软件的界面,这个时候的软件大小是846 KB (866,816 字节)是不是感觉很小呢?我们用peid进行查看壳。
可以清晰的看到是aspack的壳吧。而且还有版本,我们使用OD打开它。对于是否继续分析,我们点否就可以。然后我们就可以看到下面类似的代码。
我们可以看到入口是停止了pushad,也就是寄存器压统一入栈操作。那么我们就可以轻松的使用所谓的ESP定律来搞定了。按一下F7,到下一行,看寄存器窗口。里面的ESP的值 。
看到ESP寄存器是红色的了。我们copy对应的0012FFA4,到我们的命令行窗口下硬件断点。
硬件断点就是hr ,然后加上我们刚刚copy的地址,然后回车,这个时候我们可以再菜单的。调试》硬件断点 中看到我们设置的硬件断点了。
设置好断点后,我们直接按F9运行程序,它会在断点处停下来。大致的位置看截图
好,我们可以高兴的看到,发生了jnz,就是不等于0就跳转,而且是红色的方向向下跳转。红色代表跳转已经实现,方向是向下,就是到了地址为006AF3BA的地方,然后这个地 方push压入一个地址,通过retn方式返回。我们这个时候删除硬件断点。方法是调试》硬件断点 选择删除我们刚刚hr命令添加的硬件断点。然后我们按F7单步就到了push 这个压栈的地方。然后我们在 按两次F7单步执行。就到了
看到这个地方,如果你调试比较多的话,一定明白这个就是入口了。首先你看地址,跳转跨度很大。说明壳的代码前面执行完成,现在跳转来执行真正的代码了。而且这个代码 是典型的vc的编译出现的汇编代码。在地址00422240的地方,我们选择右键,选择用ollydump脱壳调试进程。弹出如下的界面
方式随便选择。我默认,我们直接点击脱壳按钮,然后取一个脱壳完成的exe名称就可以了。然后我们来查看是否脱壳成功,使用我们的peid进行查壳。具体效果如下图所示
我们可以看到真正的语言了。和编译器的版本。然后我们再运行我们脱壳后的程序,如果正在运行就说明一切OK了。
当然如果无法运行我们就需要使用修复工具对脱壳后的程序就行修复操作,常用的修复工具是Import Fix 1.6。大家自己可以再网络上下载到。修复我就不说啦,因为这个脱壳后正常运行了。就没有必要修复了。我们再看一下程序的大小3.17 MB (3,331,584 字节)看到了吧,这个壳的压缩能力惊人 呀呵呵。所以总的来说这个壳可以定性为压缩壳而非加密壳。因为程序大小变小是它主要目的吧。
好了,废话一大堆,就笔记到这里吧。这个可以说是所有脱壳课程里面的最基础的东西,类似我们写c语言时候的hello world。但是麻雀虽小五脏俱全嘛。只要努力你一定可以 成为大牛。路漫漫其修远兮,吾将上下而求索。