欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]一份简单的内核通用HOOK 带使用例子(带简单SSDT恢复)~

[原创]一份简单的内核通用HOOK 带使用例子(带简单SSDT恢复)~

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是希望大神给挑挑错

上传的附件 code.zip

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功