C++ VEH 异常 实现 Shellcode Loader

C++ VEH 异常 实现 Shellcode Loader - 侠者安全社区
C++ VEH 异常 实现 Shellcode Loader
此内容为付费阅读,请付费后查看
会员专属资源
您暂无购买权限,请先开通会员
开通会员
付费阅读

0x0 基础知识

00 原理

  • VEH 的中文名字: 向量化异常处理(Vectored Exception Handling)
  • VEH 最早出现在XP上 因为只有XP及以上Window版本才支持。目前 Windows 平台下实现和使用的异常处理机制主要有 4 种:筛选器异常处理,结构化异常处理 (Structure Exception Handler, SEH),向量化异常处理(Vectored Exception Handler, VEH),C++异常处理(C++ Exception Handler, C++EH)。其中 前三种为操作系统提供的异常处理机制,最后一种为C++提供的
  • VEH通过使用 Win32 API 函数 AddVectoredExceptionHandler 可注册新的异常处理函数,函数的参数就是指向 EXCEPTION_POINTERS 结构的指针。同时,增加了函数地址的注册处理程序链表。由于系统中使用一个链表来存储矢量异常处理程序,程序可以安装尽可能多的向量处理器,只要有必要。
  • 在用户模式下发生异常时,异常处理分发函数在内部会先调用遍历 VEH 记录链表的函数, 如果没有找到可以处理异常的注册函数,再开始遍历 SEH 注册链表。
  • 二者之间具体联系:VEH优先权高于SEH,只有所有VEH全不处理某个异常的时候,异常处理权才会到达SEH。只要目标程序中没有利用VEH,那么,你所设计的VEH将是第一个得到控制者。现在采用SEH作为异常处理的普通C/C++++程序对你将不会再有干扰,可以通过使用VEH来进行hook处理了。如果存在调试器,那么控制权转向将会发生新的变化。当异常发生后,首先通知的将会是调试器,调试器不处理才会再返回控制权给VEH;如果VEH不处理,再返回给SHE;若SEH不处理,再给调试器一个机会,如果还不处理,则交由系统处理。

01 文档

AddVectoredContinueHandler 函数 (errhandlingapi.h) – Win32 apps | Microsoft Learn

0x1 实现代码

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情

    暂无评论内容