论坛: 黑客进阶 标题: 溢出之seh笔记 复制本贴地址    
作者: bei [bei]    论坛用户   登录
原创:
seh工作原理就是预先设置好处理异常的函数,然后如果有异常,就执行异常处理函数
    首先,要使用seh必须先设置处理异常的回调函数。

怎么设置?
3句:

      把回调函数的地址入栈  push offset _handler
      把fs:[0]入栈          push fs:[0]
      把esp存入fs:[0]      mov fs:[0],esp


这就要说说tib了。
    win32为每个线程定义一个线程信息块tib,这个结构中有一个
    Exceptionlist的指针,它是seh的链入口。

    这个指针指向一个EXCEPTION_REGISTRATION结构,定义如下:
    EXCEPTION_REGISTRATION STRUCT
    prev dd ?      ;前一个EXCEPTION_REGISTRATION的地址
    handler dd ?    ;回调函数的地址
    EXCEPTION_REGISTRATION ENDS

有了这个结构才能把很多seh联结成链状

以上是基本结构

由于tib永远载fs:[0] 所以,fs[0]指向的就是Exceptionlist指向的东西,也就是EXCEPTION_REGISTRATION。
push fs:[0]  把fs:[0]入栈,这时候esp会指向压入的东西, [esp]就是这个EXCEPTION_REGISTRATION的地址。
这个时候,[esp+0]就是prev字段 [esp+4]是回调函数的地址
   
fs:[0]就是prev

进入RING0,反跟踪,获得Kernel32的地址等等,这就是我学习seh的目的
对于我还可以溢出跳转





[此贴被 bei(bei) 在 07月24日01时42分 编辑过]


[此贴被 bei(bei) 在 07月24日01时43分 编辑过]


[此贴被 bei(bei) 在 07月24日01时43分 编辑过]

地主 发表时间: 04-07-24 01:41

回复: upxshell [kuangren]   论坛用户   登录


B1层 发表时间: 04-08-09 00:02

论坛: 黑客进阶

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号