SEH(Structured exception hangling)是windows操作系统提供的结构化的异常处理。
以前看到些讲SEH的文章讲的比较抽象,而且多是用API操作,内部机制不清楚,多是讲到使用API SetUnhandledExceptionFilter 加入自已的异常处理过程。今天偶尔在杀毒时看到一段修改SEH的代码,就再看了一遍,才知道了SHE的结构是:
; fs:[0] -> ptr1
; ptr1 [ ptr2 ]
; [ SEH 处理程序1 ]
; ptr2 [ ptr3 ]
; [ SEH 处理程序2 ]
; .
; .
; .
; ptrEnd [ FFFFFFFF ] ;SEH链尾部
; 7C821A60 系统的SE处理程序
分析过程:
原代码:
0040D9C9 |. 68 40DB4000 push <jmp.&MSVCRT._except_handler3> ; SE 处理程序安装
0040D9CE |. 64:A1 0000000>mov eax, dword ptr fs:[0]
0040D9D4 |. 50 push eax
0040D9D5 |. 64:8925 00000>mov dword ptr fs:[0], esp
我用它重写 Hume 大侠的SEH演示程序中的SetUnhandledExceptionFilter
部分内容,用以分析SEH的变化:
;==========================================
; ex. 1,by Hume,2001 演示final型异常处理
;==========================================
.586p
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc ;头部包含文件
include user32.inc
include kernel32.inc
includelib kernel32.lib
includelib user32.lib
.data
szCap db "By Hume[AfO],2001...",0
szMsgOK db "OK,the exceptoin was handled by final handler!",0
szMsgERR1 db "It would never Get here!",0
.code
_start:
push offset Final_Handler
;栈顶情况 0012FFC0 0040103A ;要加入的SEH处理过程入口
;call SetUnhandledExceptionFilte ;这个是原来的,不用了
assume fs:nothing ;这句要加入
;fs:[00000000]=[7FFDE000]=0012FFE0
;0012FFE0 FFFFFFFF SEH 链尾部
;0012FFE4 7C821A60 SE处理程序
mov eax, dword ptr fs:[0]
; eax = 0012FFE0H ;原SEH链的首部
push eax
;栈顶情况 0012FFBC 0012FFE0 ;链接到原SEH链首部
; 0012FFC0 0040103A ;新的SEH处理过程入口
;原情况 7FFDF000 0012FFE0 (指向 SEH 链指针)
mov dword ptr fs:[0],esp
;执得上句之后 7FFDF000 0012FFBC (指向 SEH 链指针) ;新SEH链首部写入,替换掉原来的SEH首部
xor ecx,ecx
mov eax,200
cdq
div ecx ;除0错误
;以下永远不会被执行
invoke MessageBox,0,addr szMsgERR1,addr szCap,30h+1000h
invoke ExitProcess,0 ;30h=MB_ICONEXCLAMATION ;1000h=MB_SYSTEMMODAL
;-----------------------------------------
Final_Handler:
invoke MessageBox,0,addr szMsgOK,addr szCap,30h
mov eax,EXCEPTION_EXECUTE_HANDLER
;==1 这时不出现非法操作的讨厌对话框
;mov eax,EXCEPTION_CONTINUE_SEARCH
;==0 出现,这时是调用系统默认的异常
;处理过程,程序被终结了
;mov ecx,1
;mov eax,EXCEPTION_CONTINUE_EXECUTION
;==-1 不断出现对话框,你将陷入死循环,可
;别怪我
ret
end _start
[课程]FART 脱壳王!加量不加价!FART作者讲授!