加密的IAT怎么修复
找到oep后,还有一部分的IAT被加密了想问下怎么得到这部分的IAT
能够找到OEP
脱壳后,程序无法运行
IAT没有显示全部
附件
本帖最后由 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:}
意会一下吧~
iat表直接复制过去就修复了(当然要还是要复制几次)
页:
[1]