开发学院网络安全黑客技术 SEH 结构化异常处理(1) 阅读

SEH 结构化异常处理(1)

 2007-01-14 20:14:43 来源:WEB开发网   
核心提示: //读取线性地址0,产生异常//执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式//控制权交到操作系统的异常调试程序(exceptiondispatcher),由它负责找到//处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,//那么同一

//读取线性地址0,产生异常

//执行后,windows检查到异常,执行线程马上被中段,从用户模式转到内核模式

//控制权交到操作系统的异常调试程序(exceptiondispatcher),由它负责找到

//处理这个异常的方法,即所有应用程序的异常最终都是由windwos来处理的,

//那么同一个版本的windows就有固定的异常处理代码.跟踪seh保护的程序时,以此为切入点,可以轻而一举地找到关键!

2.例子seh2.exe学习:

00401000>/$ 6851104000 pushseh2.00401051           ; SEhandlerinstallation发生异常后到这里执行
                                  //看学强调:提前在这个handler设个断点,否则程序容易跑飞!
                                  //只有这样才能正常跟进seh处理代码!
00401005 |. 64:FF3500000>pushdwordptrfs:[0]
0040100C |. 64:892500000>movdwordptrfs:[0],esp        //构造1个err结构
0012FFBC 0012FFE0 指针到下一个SEH记录//fs:[0]=esp=0x0012FFBC
0012FFC0 00401051 SE句柄
0012FFE0 FFFFFFFF SEH链尾部
0012FFE4 77E74809 SE句柄
00401013 |. BE00000000 movesi,0
00401018 |. 8B06     moveax,dwordptrds:[esi]//产生异常
//这里实际是故意引发一个异常,为的就是通过修改CONTEXT,来实现反跟踪及改变程序流程(设置暗桩吗?)
0040101A |. 6A00    push0                 ;/Style=MB_OK|MB_APPLMODAL
0040101C |. 6800304000 pushseh2.00403000           ;|Title="SEH"
00401021 |. 680F304000 pushseh2.0040300F           ;|Text="SEH程序没有运行"
00401026 |. 6A00    push0                 ;|hOwner=NULL
00401028 |. E857000000 call<jmp.&USER32.MessageBoxA>     ;MessageBoxA
0040102D |. 6A00    push0                 ;/Style=MB_OK|MB_APPLMODAL
0040102F |. 6800304000 pushseh2.00403000           ;|Title="SEH"
00401034 |. 6804304000 pushseh2.00403004           ;|Text="Hello,SEH!"
00401039 |. 6A00    push0                 ;|hOwner=NULL
0040103B |. E844000000 call<jmp.&USER32.MessageBoxA>     ;MessageBoxA
00401040 |. 64:8F0500000>popdwordptrfs:[0]
00401047 |. 83C404   addesp,4
0040104A |. 6A00    push0                 ;/ExitCode=0
0040104C . E839000000 call<jmp.&KERNEL32.ExitProcess>    ;ExitProcess
00401051 /$ 55      pushebp                ; Structuredexceptionhandler
00401052 |. 8BEC     movebp,esp
00401054 |. 53      pushebx
00401055 |. 8B4510   moveax,dwordptrss:[ebp+10]
00401058 |. 8D1D2D104000leaebx,dwordptrds:[40102D]
0040105E |. 8998B8000000movdwordptrds:[eax+B8],ebx
00401064 |. 33DB     xorebx,ebx
00401066 |. 895804   movdwordptrds:[eax+4],ebx
00401069 |. 895808   movdwordptrds:[eax+8],ebx
0040106C |. 89580C   movdwordptrds:[eax+C],ebx
0040106F |. 895810   movdwordptrds:[eax+10],ebx
00401072 |. C7401855010>movdwordptrds:[eax+18],155
00401079 |. B800000000 moveax,0
0040107E |. 5B      popebx
0040107F |. C9      leave
00401080 . C21000   retn10
00401083   CC      int3

发生异常,就来到这里:

上一页  1 2 3 4 5 

Tags:SEH 结构化 异常

编辑录入:爽爽 [复制链接] [打 印]
[]
  • 好
  • 好的评价 如果觉得好,就请您
      0%(0)
  • 差
  • 差的评价 如果觉得差,就请您
      0%(0)
赞助商链接