-
Seh异常原理和利用
2006年06月07日
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
文章题目:Seh异常原理和利用
http://milw0rm.blogbus.com/logs/2618034.html
作者 :兽人
日期 :2006/05/07
目的 :Seh异常在花指令里的应用
www.8way.be首发
定义:
Seh异常就是数结构化异常处理,Win32 结构化异常处理是操作系统提供的一种服务。
在编译器的 SEH 层减少了直接使用纯操作系统的 SEH 所带来的危害的同时,也将纯
操作系统的 SEH 从大家的面前隐藏了起来。
但程序遇到Seh异常时,异常交给系统处理(这将是一个非常负责的过程,很容易跟飞),所以利用Seh异常可以一定程度的防止程序被调试。(seh异常在壳里是很常见的)
原理:
异常的基本过程(个人理解是这样):
我们来看两个实例
实例文件下载
push 00401051 //地址00401051压入堆栈
push dword ptr fs:[0] //fs[0]压入堆栈,执行完成后,fs[0]指向栈顶
mov dword ptr fs:[0],esp //构造1个err结构
mov esi,0 //简单的赋值语句
mov eax,dword ptr ds:[esi] //产生异常
(OD中异常后,按shift+F8继续运行)
------系统处理(非常复杂,可以自己跟跟看)-----------
若要跟踪,先在A地址下断点
执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式
控制权交到操作系统的异常调试程序(exception dispatcher),由它负责找到
处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,
同一个版本的windows有固定的异常处理代码.
------跳到地址A--------------------------------------
lea eax,dword ptr ss:[esp-8] //开辟8字节的空间,并把栈顶指针保存到eax
xchg dword ptr fs:[0],eax //执行完成后,fs[0]指向栈顶,eax等于原fs[0]
mov ebx,0040102B //地址ebx=0040102B
push ebx //ebx压入堆栈,即地址0040102b
push eax //fs[0]压入堆栈
mov esi,0 //简单的赋值语句
mov eax,dword ptr ds:[esi] //读取线性地址0,产生异常
(OD中异常后,按shift+F8继续运行)
------系统处理(非常复杂,可以自己跟跟看)-----------
若要跟踪,先在A地址下断点
执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式
控制权交到操作系统的异常调试程序(exception dispatcher),由它负责找到
处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,
同一个版本的windows有固定的异常处理代码.
------跳到地址A--------------------------------------
利用:
看了以上这些,我们知道,通过这一下段Seh异常代码,我们可以防止
他人跟踪,并跳到地址A(这点最重要)继续执行。我们可以把它当作jmp来使用,
具体的应用就看你们自己自由发挥了。
其他几个Seh异常代码(异常后跳到地址:********)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
mov esi,0
mov eax,dword ptr ds:[esi]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
mov ebx,0
div ebx
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
nop
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
int 3
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
nop
int 68
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
nop
vxdcall 134543
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
push ********
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
实例文件下载随机文章:
难得糊涂 2009年11月04日关于Realplayer牛X版网页木马生成器 2006年05月28日再谈FSG脱壳 2006年05月21日bin2txt 1.0 2006年05月20日Log Cleaner V0.1 By noname 2006年05月20日
收藏到:Del.icio.us







