VEH HOOK

发布时间:2026/9/27 6:46:05

VEH HOOK 相关函数我们只需要用到 AddVectoredExceptionHandler 设置VEH异常捕获PVOID WINAPIAddVectoredExceptionHandler(_In_ ULONG FirstHandler,_In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler);ULONG WINAPIRemoveVectoredExceptionHandler(_In_ PVOID Handler);PVOID WINAPIAddVectoredContinueHandler(_In_ ULONG FirstHandler,_In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler);ULONG WINAPIRemoveVectoredContinueHandler(_In_ PVOID Handler);设置异常捕获后我们的callback就能处理异常_EXCEPTION_POINTERS 可以获得ExceptionRecordExceptionRecord中还有异常代码(ExceptionCode)和异常地址(ExceptionAddress)VEH HOOK原理1.将需要HOOK的函数入口内容改为0xcc中断如果你不了解中断向量表和int软中断你可以理解为设置了个断点这样运行时就会产生异常2.由我们的异常处理函数捕获后修改寄存器的值(原参数)然后将异常地址指令修改回原值设置TF单步返回EXCEPTION_CONTINUE_EXECUTION程序重新执行正确指令并且由于设置了TF程序可以在下一条指令继续进入异常处理3.在单步异常捕获中继续将上一条HOOK地址指令改回0xcc这样下次进入又会断下来让我们改参数注意这里的例子没有考虑多线程竞争。下面是个DLL你需要自己手动在DLL_PROCESS_ATTACH时运行VEH_HOOK_MessageBoxA();编译后随便写个EXE载入DLL调用MessageBoxA试试吧// Dll.cpp : 定义 DLL 应用程序的导出函数。//// Dll.cpp : 定义 DLL 应用程序的导出函数。//#includestdafx.h#includeDll.h#includestdio.h#defineBREAKPOINTLEN1PVOID MessageBoxA_Addr;BYTE MessageBoxA_New_INT;BYTE MessageBoxA_Ole_INT;DWORD dwNewProtectPAGE_EXECUTE_READWRITE;DWORD dwOldProtect;charlpText[]修改内容;LONG NTAPICALL_MessageBoxA(struct_EXCEPTION_POINTERS*ExceptionInfo){printf_s(异常地址 %p EIP %lx\r\n,ExceptionInfo-ExceptionRecord-ExceptionAddress,ExceptionInfo-ContextRecord-Eip);if(ExceptionInfo-ExceptionRecord-ExceptionCodeEXCEPTION_BREAKPOINT)//判断异常类型是否是断点{PVOID addrExceptionInfo-ExceptionRecord-ExceptionAddress;//获得异常地址if(addrMessageBoxA_Addr){//修改参数*(int*)((ExceptionInfo-ContextRecord-Esp)0x8)(int)lpText;*(int*)((ExceptionInfo-ContextRecord-Esp)0xc)(int)lpText;//DWORD EFlags ExceptionInfo-ContextRecord-EFlags;ExceptionInfo-ContextRecord-EFlags|0x100;//TF//恢复代码VirtualProtect((void*)addr,BREAKPOINTLEN,dwNewProtect,dwOldProtect);*(BYTE*)(addr)MessageBoxA_Ole_INT;//把首个字节地址改回去VirtualProtect((void*)addr,BREAKPOINTLEN,dwOldProtect,dwNewProtect);returnEXCEPTION_CONTINUE_EXECUTION;}returnEXCEPTION_CONTINUE_SEARCH;}if(ExceptionInfo-ExceptionRecord-ExceptionCodeSTATUS_SINGLE_STEP){//TF触发继续改成0xccULONG32 addr(ULONG32)ExceptionInfo-ExceptionRecord-ExceptionAddress;//获得异常地址if(addr(ULONG32)MessageBoxA_Addr8addr(ULONG32)MessageBoxA_Addr){VirtualProtect((void*)MessageBoxA_Addr,BREAKPOINTLEN,dwNewProtect,dwOldProtect);*(BYTE*)(MessageBoxA_Addr)0xcc;//把首个字节地址改回去VirtualProtect((void*)MessageBoxA_Addr,BREAKPOINTLEN,dwOldProtect,dwNewProtect);returnEXCEPTION_CONTINUE_EXECUTION;}returnEXCEPTION_CONTINUE_SEARCH;}returnEXCEPTION_CONTINUE_SEARCH;}voidVEH_HOOK_MessageBoxA(){AddVectoredExceptionHandler(0,CALL_MessageBoxA);//设置VEH异常捕获//AddVectoredExceptionHandler(1, HOOK_MessageBoxA); 如果设置了这个他永远无法恢复被HOOK的东西了因为刚恢复完又被这个改成CC然后无限循环//如果想在HOOK后继续下CC断点我觉得可以使用beginthread和Interlocked 判断是否被恢复被恢复执行完后再改成cc即可MessageBoxA_Addr(PVOID)MessageBoxA;//MessageBoxA地址MessageBoxA_Ole_INT*(BYTE*)MessageBoxA_Addr;//MessageBoxA 首个字节VirtualProtect((void*)MessageBoxA_Addr,BREAKPOINTLEN,dwNewProtect,dwOldProtect);*(BYTE*)(MessageBoxA_Addr)0xcc;//首个字节内容改成CC断点VirtualProtect((void*)MessageBoxA_Addr,BREAKPOINTLEN,dwOldProtect,dwNewProtect);}关于Eflags|0x100看下面的图程序状态字(标志寄存器)TF在8但是开头是从0开始的所以应该在从右向左第9个bit。
延伸阅读

更多相关文章

2026/9/27 6:46:05

武隆网站建设哪家好?避开域名服务器坑的5个真相

武隆网站建设哪家好?避开域名服务器坑的5个真相 很多老板在武隆找建站公司,最头疼的不是价格,而是 域名服务器搞不懂 。 你花了几千块,对方发给你一个链接,点进去是空白,或者提示“证书无效”,这时候你才意识到,这行水太深。…

2026/9/27 6:46:05

MT4 DDE数据交换

本文章只说技术本文章为原创文章,禁止转载。该文章只是技术交流,由此带来的任何问题与文章作者无关,如有疑问请留言。思路:MT4是由迈达克研发的一款交易软件,该软件可以对接很多种交易数据,但是呢&#xff…

2026/9/27 6:46:05

jvm知识-废弃

文章目录Java内存区域说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题对象的访问定位句柄…

2026/9/27 7:41:08

Puppet device 子命令实战指南:用 proxy agent 管理远程网络设备

运维DevOpsIaC 【免费下载链接】puppet Server automation framework and application 项目地址: https://gitcode.com/gh_mirrors/pu/puppet 点击查看 免费下载 导读 puppet device 是 Puppet 项目中专门用于管理远程网络设备(交换机、路由器等无法直…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/27 0:00:45

东莞市品牌网站建设报价常见报错与解决

东莞品牌网站建设报价单背后:一份保姆级建站教程避坑实录 网站做好了没人访问,这大概是很多老板最头疼的事。花了大几万做的品牌站,上线后流量惨淡,比路边摊还冷清。别急着骂外包公司,很多“东莞品牌网站建设报价”里藏着不少猫腻,比如用模板站冒充定制…

2026/9/27 0:00:45

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/27 0:00:45

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/26 19:58:38

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑