日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

(50)补充内容:SSDT HOOK 模板

發(fā)布時間:2025/3/21 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (50)补充内容:SSDT HOOK 模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

代碼

下面的驅(qū)動代碼ssdt hook了NtOpenProcess函數(shù),可以監(jiān)視打開進程的操作。

#include <ntddk.h> #include <ntstatus.h>/************************************************************************/ /* 類型聲明 */ /************************************************************************/// 系統(tǒng)服務(wù)表 typedef struct _KSYSTEM_SERVICE_TABLE {PULONG ServiceTableBase; // 函數(shù)地址表(SSDT)PULONG ServiceCounterTableBase; // SSDT 函數(shù)被調(diào)用的次數(shù)ULONG NumberOfService; // 函數(shù)個數(shù)PULONG ParamTableBase; // 函數(shù)參數(shù)表(SSPT) } KSYSTEM_SERVICE_TABLE, *PKSYSTEM_SERVICE_TABLE;typedef struct _KSERVICE_TABLE_DESCRIPTOR {KSYSTEM_SERVICE_TABLE ntoskrnl; // 內(nèi)核函數(shù)KSYSTEM_SERVICE_TABLE win32k; // win32k.sys 函數(shù)KSYSTEM_SERVICE_TABLE unUsed1;KSYSTEM_SERVICE_TABLE unUsed2; } KSERVICE_TABLE_DESCRIPTOR, *PKSERVICE_TABLE_DESCRIPTOR;// NTOPENPROCESS typedef NTSTATUS (*NTOPENPROCESS) (PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId);/************************************************************************/ /* 函數(shù)聲明 */ /************************************************************************/VOID DriverUnload(PDRIVER_OBJECT pDriver); NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING reg_path); VOID PageProtectOff(); VOID PageProtectOn(); VOID HookNtOpenProcess(); VOID UnHookNtOpenProcess(); NTSTATUS HbgNtOpenProcess(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId);/************************************************************************/ /* 全局變量 */ /************************************************************************/extern PKSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable; // ntoskrnl.exe 導出的全局變量 ULONG uOldNtOpenProcess; // 舊的函數(shù)地址/************************************************************************/ /* 函數(shù)定義 */ /************************************************************************/// 驅(qū)動入口 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING reg_path) {// HOOKHookNtOpenProcess();pDriver->DriverUnload = DriverUnload;return STATUS_SUCCESS; }// 卸載驅(qū)動 VOID DriverUnload(PDRIVER_OBJECT pDriver) {UnHookNtOpenProcess();DbgPrint("Driver unloaded.\n"); }// 關(guān)閉頁保護 VOID PageProtectOff() {__asm{cli; // 關(guān)閉中斷mov eax, cr0;and eax, not 0x10000; // WP位置0mov cr0, eax;} }// 開啟頁保護 VOID PageProtectOn() {__asm{mov eax, cr0;or eax, 0x10000; // WP位置1mov cr0, eax;sti; // 恢復中斷} }// HOOK NtOpenProcess VOID HookNtOpenProcess() {PageProtectOff();uOldNtOpenProcess = KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[0x7A];KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[0x7A] = (ULONG)HbgNtOpenProcess;PageProtectOn(); }// UnHOOK NtOpenProcess VOID UnHookNtOpenProcess() {PageProtectOff();KeServiceDescriptorTable->ntoskrnl.ServiceTableBase[0x7A] = uOldNtOpenProcess;PageProtectOn(); }// 被修改的 NtOpenProcess 函數(shù),簡單打印參數(shù) NTSTATUS HbgNtOpenProcess(PHANDLE ProcessHandle, ACCESS_MASK DesiredAccess, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId) {DbgPrint("%x %x %x %x\n", ProcessHandle, DesiredAccess, ObjectAttributes, ClientId);return ((NTOPENPROCESS)uOldNtOpenProcess)(ProcessHandle, DesiredAccess, ObjectAttributes, ClientId); }

運行結(jié)果

總結(jié)

以上是生活随笔為你收集整理的(50)补充内容:SSDT HOOK 模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。