WEB开发网
开发学院网络安全黑客技术 SEH in ASM 研究(一) 阅读

SEH in ASM 研究(一)

 2007-01-14 20:14:54 来源:WEB开发网   
核心提示: (THREAD INFORMATION BLOCK),这个结构的第一个元素fs:[0]指向一个_EXCEPTION_REGISTRATION结构后面_EXCEPTION_REGISTRATION为了简化,用ERR来代替这个结构...不要说没见过啊...fs:[0]->_EXCEPTI

(THREAD INFORMATION BLOCK),这个结构的第一个元素fs:[0]指向一个_EXCEPTION_REGISTRATION结构

后面_EXCEPTION_REGISTRATION为了简化,用ERR来代替这个结构...不要说没见过啊...

  fs:[0]->
  _EXCEPTION_REGISTRATION struc
  prev dd ?           ;前一个_EXCEPTION_REGISTRATION结构
  handler dd ?         ;异常处理例程入口....呵呵,现在明白该怎么作了吧
  _EXCEPTION_REGISTRATION ends

我们可以建立一个ERR结构然后将fs:[0]换成指向他的指针,当然最常用的是堆栈,如果你用静态内存区也可以,没有人阻止你在asm世界,放心地干吧,除了多S几次之外,通常不会有更大的损失把handler域换成你的程序入口,就可以在发生异常时调用你的代码了,好马上实践一下,见例子2

;//========================================================================
;// ex. 2,by Hume,2001 线程相关的异常处理
;//========================================================================
.386
.model flat, stdcall
option casemap :none ; case sensitive
include hd.h     ;//相关的头文件,你自己维护一个吧
;//============================
.data
szCap  db "By Hume[AfO],2001...",0
szMsgOK db "It's now in the Per_Thread handler!",0
szMsgERR1 db "It would never Get here!",0
buff  db 200 dup(0)
.code
_start:
;//========prog begin====================
 ASSUME FS:NOTHING
    push  offset perThread_Handler
  push  fs:[0]  
    mov  fs:[0],esp           ;//建立SEH的基本ERR结构,如果不明白,就仔细研究一下吧
    xor  ecx,ecx            
    mov  eax,200  
    cdq
  div  ecx
                         ;//以下永远不会被执行
    invoke  MessageBox,NULL,addr szMsgERR1,addr szCap,MB_OK+MB_ICONINFORMATION
    pop  fs:[0]
    add  esp,4
    invoke  ExitProcess,NULL   
;//============================
perThread_Handler:
    invoke  MessageBox,NULL,addr szMsgOK,addr szCap,MB_OK+MB_ICONINFORMATION
    mov  eax,1     ;//ExceptionContinueSearch,不处理,由其他例程或系统处理
    ;mov  eax,0     ;//ExceptionContinueExecution,表示已经修复CONTEXT,可从异常发生处继续执行
  ret            ;//这里如果返回0,你会陷入死循环,不断跳出对话框....
;//=============================Prog Ends==============
end _start
COMMENT $
 嘿嘿,这个简单吧,我们由于没有足够的资料,暂时还不能修复ecx的值使之从异常发生处继续执行,只是简单显示一个MSG,然后让系统处理,自然跳出讨厌的对话框了....
 注意和final返回值的含义不同...
$
;//==================================================================================================

好像到此为止,我们并没有从异常处理中得到任何好处,除了在异常发生后可以执行一点我们微不足道的代码,事实上SEH可以修复这些异常或者干我们想干的事情然后从希望的地方继续执行,嘿嘿,很爽吧,可惜我们没有足够的信息,那里找到我们所需要的信息? 欲知后事如何,且看下回分解...

上一页  1 2 3 4 5 6 7  下一页

Tags:SEH in ASM

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接