sources文件说明(新手向):
TARGETNAME = ******//此处填写要生成的驱动的名字.不包含".sys"字样
DRIVERTYPE = FS
TARGETTYPE = DRIVER
SOURCES = xde.c hook.c ***.c//填写你的C文件
文件解析:
第一部分:
xde.c
xde.h
xdetbl.c
这三个是xde汇编引擎的
第二部分:
hook.h
hook.c
通用HOOK的定义及实现
定义了结构体:HookYou
结构如下:
typedef struct _HookYou
{
char JmpCode[20];//跳转用,直接call
char OldCode[20];//恢复hook用.保存原本的代码
ULONG HookLen; //恢复hook用.保存代码长度
ULONG IsDobeHook; //是否多重HOOK
PULONG RealHookStartAddress;//真正的HOOK首地址
}HookYou,*PHookYou;
定义并实现了函数:
/*判断系统版本*/
NTSTATUS WindIsVer(OSVERSIONINFOW os);
/********************************************/
/*HookFunAddress为被HOOK函数地址 */
/*FakFunAddress被HOOK函数的跳转地址 */
/*传入一个HookYou类型结构体的指针.该结构体将保存HOOK的数据 */
/*************************************************/
NTSTATUS HookThis(IN ULONG HookFunAddress,IN ULONG FakFunAddress,OUT PHookYou HookFun);
/*************************************************************/
/* 建议在使用HookYou之前调用此例程将其初始化 */
/* 值得注意的是.该函数并不是创建结构体的函数.而仅仅是初始化 */
/*************************************************************/
NTSTATUS InitHookYou(PHookYou HookFun);
/********************************************************/
/* 卸载Hook,传入HookYou结构体的指针,HookFunAddress可为NULL */
/* 但如果HookFun.RealHookStartAddress为NULL,则必须指定HookFunAddress */
/************************************************************/
NTSTATUS UNHookForHookYou(IN PHookYou HookFun,IN ULONG HookFunAddress);
/**************************************/
/* 传入TRUE则解锁CR0 否则加锁 */
/***********************************/
NTSTATUS CR0Lock(ULONG ui);
用法很简单.具体实现请看代码~
inline.h
inline.c
是个例子,这里HOOK了NTOpenProcess函数.处理函数则只是简单的输出了打开方和被打开方
压缩包中提供的sources文件并不能直接用.请自己编辑下
编辑为如下内容即可直接使用了
TARGETNAME = test_driver
DRIVERTYPE = FS
TARGETTYPE = DRIVER
SOURCES = xde.c hook.c inline.c
其中有一小段是恢复SSDT的NtOpenProcess
灰常简单...会被笑.不过还是发了.毕竟对PE不熟悉..另求个师父
知道写的不好.另外其中对多重HOOK的判定似乎不生效.发出来1是共享,2是希望大神给挑挑错
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课