|
![]() | 作者: 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号