神秘脱壳——MoleBox

查壳:
神秘脱壳——MoleBox_第1张图片
脱加密IAT(其实这个也不是加密壳,但是原理差不多)表的三个要素:
1、找到OEP
2、找到正常IAT的位置
3、找到修改IAT的位置
找到这三个地方之后,所有的问题迎刃而解。最后还有一个问题,怎么找IAT,怎么判断找到的是IAT,这个时候就涉及到一个问题:什么是IAT?IAT是导入表里边用来存储要使用的函数的地址,所以,这个问题就解决了,怎么找IAT,找CALL指令指向的地址,当然也可以直接找CALL系统函数的地方,比如说CreateProcess之类的函数。
接下来正式脱壳:
第一步:找OEP
Pushad:ESP定律,ESP下硬件断点,下段之后,单步步入:OEP到位
神秘脱壳——MoleBox_第2张图片
顺手可以找到IAT表:
神秘脱壳——MoleBox_第3张图片
神秘脱壳——MoleBox_第4张图片
可以发现这个时候的IAT表已经是异常状态的了,说明IAT表已经被修改过了,这个时候,在异常的IAT表的地方下硬件写入断点,去掉之前下的ESP硬件断点,记住下断点的地址:
神秘脱壳——MoleBox_第5张图片
之后重载程序,记住这个时候要查看一下,硬件写入断点是不是确实存在,如果不存在,重新下硬件写入断点(或者再重载一次),之后dd到你刚才下断点的地址:神秘脱壳——MoleBox_第6张图片
下一步,让程序,跑起来(直接F9):跑起来之后要注意,地址窗口的变化,当该地址处出现本来的函数的时候,停下,记录程序的运行地址:神秘脱壳——MoleBox_第7张图片
神秘脱壳——MoleBox_第8张图片
也就是说,再程序运行到这个地方的时候,IAT表还是正常的,我们的正常的函数的地址存储在寄存器EAX里边:
神秘脱壳——MoleBox_第9张图片
记录好这些数据之后,让程序继续跑起来,继续我们的下一项工作,寻找IAT被修改的地方:(F9让程序继续跑起来,同时注意地址窗口数据的变化):
神秘脱壳——MoleBox_第10张图片
这个时候,我们同样记录程序的运行地址,记录的是IAT被修改的地址,目前程序运行到4BA0E4的地方,但是这个时候IAT表已经被修改了,所以修改IAT的语句应该是4BA0E2地址的语句。
这样的话,我们的三个工作都已经完成,接下来就是写脚本来修复IAT表:
神秘脱壳——MoleBox_第11张图片
神秘脱壳——MoleBox_第12张图片
之后,进行脱壳:成功运行
神秘脱壳——MoleBox_第13张图片

你可能感兴趣的:(神秘脱壳——MoleBox)