WINDOWS下的各類HOOK
1、HOOK SERVICE TABLE:HOOK SSDT
這種方法對於攔截 NATIVE API 來說用的比較多。
SSDT hook,一句話——Windows把需要呼叫的核心API地址全都存在了
一個表中(System Service Dispatch Table),要想hook一個核心API,比較簡單的辦法就是把
該核心API在表(SSDT)中儲存的地址修改為自己撰寫的函式地址。
IDT是中斷描述表,可以替換其中的中斷處理程式。
這種方法對於跟蹤、分析系統呼叫來說用的比較多。原理是通過替換 IDT
表中的 INT 2E 中斷,使之指向我們自己的中斷服務處理例程來實現的。掌握
此方法需要你對保護模式有一定的基礎。
這種方法對於攔截、分析其他核心驅動的函式呼叫來說用的比較多。原理
是根據替換 PE 格式匯出表中的相應函式來實現的。
EAT是可執行檔案的匯出表,記錄DLL中可供其他程式使用的函式,可執行檔案裝載時會使用相應DLL的EAT表來初始化IAT表,通過替換EAT表中的函式地址,就可以使依賴於本DLL的程式得到一個假的地址。
4.IAT HOOK (ring3 用)
IAT是可執行檔案的匯入表,記錄可執行檔案使用的其它DLL中的函式,通過替換IAT表中的函式地址,可以hook相應DLL中的函式呼叫。
5、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,驅動程式中有一系列分發例程來處理請求,這些例程儲存在驅動裝置物件的資料結構中的一個表中,也很容易替換。
這種方法對於攔截 NATIVE API 來說用的比較多。
SSDT hook,一句話——Windows把需要呼叫的核心API地址全都存在了
一個表中(System Service Dispatch Table),要想hook一個核心API,比較簡單的辦法就是把
該核心API在表(SSDT)中儲存的地址修改為自己撰寫的函式地址。
IDT是中斷描述表,可以替換其中的中斷處理程式。
這種方法對於跟蹤、分析系統呼叫來說用的比較多。原理是通過替換 IDT
表中的 INT 2E 中斷,使之指向我們自己的中斷服務處理例程來實現的。掌握
此方法需要你對保護模式有一定的基礎。
這種方法對於攔截、分析其他核心驅動的函式呼叫來說用的比較多。原理
是根據替換 PE 格式匯出表中的相應函式來實現的。
EAT是可執行檔案的匯出表,記錄DLL中可供其他程式使用的函式,可執行檔案裝載時會使用相應DLL的EAT表來初始化IAT表,通過替換EAT表中的函式地址,就可以使依賴於本DLL的程式得到一個假的地址。
4.IAT HOOK (ring3 用)
IAT是可執行檔案的匯入表,記錄可執行檔案使用的其它DLL中的函式,通過替換IAT表中的函式地址,可以hook相應DLL中的函式呼叫。
5、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,驅動程式中有一系列分發例程來處理請求,這些例程儲存在驅動裝置物件的資料結構中的一個表中,也很容易替換。
相關文章
- Windows on Arm 下的 Inline Hook 簡單實現WindowsinlineHook
- Windows核心程式設計_HookWindows程式設計Hook
- Ocaml windows 下安裝的各種坑及解決方案Windows
- 微服務架構下各類專案的順勢崛起微服務架構
- Windows下x86和x64平臺的Inline Hook介紹WindowsinlineHook
- Windows 的各種聲音Windows
- windows下安裝各個版本memcache擴充套件Windows套件
- 各類查詢
- Java Object類的各個方法JavaObject
- JavaScript各類標籤的使用JavaScript
- 各類IP地址的範圍
- 各類關鍵字
- Guava Preconditions類的各種用法Guava
- spring中各個類的作用Spring
- javascript中各類的prototype屬性JavaScript
- ORACLE中各類NAME的簡介Oracle
- 視訊直播:Windows中各類畫面源的擷取和合成方法總結Windows
- 各種各類好用熱門API推薦API
- windows的各種副檔名詳解Windows
- 各類垃圾車的免徵操作流程
- SSM框架各類jar包SSM框架JAR
- Hook技術之Hook ActivityHook
- hook!Hook
- 各類聚類(clustering)演算法初探聚類演算法
- windows下的IP地址解析方式,windows下的/etc/hostsWindows
- Windows平臺的Apache各個版本區別WindowsApache
- 揭露Windows中各種不Ň(轉)Windows
- 004.02 各類搜尋的演算法演算法
- Java 的各種內部類、Lambda表示式Java
- 各類好用的API推薦,趕緊收藏API
- 技術人必看的各類工具書籍
- 各類熱門的免費API推薦API
- 各類免費好用的API介面推薦API
- 各類程式語言的Hello World寫法
- Java中各Set實現類的效能分析Java
- HOOK API入門之Hook自己程式的MessageBoxWHookAPI
- 以pytorch的forward hook為例探究hook機制PyTorchForwardHook
- C#各類集合介紹C#