SEH】的更多相关文章

#!/usr/bin/python # Exploit Title: Kingsoft Office Writer v2012 8.1.0.3385 .wps Buffer Overflow Exploit (SEH) # Version: 2012 8.1.0.3385 # Date: 2013-11-27 # Author: Julien Ahrens (@MrTuxracer) # Homepage: http://www.rcesecurity.com # Software Link:…
25.1 UnhandledExceptionFilter函数详解 25.1.1 BaseProcessStart伪代码(Kernel32内部) void BaseProcessStart(PVOID lpfnEntryPoint) //参数为线程函数的入口地址 { DWORD retValue; DWORD currentESP; DWORD exceptionCode; currentESP = ESP; //lpfnEntryPoint被try/except封装着,这是系统安装的默认的异常…
24.1  程序的结构 (1)try/except框架 __try{ //被保护的代码块 …… } __except(except fileter/*异常过滤程序*/){ //异常处理程序 } (2)说明 ①当__try块中的代码发生异常时,__except()中的过滤程序就被调用. ②过滤程序可以是一个简单的表达式或一个函数(返回值应为EXCEPTION_CONTINUE_SEARCH.EXCEPT_CONTINUE_EXECUTE或EXCEPT_EXECUTE_HANDLER之一) ③过滤表…
23.3 终止处理程序 23.3.1 程序的结构 (1)框架 __try{ //被保护的代码块 …… } __finally{ //终止处理 } (2)__try/__finally的特点 ①finally块总是保证,无论__try块中的代码有无异常,finally块总是被调用执行. ②try块后面只能跟一个finally块或except块,要跟多个时只能用嵌套,但__finally块不可以再嵌套SEH块,except块中可以嵌套SEH块. ③利用try/finally可以使代码的逻辑更清楚,在…
23.2 编译器层面对系统SEH机制的封装 23.2.1 扩展的EXCEPTION_REGISTRATION级相关结构:VC_EXCEPTION_REGISTRATION (1)VC_EXCEPTION_REGISTRATION结构 struct VC_EXCEPTION_REGISTRATION { VC_EXCEPTION_REGISTRATION* prev; //前一个结构体的指针 FARPROC handler; //永远指向_exception_handler4回调函数 scopet…
23.1 基础知识 23.1.1 Windows下的软件异常 (1)中断和异常 ①中断是由外部硬件设备或异步事件产生的 ②异常是由内部事件产生的,可分为故障.陷阱和终止三类. (2)两种异常处理机制:SEH和VEH(WindowsXP以上新引进) (3)结构化异常处理(SEH)是Windows操作系统提供的强大异常处理功能.而Visual C++中的__try{}/__finally{}和__try{}/__except{}结构本质上是对Windows提供的SEH的封装. 23.1.2 SEH的…
目录 . 相关阅读材料 . <加密与解密3> . [经典文章翻译]A_Crash_Course_on_the_Depths_of_Win32_Structured_Exception_Handling.pdf . < DAY安全: 软件漏洞分析技术> 2. 数据结构分析 二. KTHREAD KTHREAD(内核层线程对象).再次重复说明一点: windows内核中的执行体(ETHREAD, EPROCESS) 负责各种与管理和策略相关的功能,而内核层(或微内核)(KTHREAD,…
windows 提供的异常处理机制实际上只是一个简单的框架.我们通常所用的异常处理(比如 C++ 的 throw.try.catch)都是编译器在系统提供的异常处理机制上进行加工了的增强版本.这里先抛开增强版的不提,先说原始版本.     原始版本的机制很简单:谁都可以触发异常,谁都可以处理异常(只要它能看得见).但是不管是触发还是处理都得先注册.系统把这些注册信息保存在一个链表里,并且这个链表保存在线程的数据结构里.也就是说,异常所涉及的一些行为都是线程相关的.比如,线程 T1 触发的异常就只…
如果一个函数内使用了异常处理机制, VC 编译器在编译该函数时,它会给此函数插入一些“代码和信息”(代码指的是当该函数中出现异常时的回调函数,而信息主要是指与异常出现相关的一些必要的链表),因此每份函数只能有一份这样的东东(“代码和信息”),故一个函数只能采用一种形式的异常处理规则. 上图中黄色部分就是新添加的异常信息,通过stack unwinding来实现局部变量的析构函数自动调用.所以在析构函数中不能抛出异常(http://publib.boulder.ibm.com/infocenter…
下面的代码出自CSDN Delphi版的一高人(kiboisme 蓝色光芒) procedure ExceptProc{ExceptionRecord,SEH,Context,DispatcherContext};assembler; asm MOV EAX , [ESP+] MOV EAX.TContext.Eip , Offset @@ExceptDone MOV EAX , RET $; @@ExceptDone: XOR EAX , EAX MOV ESP , FS:[EAX+$] PO…