十月 发表于 2015-10-18 11:47

加密的IAT怎么修复

找到oep后,还有一部分的IAT被加密了
想问下怎么得到这部分的IAT

能够找到OEP

脱壳后,程序无法运行



IAT没有显示全部



附件


ssmlly 发表于 2015-10-18 11:47

本帖最后由 ssmlly 于 2015-10-18 17:37 编辑

这个属于IAT被重定向。
具体先来看看是什么情况吧!

脱壳后,来到OEP,可以看到下面有一个call ,本来这个地方应该是直接call一个win32 API的才对,那么就跟进这个call里面看看做了什么



跟进去后如下:


发现jmp下面一定的代码混淆,继续单步一下,就到了下图:
仔细看,首先call 00A80056,相当于push 00A8004B+jmp 00A80056
然后执行mov语句,接着ret,由于之前有push 00A8004B,故ret到00A8004B处
接着执行两条语句,jmp到了00A8005E处
最后才是关键代码,先将eax赋值,然后eax+1,再利用push + ret的手法执行了kernel32.GetVersion,也就是说,在eax赋值之前的一顿操作并没有什么卵用


以上,就是IAT的重定向,你可以在OEP处查看所有模块间调用,可以看到绝大部分做了重定向


解决方法:
1.辛勤耕耘100年法{:5_121:}
既然能通过简单跟踪就知道了真正API的地址(上面那个例子就是 = = 0x7C6A7281)
那么。。。一个一个这样找到,然后手动输入到ImpRec里面就好,实际上这些API真实地址肯定是挨着的(可以查看一下0xA8148B,发现连着一大片都是真正的API地址)


2.不造轮子直接上插件法{:5_185:}
实际上就是一个tElock 0.98的壳嘛。。。很老了,有插件直接修复的

然后你懂得


3.目害逆向分析法
听说只有大神才能利用此法{:5_188:}

逆向壳的解密流程,肯定会有一个过程是将IAT重定向,这个过程分析起来肯定很虐心,但是分析出来之后呢,将IAT重定向patch成直接mov的过程即可
举个栗子:




好麻烦还是不举了{:5_186:}
意会一下吧~

凌云 发表于 2015-10-18 19:49


iat表直接复制过去就修复了(当然要还是要复制几次)


页: [1]
查看完整版本: 加密的IAT怎么修复