1. 程式人生 > >編寫自己的驅動過遊戲保護-需要具備的理論知識

編寫自己的驅動過遊戲保護-需要具備的理論知識

A、瞭解SSDT結構

        B、由SSDT索引號獲取當前函式地址       

        C、如何獲取索引號

        D、獲取起源地址-判斷SSDT是否被HOOK

        E、如何向核心地址寫入自己程式碼

 A、瞭解SSDT結構

SSDT的全稱是System Services Descriptor Table,系統服務描述符表 在ntoskrnl.exe匯出KeServiceDescriptorTable 這個表

typedef struct ServiceDescriptorTable {    PVOID ServiceTableBase

; //System Service Dispatch Table 的基地址    PVOID ServiceCounterTable(0);

 //包含著 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