结构化异常处理(StructuredExceptionHandling,SEH)是Windows操作系统处理程序错误或异常的技术
。SEH是Windows操作系统的一种系统机制,与特定的程序设计语言无关。
外壳程序里大量地使用了SEH,如果不了解SEH,将会使你跟踪十分困难。
由于Ollydbg 对SEH处理异常灵活,因此脱壳用Ollydbg会大大提高效率。
附CONTEXT结构环境:
[工具]flyod1.10
[目的]学习SEH的手法,另书中是用SoftICE调试的,看起来不习惯.根据原文内容重新整理一下,便于和我一样的菜鸟们一起学习.
今天下决心,好好学习,这是就算是个开始吧!感觉学明白的确很不容易!
[注释]?–为不能理解的地方,请大侠们指点一下.学习过程中,有理解错误的地方,肯请大侠们多多指教.
[练习对象]加密与加密二版第10章,光盘配套的练习软件:seh.exeseh2.exe
[writer] ytcswb 2005.2.1 感谢看学及论坛的大侠们为我们提供这么好的学习资料。
1.例子seh.exe学习:
在看看EXCEPTION_RECORD结构:
我们重点看看0012FCF0+B8=12FDA8
继续跟踪:
继续跟到这段代码里:
[总结]
//读取线性地址0,产生异常
//执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式
//控制权交到操作系统的异常调试程序(exceptiondispatcher),由它负责找到
//处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,
//那么同一个版本的windows就有固定的异常处理代码.跟踪seh保护的程序时,以此为切入点,可以轻而一举地找到关键!
2.例子seh2.exe学习:
发生异常,就来到这里:
看堆栈:
[附录]跟踪到异常处理回调函数的过程:
注:windowsxp-sp1平台.只要是同样平台,就可以按下面步骤,来到系统的异常处理回调函数.
熟悉一下这段代码,应该有好处,当发生异常时,可以快速找到那个callecx异常处理回调函数,从而找到程序自己的异常处理代码。
代码[1]
代码[2]
代码[3]
代码[4]
代码[6]
代码[8]
代码[9]
代码[10]—–这段代码,任何程序只要执行了exitprocess都会看到!留个印象吧!
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/217310.html原文链接:https://javaforall.net
