【文章标题】: 说说处理加密IAT的一种常用方法
【文章作者】: wynney
【下载地址】: 打包下载
【作者声明】: 凑热闹~^_^
--------------------------------------------------------------------------------
【详细过程】
零、前言
在论坛上看到很多朋友说一些教程看不懂,需要多讲一些原理,抽点空写了这篇文章,大侠飘过:)
一、引述
在讲述这个方法之前,我们先看一个实例,壳子是CrypToCrackPeProtector 0.93的,最后一个区段名是.ccp3p。它加密
的软件的输入表是加密了的,算是一个简单的加密壳了。
忽略所有异常
??
??
我们先在.rsrc区段F2,F9,再在.text段F2,F9,就到OEP了
??
我们需要找到,IAT加密的地方
重新加载目标程序,命令行DD 460ADC,下内存访问断点,F9几次
??
??
可以看到eax里才是真正的IAT了,把edi改成eax,然后到00401000段下断,F9,到达OEP
IAT全部都恢复了:)
二、PELock 1.0x
前面看了之后,大家应该明白点了,这是最基本的IAT加密法子,从中我们也可以看到最基本的IAT处理法子
但是,有很多壳有壳校验或内存校验,例如:PELock
我们用上面的方法,再入PELock.exe程序,F9,Alt+E,双击目标程序所在行,Ctrl+B:FF 25
??
重新加载目标程序,DD 4031E4,下内存访问断点,几次F9
??
??
eax里才是真正的IAT,ebx里是壳的地址。
那么我们把ebx改成eax,F9运行看看,出现错误:(
那么我们再来看一次,看看是那里出错,改了ebx之后,一路F8,F7交替走
??
看来00034351处就是CrC校验的地方了
我们解决他的法子有2个,这里说个简单的法子吧
同时对00034661和00034351下内存断点,运行到00034661后把eax改成ebx,F9运行到00034351马上又把ebx改成eax,
如此往替,所有的IAT就都修复完了,这个操作如果手动的确是麻烦,呵呵,用脚本吧?
三、ASProtect 1.31
说下两个分支的处理
????
??
IAT处理完毕,撤消修改,以免后面出现内存保护错误
四、ASProtect 2.0 Alpha
两个分支的处理
????
????
自己Patch代码
??
IAT处理完毕,最好是撤消修改,以免后面出现内存保护错误
五、MoleBox
上面我们说的都是比较明显的加密IAT,现在来看个不明显的
MoleBox这个就不用多说了,很容易到达OEP,我们看看IAT表,部分IAT是加密的
??
重新加载程序,DD 637504,下内存访问断点,几次F9
??
??
he 00715B6F
重载,F9,中断下来后F7,跟踪发现
??
我们把Magic Jump改成jmp之后IAT不再加密:)
这里需要说明的是,这个法子跟我原先的文章里的法子是不一样的,但是可以达到相同的效果
于是,我们可以写个脚本
--------------------------------------------------------------------------------
【经验总结】
1、若有的壳有内存访问断点校验,可以换用内存写入断点,或者是硬件访问/写入断点
2、如果不是很明显的寄存器填充,那么一般IAT加密就在附近,多跟踪下:)
3、很多时候,并不是单纯的修改可以解决的,需要自己Patch代码,多了解下汇编吧,这个是别人教不会的
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年04月14日 wynney