内存保护机制及绕过方案——从堆中绕过safeSEH
1.1 SafeSEH内存保护机制 1.1.1 Windows异常处理机制 Windows中主要两种异常处理机制,Windows异常处理(VEH、SEH)和C++异常处理。Windows异常处理结构未公开的,包含向量化结构异常VEH及结构化异常处理SEH。由操作系统提供的服务,当一个线程出现错误时,操作系统调用用户定义的一个回调函数_exept_handler。回调函数接收到操作系统传递过来的许多有价值的信息,例如异常的类型和发生的地址。使用这些信息,异常回调函数就能决定下一步做什么。 C++异常处理是C++语言的特性,在Windows平台上由系统提供支持。 Windows异常处理顺序流程 l 终止当前程序的执行 l 调试器(进程必须被调试,向调试器发送EXCEPTION_DEBUG_EVENT消息) l 执行VEH l 执行SEH l TopLevelEH(进程被调试时不会被执行) l 执行VEH l 交给调试器(上面的异常处理都说处理不了,就再次交给调试器) l 调用异常端口通知csrss.exe 1.1.2 SafeSEH工作原理 异常处理链(SEH)结构在通过SHE链绕过/GS中已经介绍过了,这里接直接说safeSEH了, i. SafeSEH工作流程: ii. RtlIsVaildHandler() 函数校验流程: 1.1.3 SafeSEH绕过思路 那么有3种情况