VEH HOOK

article/2025/10/12 1:00:36

相关函数

我们只需要用到 AddVectoredExceptionHandler 设置VEH异常捕获

PVOID WINAPI AddVectoredExceptionHandler(_In_ ULONG                       FirstHandler,_In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler
);ULONG WINAPI RemoveVectoredExceptionHandler(_In_ PVOID Handler
);PVOID WINAPI AddVectoredContinueHandler(_In_ ULONG                       FirstHandler,_In_ PVECTORED_EXCEPTION_HANDLER VectoredHandler
);ULONG WINAPI RemoveVectoredContinueHandler(_In_ PVOID Handler
);

设置异常捕获后,我们的callback就能处理异常
_EXCEPTION_POINTERS 可以获得ExceptionRecord
ExceptionRecord中还有异常代码(ExceptionCode)和异常地址(ExceptionAddress)

VEH HOOK原理

1.将需要HOOK的函数入口内容改为0xcc中断,如果你不了解中断向量表和int软中断你可以理解为设置了个断点,这样运行时就会产生异常
2.由我们的异常处理函数捕获后,修改寄存器的值(原参数)和EIP
3.返回EXCEPTION_CONTINUE_EXECUTION,让程序重新跑起来,就能达到HOOK的效果了

下面是个DLL,你需要自己手动在DLL_PROCESS_ATTACH时运行VEH_HOOK_MessageBoxA();
编译后随便写个EXE载入DLL调用MessageBoxA试试吧

// Dll.cpp : 定义 DLL 应用程序的导出函数。
//#include "stdafx.h"
#include "Dll.h"
#include <stdio.h>
#define  BREAKPOINTLEN 1
PVOID MessageBoxA_Addr;
BYTE MessageBoxA_New_INT;
BYTE MessageBoxA_Ole_INT;
DWORD dwNewProtect = PAGE_EXECUTE_READWRITE;
DWORD dwOldProtect;
//修改参数
char lpText[] = "Test Text! ";LONG NTAPI CALL_MessageBoxA(struct _EXCEPTION_POINTERS *ExceptionInfo)
{if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_BREAKPOINT)//判断异常类型是否是断点{PVOID addr = ExceptionInfo->ExceptionRecord->ExceptionAddress;//获得异常地址if (addr != nullptr/*(PVOID)0*/){//+0x8正常情况下是汇编中的第一个参数,+0x4为返回EIP//但是这里+0x8是汇编中的第二个参数,因为函数开头push ebp的代码被我们改成了0xcc,没有对esp进行压栈//又由于所有参数从右到左依次入栈,所以顺序其实是反过来的//+0xc 在MessageBox代码中是第二个lpText//+0x8 在MessageBox代码中是第三个lpCaption*(int*)((ExceptionInfo->ContextRecord->Esp) + 0x8) = (int)lpText;*(int*)((ExceptionInfo->ContextRecord->Esp) + 0xc) = (int)lpText;//修改状态ExceptionInfo->ContextRecord->ContextFlags = CONTEXT_CONTROL;//查询控制寄存器组ExceptionInfo->ContextRecord->Eip = /*(DWORD)&MessageBoxA;*/(DWORD)addr;/*修改TF标志位*/ExceptionInfo->ContextRecord->EFlags |= 0x100;//恢复代码VirtualProtect((void*)addr, BREAKPOINTLEN, dwNewProtect, &dwOldProtect);*(BYTE*)(addr) = MessageBoxA_Ole_INT;//把首个字节地址改回去VirtualProtect((void*)addr, BREAKPOINTLEN, dwOldProtect, &dwNewProtect);//OutputDebugStringA("My::单步运行,取消断点");printf_s("单步运行,取消断点\n");//AddVectoredExceptionHandler(NULL,(PVECTORED_EXCEPTION_HANDLER)ExceptionInfo);return EXCEPTION_CONTINUE_EXECUTION;}return EXCEPTION_EXECUTE_HANDLER;}return EXCEPTION_EXECUTE_HANDLER;
}void VEH_HOOK_MessageBoxA()
{AddVectoredExceptionHandler(0, CALL_MessageBoxA);//设置VEH异常捕获MessageBoxA_Addr = (PVOID)&MessageBoxA;//MessageBoxA地址MessageBoxA_Ole_INT = *(BYTE*)MessageBoxA_Addr; //MessageBoxA 首个字节VirtualProtect((void*)MessageBoxA_Addr, BREAKPOINTLEN, dwNewProtect, &dwOldProtect);*(BYTE*)(MessageBoxA_Addr) = 0xcc;//首个字节内容改成0xcc(int 3)断点中断VirtualProtect((void*)MessageBoxA_Addr, BREAKPOINTLEN, dwOldProtect, &dwNewProtect);
}

关于Eflags|=0x100

看下面的图,程序状态字(标志寄存器),TF在8,但是开头是从0开始的,所以应该在从右向左第9个bit。
标志寄存器


http://chatgpt.dhexx.cn/article/QWVrIfax.shtml

相关文章

Docker方式部署Github监控系统Hawkeye

Docker方式部署Github监控系统Hawkeye 依赖 Python 3.x MongoDB > 3.x Flask 创建python3依赖包 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel 安…

Vue+高德地图API的使用(插件的使用)

接上次地图显示 官方文档&#xff1a;根据自己需求引入想要的插件 在AMapLoader.load中的plugins引入你所需要的插件 //这里是我引入的插件 plugins: ["AMap.ToolBar", //工具条"AMap.Scale", // 比例尺"AMap.Geolocation", //定位"AMap.H…

Hawk-and-Chicken详解

题目描述&#xff1a; Kids in kindergarten enjoy playing a game called Hawk-and-Chicken. But there always exists a big problem: every kid in this game want to play the role of Hawk. So the teacher came up with an idea: Vote. Every child have some nice hand…

Webhook介绍和应用

Webhook概念 Webhook本质上也是API&#xff0c;只不过是反向调用。 Webhook 产生背景 正常调用API是由应用去调用对方服务器的API&#xff0c;为了实现最大程度利用好资源以及并发&#xff0c;通常这个API可能是异步调用&#xff0c;这样&#xff0c;在调用的过程中&#xf…

【论文笔记】—毫米波雷达穿雾式高分辨率成像—Supervised—HawkEye系统—2020-CVPR

题目&#xff1a;Through Fog High-Resolution Imaging Using Millimeter Wave Radar 利用毫米波雷达进行穿雾式高分辨率成像 DOI&#xff1a;10.1109/CVPR42600.2020.01148时间&#xff1a;2020会议&#xff1a;2020-CVPR机构&#xff1a;伊利诺伊大学厄巴纳-香槟分校 论文…

Hi3518ev200:byun hawkeye刷机与配网

背景&#xff1a;从浩峰大佬那拿的boyun hawkeye互联网摄像机&#xff0c;听说是从闲鱼上淘的&#xff0c;被淘汰的产品&#xff1b;买来用来二次开发。 1&#xff09;拆开外面的外壳&#xff0c;然后将串口线引出&#xff0c;接usb转ttl&#xff0c;usb供电&#xff0c;用xsh…

Hawkeye: Towards a Desired Directed Grey-box Fuzzer 论文阅读笔记

中文译名&#xff1a;hawkeye: 需求导向的灰盒模糊测试 作者&#xff1a;Hongxu Chen 单位&#xff1a;南洋理工大学 国家&#xff1a; #新加坡 年份&#xff1a; #2018年 来源&#xff1a; #ccs 关键字&#xff1a; #定向fuzzing #fuzzing #灰盒 代码地址&#xff1a; https:/…

璞华大数据HawkEye设备数字化管理之远程协助功能

应用背景 对于设备制造厂商或者设备使用企业而言&#xff0c;在日常的设备维修管理过程中&#xff0c;多长时间到达现场和多长时间排除故障&#xff0c;是考核工厂维修工和售后维修人员工作绩效的重要指标。 在设备专业程度和精密度不断提高以及国内外新冠疫情的影响下&#x…

论文阅读_Hawkeye: Towards a Desired Directed Grey-box Fuzzer

作者: Hongxu Chen, Yinxing Xue&#xff0c; Yuekang Li, Bihuan Chen, Xiaofei Xie, Xiuheng Wu, Yang Liu 出处&#xff1a;CCS 2018 背景 定向模糊测试就是引导模糊测试朝着目标代码块的方向探索&#xff0c;让已覆盖的代码块越来越接近目标代码块&#xff0c;最终测试目标…

新产品发布 | HawkEye作业票管理系统

作业票是电力、石化、工程现场等行业的重要管理制度之一&#xff0c;但是长期以来一直是手工、纸质的方式申请和签发。这种方式耗时&#xff0c;出错率高&#xff0c;数据记录和统计不完整&#xff0c;是一种效率很低的管理方法。 2021年&#xff0c;国家应急管理部办公厅印发…

HawkEye产品深受市场认可,与多家行业龙头企业达成合作,共同开拓行业市场

2023年6月&#xff0c;日立&#xff08;中国&#xff09;有限公司与璞华大数据正式签订合作协议&#xff0c;双方将在产品和技术领域进行深度合作&#xff0c;共同开拓国内智能制造市场。 这是继方正国际、浪潮等行业龙头企业之后&#xff0c;又一家选择与璞华大数据HawkEye产…

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡

HawkEye-20G:20 Gbps Arria-10 FPGA加速卡 HawkEye是基于Intel Arria 10 FPGA的薄型PCIe加速卡。该平台拥有高达18 GB的DDR4板载内存,2条SFP +链接,最高速度为28 Gb / s,以及一个PCIe x8 Gen 3主机接口。 Arria 10 FPGA可提供多达480K LE和IEEE浮点功能。 HawkEye的内存方…

基于PyTorch、易上手,细粒度图像识别深度学习工具库Hawkeye开源

转载自丨机器之心 鉴于当前领域内尚缺乏该方面的深度学习开源工具库&#xff0c;南京理工大学魏秀参教授团队用时近一年时间&#xff0c;开发、打磨、完成了 Hawkeye——细粒度图像识别深度学习开源工具库&#xff0c;供相关领域研究人员和工程师参考使用。本文是对 Hawkeye 的…

高德地图marker自定义图标只显示一半

直接从高德那里搬过来代码&#xff0c;这里的偏移量是因为偏移量有问题&#xff0c;所以出现了图片只显示一半的情况。 加上imageOffset即可解决

原 matplotlib散点scatter学习2,参数测试(marker1)

续上篇 绘制散点图的函数&#xff0c;x&#xff0c;y分别对应点的x轴坐标和y轴坐标 plt.scatter(x,y) matplotlib.pyplot.scatter(x, y, sNone, cNone, markerNone, cmapNone, normNone, vminNone, vmaxNone, alphaNone, linewidthsNone, vertsNone, edgecolorsNone, , dataNon…

python画图(标记、marker、设置标记大小、marker符号大全)

初衷 本人由于平常写论文需要输出一些结果图&#xff0c;但是苦于在网上搜python画图时&#xff0c;详细的教程非常多&#xff0c;但是就是找不到能马上解决自己问题那一行代码&#xff0c;所以打算写一些适合需求简单的朋友应急用的教程&#xff0c;应急就必须方便搜索&#x…

matplotlib画布中属性设置常用函数及其说明

绘图时设置坐标轴属性 data np.arange(0,1,0.01) plt.title(my lines example) plt.xlabel(x) plt.ylabel(y) plt.xlim(0,1) plt.ylim(0,1) plt.xticks([0,0.2,0.4,0.6,0.8,1]) plt.yticks([0,0.2,0.4,0.6,0.8,1]) plt.tick_params(labelsize 12) plt.plot(data,data**2) pl…

MATLAB里面size什么意思,matlab中的makersize是什么意思

MATLAB中的绘图语言 plot(j,len1-i,ro,MarkerS...参数那么多&#xff0c;有点晕啊&#xff0c;每个参数代表什么意思啊&#xff1f;&#xff1f;&#xff1f; 前面的j和len1-i...plot(...,PropertyName,PropertyValue,...) plot(j,len1-i,ro,MarkerSize,10,LineWidth,2); 其中j…

matplotlib画图自定义marker

文章目录 matplotlib画图自定义markermarker的特点通过插入图片实现自定义marker通过Path实现自定义marker matplotlib画图自定义marker 在matplotlib工具箱中可以画marker的高级作图函数一共有两个&#xff0c;分别为plot和scatter&#xff0c;可以画出多种marker。但如果需要…

plot函数的应用

这一部分是关于plot函数的简单应用&#xff0c;下面附有一段代码示例&#xff0c;详情请见代码及其注释。 import matplotlib as mlp from PIL import Image from pylab import * import os image_path "D:/warehouse/image_list" # 储存照片的路径 os.chdir(imag…