脱壳时快速定位“最后一次异常”的方法

 


文件名称:脱壳时快速定位“最后一次异常”的方法
编写作者:Coderui
编写时间:2008年05月02日
联系方式:[email protected]
作者博客:http://hi.baidu.com/coderui
---------------------------------------------------------------------
我总结出两种可以交替使用的定位“最后一次异常”的方法,这些方法可以帮助我们在脱壳时提高一定的速度,现在分享给大家!

方法一(试用环境为:壳中只存在10次以内的异常):
设置OD为不忽略任何异常,接着载入加壳程序并按[F9]运行,遇到异常我们就使用[Shift+F9]来忽略异常并继续运行它,直到程序完全运行起来为止。这时,我们记录下一共手动忽略过多少次异常,然后重新载入本程序,[F9]运行并快速使用[Shift+F9]来忽略N-1(假设异常的总次数为N)次异常就到最后一次异常的位置了。现在,我们看寄存器就可以找到最后一处异常处理代码的入口地址了。

方法二(试用环境为:壳中的异常次数不受限制):
设置OD为忽略任何异常,接着载入加壳程序并按[F9]运行。当程序完全运行起来以后,我们查看OD的“运行记录”,这个“记录”会按异常出现的顺序把它完整的显示出来。这时,我们可以根据如下公式来快速的定位到最后一处异常处理位置。
1、内存访问异常-INT3异常-内存访问异常-INT3异常-无效或特权指令异常 = 设置OD除“无效或特权指令异常”不忽略以外,其它异常全部忽略,按[F9]运行就直接定位到最后一处异常了。
2、内存访问异常-INT3异常-内存访问异常-INT3异常 = 设置OD除“INT3异常”不忽略以外,其它异常全部忽略,按[F9]运行后,使用一次[Shift+F9]就直接定位到最后一处异常了。
3、内存访问异常-INT3异常-内存访问异常 = 设置OD除“内存访问异常”不忽略以外,其它异常全部忽略,按[F9]运行后,使用一次[Shift+F9]就直接定位到最后一处异常了。
4、内存访问异常-内存访问异常-INT3异常-内存访问异常-内存访问异常-内存访问异常-INT3异常 = 设置OD除“INT3异常”不忽略以外,其它异常全部忽略,按[F9]运行后,使用一次[Shift+F9]就直接定位到最后一处异常了。
5、内存访问异常-INT3异常-无效或特权指令异常-内存访问异常-无效或特权指令异常-INT3异常 = 设置OD除“INT3异常”不忽略以外,其它异常全部忽略,按[F9]运行后,使用一次[Shift+F9]就直接定位到最后一处异常了。
6、内存访问异常(N次)-INT3异常-无效或特权指令异常-内存访问异常(N次)-无效或特权指令异常(N次)-INT3异常(N次)-无效或特权指令异常 = 设置OD除“INT3异常”不忽略以外,其它异常全部忽略,按[F9]运行后,使用一次[Shift+F9],设置OD除“无效或特权指令异常”不忽略以外,其它异常全部忽略,再使用一次[Shift+F9]就直接定位到最后一处异常了。
7、类推(根据日志中记录异常的结构来恰当的设置并更换不同异常的忽略,可以在脱壳时减轻很多工作量。)……………………

需要注意的细节问题:
1、方法一只适合壳中只存在少量异常的情况下来使用,不然手会被累抽筋的。
2、要保证异常是壳中产生的,而不是程序内部代码所产生的。

你可能感兴趣的:(脱壳时快速定位“最后一次异常”的方法)