Ring0和Ring3 HOOK 大檢查

一、HOOK SERVICE TABLE:HOOK SSDT
   這種方法對於攔截 NATIVE API 來講用的比較多。windows

   SSDT hook,一句話——Windows把須要調用的內核API地址全都存在了數據結構

一個表中(System Service Dispatch Table),要想hook一個內核API,比較簡單的辦法就是把函數

該內核API在表(SSDT)中保存的地址修改成本身撰寫的函數地址。 

二、HOOK INT 2E 方法:IDT HOOK工具

   IDT是中斷描述表,能夠替換其中的中斷處理程序。性能

   這種方法對於跟蹤、分析系統調用來講用的比較多。原理是經過替換 IDT
表中的 INT 2E 中斷,使之指向咱們本身的中斷服務處理例程來實現的。掌握
此方法須要你對保護模式有必定的基礎。

三、 HOOK PE 方法:EAT HOOK
     這種方法對於攔截、分析其餘內核驅動的函數調用來講用的比較多。原理
是根據替換 PE 格式導出表中的相應函數來實現的。spa

     EAT是可執行文件的導出表,記錄DLL中可供其餘程序使用的函數,可執行文件裝載時會使用相應DLL的EAT表來初始化IAT表,經過替換EAT表中的函數地址,就可使依賴於本DLL的程序獲得一個假的地址。對象

 

4.IAT HOOK (ring3 用)內存

IAT是可執行文件的導入表,記錄可執行文件使用的其它DLL中的函數,經過替換IAT表中的函數地址,能夠hook相應DLL中的函數調用。工作流

 

五、Inline Hook方法 (ring 0和ring3 均可以用) 基礎

Inline hook的工做流程:
1)驗證內核API的版本(特徵碼匹配)。
2)撰寫本身的函數,要完成以上三項任務。
2)獲取本身函數的地址,覆蓋內核API內存,供跳轉。

Inline Hook的缺點:
1) 不夠通用。各個windows版本中,內核API的開始一段不盡相同,要想通吃,就要多寫幾個版

本或者作一個特徵碼搜索(由於有的內核API在各個版本中很是類似,只是在「特徵碼」以前或之

後加一點東西)。
2) 已被一些檢測工具列入檢測範圍,若是直接從內核API第一個字節開始覆蓋,那麼很容易被檢

測,若是把覆蓋範圍日後推,並加以變形,也許能抵擋一氣。具體狀況,我才疏學淺,還沒有試驗

 

6.SYSENTRY hook
  爲了性能的考慮,xp後的系統都改用sysentry命令來進入ring0,去調用SSDT中的服務,再也不是經過IDT中的 int 2E。這也使得咱們hook也變得相對容易了。
  首先得到sysentry的地址,而後改之,不用再考慮IDT了

 

7)IRP hook IRP是 I/O request packets,驅動程序中有一系列分發例程來處理請求,這些例程保存在驅動設備對象的數據結構中的一個表中,也很容易替換。

相關文章
相關標籤/搜索