过写拷贝HOOK3环函数(滴水中级项目之一)

本文介绍了如何使用中断函数和中断门实现3环函数的HOOK技术。通过保存调用参数,修改页属性,以及创建中断门,实现了在3环代码中拦截特定函数的功能。在卸载驱动时,能够正确恢复被HOOK的函数。此外,还详细说明了在3环与0环之间的交互过程,包括函数修复、参数获取等关键步骤。
摘要由CSDN通过智能技术生成
#include <wdm.h>
//0x78 bytes (sizeof)
#define MY_FIX_CODE CTL_CODE(FILE_DEVICE_UNKNOWN,0x888,METHOD_BUFFERED,FILE_READ_ACCESS)
#define MY_START_CODE CTL_CODE(FILE_DEVICE_UNKNOWN,0x886,METHOD_BUFFERED,FILE_WRITE_ACCESS|FILE_READ_ACCESS)
#define MY_HOOK_CODE CTL_CODE(FILE_DEVICE_UNKNOWN,0x885,METHOD_BUFFERED,FILE_WRITE_ACCESS)
#define MY_GETINFO_CODE CTL_CODE(FILE_DEVICE_UNKNOWN,0x880,METHOD_BUFFERED,FILE_WRITE_ACCESS|FILE_READ_ACCESS)
NTSTATUS MyDeviceControl(PDEVICE_OBJECT pdv, PIRP pirp);
VOID FixPdePte(ULONG addr);
ULONG g_funcaddr = 0;
ULONG oldAddr = 0;
UCHAR oldcode[2] = {
    0x8b,0xff };
ULONG oldPDE = 0;
ULONG oldPTE = 0;
typedef struct _LDR_DATA_TABLE_ENTRY
{
   
	struct _LIST_ENTRY InLoadOrderLinks;                                    //0x0
	struct _LIST_ENTRY InMemoryOrderLinks;                                  //0x8
	struct _LIST_ENTRY InInitializationOrderLinks;                          //0x10
	VOID* DllBase;                                                          //0x18
	VOID* EntryPoint;                                                       //0x1c
	ULONG SizeOfImage;                                                      //0x20
	struct _UNICODE_STRING FullDllName;                                     //0x24
	struct _UNICODE_STRING BaseDllName;                                     //0x2c
	ULONG Flags;                                                            //0x34
	USHORT LoadCount;                                                       //0x38
	USHORT TlsIndex;                                                        //0x3a
	union
	{
   
		struct _LIST_ENTRY HashLinks;                                       //0x3c
		struct
		{
   
			VOID* SectionPointer;                                           //0x3c
			ULONG CheckSum;                                                 //0x40
		};
	};
	union
	{
   
		ULONG TimeDateStamp;                                                //0x44
		VOID* LoadedImports;                                                //0x44
	};
	struct _ACTIVATION_CONTEXT* EntryPointActivationContext;                //0x48
	VOID* PatchInformation;                                                 //0x4c
	struct _LIST_ENTRY ForwarderLinks;                                      //0x50
	struct _LIST_ENTRY ServiceTagLinks;                                     //0x58
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值