我發現前天不是因為吃到壞東西而過敏,而是因為環境灰塵太多 : (
今天要講到的是 API Hook,用到了很多我們在之前學習到的技術。這個技術我覺得算是對之前的技術大集合。
我們在寫程式時或使用任何資源、程序時,都會使用到 windows 提供的 API。
像是當你想要在檔案總管上打開 ThreeSleepCat.png 這張圖時, explorer.exe 就會使用讀取檔案的API,執行這個 API
時引發一系列的調用,最終發出 system call
。系統會進入核心模式
( kernel mode
)來做出處理,此時 OS
會進行檔案輸出等特權指令。當完成後又會回到用戶模式
( user mode
) 繼續讓你做下一個任務。
示意圖 :
阿不是,是這張 :
我們可以把它簡化成 :
當我們使用 API Hook
的時候,就要劫持請求與回應的這個時機,有點類似於網路滲透技術的中間人攻擊
( MITM
)。技術上主要是把 hack.dll 或攔截方法注入到目標程序,然後用一些辦法將 hack.dll 的 CreateFile()
取代掉 kernel32
的 CreateFile()
。當程序調用 CreateFile()
時,就會使用到我們寫的程序而不是系統本來的程序。
而使用這項操作理論上常常使用一系列的技術來執行 :
IAT
( Impotr Address Table
)IAT
的 APIjmp
指令EAT
( Export Address Table
)EAT
導出位置改成我們的函數位置,但由於太麻煩而且效果也沒那麼好,所以這方法不常用。這是要在程序的記憶體上設置 Hook
函式的方法,主要分為除錯法與注入法,而注入法又分為代碼注入
與 DLL 注入
。
Debug API
附加到目標程序上面( 以C++來說就是 “debugapi.h
” ),取得所有權限就可以暫停目標程序以進行各種操作,運行時就可以執行我們修改過後的東西。就像使用 x64dbg
時暫停程序來修改指令那樣。Hook 程序
執行。
allMain
上設置啟動程序與相應的 Hook 程序
,注入時就可以執行 Hooking。以上是 API Hook 的介紹,明天來研究如何進行 API Hook。