編寫自己的驅動過遊戲保護-需要具備的理論知識
A、瞭解SSDT結構
B、由SSDT索引號獲取當前函式地址
C、如何獲取索引號
D、獲取起源地址-判斷SSDT是否被HOOK
E、如何向核心地址寫入自己程式碼
A、瞭解SSDT結構
SSDT的全稱是System Services Descriptor Table,系統服務描述符表 在ntoskrnl.exe匯出KeServiceDescriptorTable 這個表
typedef struct ServiceDescriptorTable { PVOID ServiceTableBase
//包含著 SSDT 中每個服務被呼叫次數的計數器。這個計數器一般由sysenter 更新。 unsigned int NumberOfServices;//由 ServiceTableBase 描述的服務的數目。 PVOID ParamTableBase; //包含每個系統服務引數位元組數表的基地址-系統服務引數表 } 用windbg 瞭解SSDT結構:
windbg符號路徑設定: srv*D:\WINDDK\symbols*http://msdl.microsoft.com/download/symbols
poi
B、由SSDT索引號獲取當前函式地址
[[KeServiceDescriptorTable]+index*4]
C、如何獲取索引號
用工具
D、獲取起源地址-判斷SSDT是否被HOOK
MmGetSystemRoutineAddress
E、如何向核心地址寫入自己程式碼
mov [xxx],xx //
1、如何向SSDT表寫入內容呢,這個表是被保護的 正常情況不能被寫入
方法有三
(1) 更改登錄檔 -最簡單的做法
HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\
EnforceWriteProtection=0
與
HKLM\SYSTEM\CurrentControlset\Control\SessionManger\MemoryManagement\
DisablePagingExecutive=1
(2)改變CR0暫存器的第1位wp位 置0-常用
(3)通過Memory Descriptor List(MDL)-正規做法 MmCreateMdl