KiFastCallEntryHook

本文详细探讨了KiFastCallEntryHook,这是一种在Windows系统中实现钩子的高级技术。通过讲解其工作原理,介绍了如何利用此技术来拦截和修改函数调用,从而在系统层面实现监控和调试目的。同时,文章还讨论了可能遇到的安全和性能问题,以及如何避免这些潜在风险。
摘要由CSDN通过智能技术生成

     先根据SSDTHook给SSDTTableBase下钩子(Hook掉NtSetEvent函数),然后通过调用ZwSetEvent函数进入FakeSetEvent函数,在FakeSetEvent函数中我们通过栈回溯(ebp+4)找到主调函数KiFastCallEntry的EIP(KiFastCallEntry函数Call NtXX函数指令的下一条指令处,被调函数执行完后主调函数会从EIP中的地址继续执行),把EIP中的地址存入__KiFastCallEntryRetAddress。然后我们通过循环在KiFastCallEntry函数体中查找关键指令码,找到之后用跳转指令Hook到我们的钩子函数FakeKiFastCallEntry中。在FakeKiFastCallEntry中我们调用SysCallfilter对服务索引(ServiceIndex)进行过滤,如果是NtOpenProcess的索引我们就将FakeNtOpenProcess函数地址返回给KiFastCallEntry的ebx中,KiFastCallEntry会执行 call ebx。
KiFastCallEntryHook.h:
#pragma once

#include<fltKernel.h>

#define MAX_PATH 260

//系统描述符 结构体
typedef struct _SYSTEM_SERVICE_DESCRIPTOR_TABLE_
{
	PVOID ServiceTableBase;		//该成员是一个指针数组 存储很多函数地址
	PVOID ServiceCounterTableBase;
	ULONG_PTR NumberOfServices;
	PVOID ParamterTableBase;
}SYSTEM_SERVICE_DESCRIPTOR_TABLE, *PSYSTEM_SERVICE_DESCRIPTOR_TABLE;



//驱动卸载派遣例程
void DriverUnload(PDRIVER_OBJECT DriverObject);

typedef
NTSTATUS
(__stdcall* LPFN_ZWSETEVENT)(IN PHANDLE EventHandle,
	OUT PLONG PreviousState OPTIONAL);


//主要函数
NTSTATUS KiFastCallEntryHook();


//调用钩子函数 更换函数地址
NTSTATUS SSDTHook(PUCHAR ZwFunctionAddress, PVOID FakeFunctionAddress, PVOID* OriginalFunctionAddress);
NTSTATUS SSDTUnhook(PUCHAR ZwFunctionAddress, PVOID FakeFunctionAddress, PVOID* OriginalFunctionAddress);


//获取KiFastCallEntry函数体中Call NtXX指令的下一行指令处
NTSTATUS FakeSetEvent (IN PHANDLE EventHandle,OUT PLONG PreviousState OPTIONAL);

//关闭写保护
VOID OnEnableWrite();
//打开写保护
VOID OnDisableWrite();
//钩子函数
VOID FakeKiFastCallEntry();

//在钩子函数中调用 判断ServiceIndex是不是NtOpenProcess函数在SSDTTableBase中的索引
//如果是 返回FakeNtOpenProcess函数地址
//如果不是 返回正常的NtXX函数地址
ULONG SysCallfilter(ULONG ServiceIndex, ULONG FunctionAddress, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值