学习:脱壳之壳常用函数寻找OEP

参考文章:https://bbs.pediy.com/thread-226716.htm

壳最常见的三个函数,GetProcAddress,LoadLibrary,ExitTherad。前2个肯定用到,最后一个未必。

1、依然使用特殊OD导入,因为该OD特殊在能给代码段设置内存执行断点,首先配置OD:忽略所有异常。

2、因为没有command窗口,不能使用命令下断。于是我们Ctrl+G输入函数的名称 GetProcAddress 后,在段首设置条件记录断点。在expression里填写[esp],也就是记录函数的返回地址。我们记录下返回地址。壳代码最后一次调用,其返回地址就是离OEP很近的地方

3、我们要找的是壳代码的最后一次调用,并非程序的最后一次调用。通过观察 GetProcAddress 的返回地址在哪个区段,可以判断在执行壳代码还是程序代码。下面红标,第一处是壳代码区段的最后一次调用,后面是代码段的第一次调用

4、同时,它一定在程序入口点之后发生,也许在最后一次异常的附近。思路有了,怎么才能断在壳代码最后一次调用处呢?借助条件记录断点。

5、点击F9运行,之后在.text代码段设置内存访问断点(特殊OD里等价于执行断点),重复调用导致系统反复返回到这里。一直不松手按住F9,直到反汇编窗口有变动,最后从模块中分析代码,发现到达OEP了

原文地址:https://www.cnblogs.com/zpchcbd/p/12101513.html