【2021.01.15】Virtual Table Hook

什么是HOOK?

  • HOOK是用来获取、更改程序执行的某些数据,或是用于更改程序执行流程的一种技术。
  • HOOK的两种主要形式:
  1. 修改函数代码:INLINE HOOK(内联HOOK)
  2. 修改函数地址:IAT HOOK、SSDT HOOK、IDT HOOK、EAT HOOK、IRP HOOK

什么是Virtual Table?

  1. 虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的,简称为V-Table。
  2. 一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其反应实际的函数。
  3. 在有虚函数的类的实例中,这个表被分配在了这个实例的内存里,当用父类的指针来操作一个子类的时候,这张虚函数表就像一个地图,指明了实际所应该调用的函数。
#include <iostream>
#include <Windows.h>

class Base
{
public:
	virtual void Print()
	{
		std::cout << "Base..." << std::endl;
	}
};

void MyHookProc()
{
	std::cout << "Hook..." << std::endl;
}

int main(int argc, char* argv[])
{
	Base* pb = new Base();

	DWORD* pVtAddr = (DWORD*)*(DWORD*)pb;
	DWORD dwOldProct = 0;
	VirtualProtect(pVtAddr, 4, PAGE_READWRITE, &dwOldProct);
	*pVtAddr = (DWORD)MyHookProc;

	pb->Print();

	return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值