学习心得-------seh(3)

原创 2004年07月08日 17:03:00

seh(3)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  明天去郊外去春游,心里很兴奋哦。

   上次贴了一段代码,里面的回调函数有一长串参数,现在解释一下:

   _Handler  proc   _lpExceptionRecord,_lpSEH,_lpContext,_lpDispatcherContext

 

   _lpExceptionRecord指向EXCEPTION_RECORD结构。

 

   _lpContext指向一个Context结构。这个结构保存了异常发生的时候所有寄存器的值。这个结构比较常用的字段有regEip。他用来得知异常发生的位置。如果要修正某个寄存器中的错误取值修改这个字段就可以了。

   _lpSEH指向注册回调函数时使用到的EXCEPTION_REGISTRATION结构的地址。如果希望异常处理程序能被封装在子程序里面的话,这个参数必不可少,如果不需要,就没用。

 

 

谈谈展开操作。

 

   什么叫展开?

   展开就是Unwinding。假设出现异常,seh链上有多个回调函数,但是没有一个函数能够处理的话,系统会把每一个回调函数调用一次,这个时候参数中指定的异常代码就是EXCEPTION_UNWIND。

 

好了,我们现在要应用了,SEH可以干什么?这其实是最先应该想到的,我们不可能什么都学,要有所选择。所以这应该是我们看这篇文章的第一个问题。

 

除了可以使我们的程序更加健壮,还可以做一些坏事,例如进入RING0,反跟踪,获得Kernel32的地址等等,这就是我学习seh的目的。我也是最近几天学seh的,在学习过程中我也有很多没明白的地方,希望和大家讨论一下

 

现在我们来预热一下:

CIH将handler指向它自己程序中。在它入口处有如下代码:

                                                                                 

    MyVirusStart:                                             

    ; Ring3代码入口点              

               push    ebp                                             

                                                                                 

    ; *************************************                                         

    ; * Let's Modify Structured Exception *                                         

    ; * Handing, Prevent Exception Error  *                                         

    ; * Occurrence, Especially in NT.     *                                         

    ; *************************************                                          

                                                                                

   lea  eax, [esp-04h*2]

;在栈中分配8字节存放_EXCEPTION_REGISTRATION结构,相当于C中基于栈的数据,即局部变量(C编译器中完成)这样EAX即指向_EXCEPTION_REGISTRATION的指针,但此时_EXCEPTION_REGISTRATION结构未初始化;具体实现机制可翻阅编译原理书籍和Matt Pietrek大师文章

               xor     ebx, ebx                                 

               xchg    eax, fs:[ebx] ;FS:[0]<->EAX

                       ;此时EAX存放的是原来异常处理代码,FS:[0]指向TEB中ExceptionList(FS指向TEB,ExceptionList偏移为0,即FS:[0])

                  call    @0                                              

         @0:                                                                             

               pop     ebx

                          ;此三行计算代码入口,此时ebx就是@0的地址,如果不明白请参看有关病毒的教程             

               lea   ecx, StopToRunVirusCode-@0[ebx]

                          ;将ecx指向自己内部代码处

               push    ecx

                       ;填充_EXCEPTION_REGISTRATION结构的handler

            ;在发生异常时,操作系统会自动调用,此时为CIH代码

                                                                   

               push    eax

                       ;EAX为原来异常处理代码

                       ;填充_EXCEPTION_REGISTRATION结构的prev

 

        .

        .

        .

                                                                         

    这其后CIH调用int 3使系统发生异常,仍能进入自已的代码,   

                        int 3 ;  

int3在破解中就是breakpoint,呵呵,学了一些时候的破解总算能用一下了。

 

 

呵呵,怎么样,是不是觉得也不是很难呢?

在这里,不知道你们有没有一个问题,这个问题从我开始学习cih代码到现在都一直存在,那就是,为什么可以用seh来现进入ring0,seh为实什么可以突破封锁进入ring0呢?我心里模模糊糊有点概念,但是写出来却写不清楚,大家如果谁知道,还请指教哦。

好了,下次我们就要开始令人激动的旅程了。

 

 

学习心得---关于seh(1)

                    关于seh(1)  好久就想写点东西了,无赖自己太懒了。好不容易写了篇进程插入得投了,还被退回来了,郁闷。    天天打游戏,玩奇迹,其实每天我都知道要好好学习...
  • sssa2000
  • sssa2000
  • 2004年07月08日 17:01
  • 947

学习心得----seh(4)

解读cih进入ring0的秘密   看了大家对前面几篇的评论,觉得有点怪异,看来大家对技术的追求还不是那么强烈,声明以下,我写的这些东西或许永远也不会对你的实际应用有帮助,这只是黑客们对技术的研究,如...
  • sssa2000
  • sssa2000
  • 2004年07月08日 17:05
  • 913

学习心得--------关于seh(2)

                          关于seh(2)     by sssa2000 马家爵被捕了,心中极度的痛苦呀。Aaah说我中了毒,mydoom,我下了专杀工具,没发现,现在我变...
  • sssa2000
  • sssa2000
  • 2004年07月08日 17:02
  • 959

SEH学习心得【1】

(近日遇到大量SEH问题,所以觉得有必要好好研究研究。) 一、SEH的汇编实现 从实践入手,汇编实现SEH其实不难。简单点如下指令: push offset_exception_functi...
  • BetaBin
  • BetaBin
  • 2012年03月12日 21:32
  • 1412

掀起你的盖头来——Windows SEH

将浏览器宽度调窄些有利于阅读本文 掀起你的盖头来——Windows SEH SEH(Structured Exception Handling)亦即结构化异常处理,是Windows操作系统提供处理...
  • nlqlove
  • nlqlove
  • 2012年02月23日 20:26
  • 2667

谈SEH( structured exception handling )异常处理

////////////////////////////////////////////////////// 这个跟C++的try-catch异常捕获的两种模式有关。同步模式和异步模式。其中前者不能...
  • ztsinghua
  • ztsinghua
  • 2015年06月05日 16:40
  • 1180

windbg 遍历 seh 链表

1. 手动遍历 0:000> !teb TEB at 7ffdf000     ExceptionList:        001bf100     StackBase:       ...
  • gushiaoke
  • gushiaoke
  • 2012年05月31日 09:38
  • 1670

windows核心编程--SEH(结构异常处理)

SEH 的工作原理。          Windows 程序设计中最重要的理念就是消息传递,事件驱动。当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(...
  • FrankieWang008
  • FrankieWang008
  • 2013年12月18日 09:55
  • 1167

Windows的SEH机理简要介绍

1.异常分类 一般来说,我们把Exception分为2类,一类是CPU产生的异常,我们称之为CPU异常(或者硬件异常)。另一类为是通过调用RaiseException API产生的软件异常,我们...
  • swanabin
  • swanabin
  • 2013年11月19日 15:46
  • 1450

堆溢出(DwordShoot)利用SEH异常处理

异常处理的身影处处可见,最常见的处理方式就是当异常发生时,在异常处理模块中记录日志,便于程序员事后定位。但是,被异常处理包含的代码真的会在异常发生时让程序优雅的退出吗?在程序的世界里什么都可能发生,所...
  • lixiangminghate
  • lixiangminghate
  • 2016年11月25日 00:20
  • 568
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习心得-------seh(3)
举报原因:
原因补充:

(最多只允许输入30个字)