x64技术之SSDT_Hook

本文介绍了在x64环境下如何进行SSDT_Hook,以禁止结束计算器进程为例,详细阐述了实现思路,包括获取系统服务表基址、保存原始函数地址、替换为Hook函数、HookKeBugCheckEx以及测试效果。文章强调了x64系统与Win32 Hook的不同,并指出在x64中函数地址经过加密。
摘要由CSDN通过智能技术生成

x64技术之SSDT_Hook

测试环境:

虚拟机: Windows 7 64bit

过PG工具

驱动加载工具

PCHunter64

系统自带的计算器和任务管理器等

实现思路:

实际思路与win32的思路一样.都是替换SSDT表里边的函数地址.不过微软被搞怕了,所以在x64上做了一些手脚.

具体手脚就是x64通过SSDT得到的函数地址,不是真实的函数绝对地址了,而是加密了的.

HOOK

1.得到系统服务表基址

2.保存需要Hook的函数地址(实际为偏移)

3.使内存可写,把表中要Hook的地址替换成KeBugCheckEx的地址,还原内存属性

4.HookKeBugCheckEx函数,在其开始处jmp到我们自己的函数地址.

5.自己实现Hook的函数,在其中做处理.

注:

x64要Hook的函数地址是 ServiceTableBase[Index]>>4 + ServiceTableBase

此处Hook了NtOpenProcess,导出序号是35号.处理了结束计算器进程的时候,禁止结束.

还原Hook的时候不需要还原KeBugCheckEx,因为这个函数就是崩溃蓝屏需要执行的函数.

这篇文章不会讲述过PG.

关键代码:

获取服务表基址

//获取服务表基址
ULONGLONG GetKeServiceDescriptorTable64() 
{
	PUCHAR StartSearchAddress = (PUCHAR)__readmsr(0xC0000082);
	PUCHAR EndSearchAddress = StartSearchAddress + 0x500;
	PUCHAR i = NULL;
	UCHAR byte1 = 0, byte2 = 0
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值