-
-
[原创]脱壳步骤,修复IAT的原因及修复IAT的完整步骤
-
发表于:
2018-5-23 16:01
25402
-
[原创]脱壳步骤,修复IAT的原因及修复IAT的完整步骤
我们已经知道如何定位到OEP了,下一步就是如何脱壳并修复啦。脱壳的步骤是简单的,固定的,而之后如何修复才是我们面临的真正挑战。本问将展示脱壳和修复的完整过程。
调试器:OllyDbg
环境:XP SP3 虚拟机
(一)如何使用LordPE脱壳
首先,修复和脱壳最好都在XP系统的虚拟机里进行。
如何使用LordPE脱壳呢?首先得找到OEP,先让EIP位于OEP。首先用ESP定律定位到OEP。
看上去一点都不像OEP是吧,但是这确实是,之所以会显示字节码,是因为OD误将真正的程序代码分析成数据了。所以显示成一个一个单独的数据
我们只要删除模块分析,就能得到正确的代码,如下图所示。
打开LordPE,打开我们选中目标进程,右键-修正镜像大小,接着右键,点击完整转存(完全脱壳),就脱壳完毕了。
(二)修复IAT的原因
但是这就结束了么?并没有。当我们再次打开它时,它弹出了错误并且退出。显然它无法直接运行。
转存后的程序是无法直接运行的,载入后,到达OEP之前的异常。如图所示。
载入dump后的程序然后F9运行,在执行到
OEP之前就产生了异常。
当异常发生后,手动定位到OEP,看看IAT是否已经填充完毕。下图中有一行
call 00401506 我们就来到401506.如图所示
看得出来,的确是能指向函数本身的。但是我们在数据窗口跟随一下函数首地址,右键,此时已经没有“
查看可执行文件
”这个选项了。
换言之没法查看文件偏移了。此时再用winhex定位到上次的文件偏移。很奇怪它指向的已经不是之前那个数了。
我们再看看字符串还在不在。如果手动定位到原来储存字符的地方(详情阅读上一篇文章),也不在了。因为原来的程序在获取完IAT后就把字符删掉了,文件偏移里的字符串指针没有了,就没法自动获取地址了。所以必须脱壳之后必须把IAT修复好
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2018-5-29 15:45
被r0Cat编辑
,原因: