VEH软件断点和硬件断点Hook管理

#pragma once



using HookTargetProc = LONG(NTAPI*)(struct _EXCEPTION_POINTERS* ExceptionInfo);


struct VEH_HOOK {
   
	LPVOID HookAddress;
	HookTargetProc TargetAddress;
	UCHAR OldCode;
	struct VEH_HOOK* next;
};

struct VEHCPUHOOK {
   
	LPVOID lpHookAddress;
	HookTargetProc TargetAddress;
};
using HOOKNODE = struct VEH_HOOK;
using CPUHOOKINFO = struct VEHCPUHOOK;
void InitVehHook();

void SetVehHook(LPVOID lpHookAddress, HookTargetProc lpTarget);

void SetVehCpuHook(LPVOID lpHookAddress, HookTargetProc lpTarget);

void SetThreadHook(HANDLE hThread);

void DeleteAllHook();




#include "pch.h"
#include "VehHook.h"
#include <TlHelp32.h>
#include <iostream>
HOOKNODE* nodeExceptionHook;
CPUHOOKINFO cpuHookInfo[4] = {
    0 };

LONG NTAPI VehHookHandle(struct _EXCEPTION_POINTERS* ExceptionInfo) {
   

	if (ExceptionInfo->ExceptionRecord->ExceptionCode == EXCEPTION_BREAKPOINT) {
   
		//		std::cout << 1;
		HOOKNODE* tempHookNode = nodeExceptionHook;
		while (tempHookNode != nullptr) {
   
			if (tempHookNode->HookAddress == ExceptionInfo->ExceptionRecord->ExceptionAddress) {
   
				DWORD dwOld;
				VirtualProtect(tempHookNode->HookAddress, 1, PAGE_EXECUTE_READWRITE, &dwOld);
				*(UCHAR*)(tempHookNode->HookAddress) = tempHookNode->OldCode;
				tempHookNode->TargetAddress(ExceptionInfo);
				ExceptionInfo->ContextRecord->EFlags |= 0x100;
				VirtualProtect(tempHookNode->HookAddress, 1, dwOld, &dwOld);
				return EXCEPTION_CONTINUE_EXECUTION;
			}
			tempHookNode = tempHookNode->next;
		}

		return EXCEPTION_CONTINUE_SEARCH;
	}
	else if (ExceptionInfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值