type
status
date
slug
summary
tags
category
icon
password
在github偶然发现的一个项目,详细研究了其中原理
‣
手动映射DLL和驱动的时候,通常不支持SEH异常处理,这种方法用来实现SEH。
routine是要执行的函数地址。
用push qword ptr[r10]伪造一个返回地址,到PocAddr。比如下图,以180026A43作为这一地址。原理是Seh特性,只要返回地址在异常表记录范围内,Windows就会正常处理seh,把ip修改回到Handler的地址,只要找到Handler代码是直接返回的函数就能实现任意使用seh

这里except(1)是异常可以被识别会被处理所有异常都会到这里来,直接把eax写1然后返回了。但如果正常返回到返回地址,则是xor eax eax清空eax再返回。因此后续通过cmp eax,0判断是否触发了异常处理即可。
内核的原理是一样的,KdpSysWriteMsr

- Author:Lynnette177
- URL:https://next.lynnette.uk/article/seh_in_manualMap
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!