InlineHook & 原理與實現(3)

極安御信發表於2021-12-23

InlineHook & 原理與實現(3)

InlineHook又稱為內聯Hook,正常的API函式呼叫流程應該是由呼叫者(程式)透過函式名去呼叫已載入動態連結庫中的匯出函式。那麼InlineHook的流程一般是在被呼叫API的頭部,插入插入跳轉指令的方式,劫持函式執行流程。

下圖就是MessageBoxA的函式實現:

InlineHook & 原理與實現(3)


那麼,我們可以在頭部做出如下修改,進而實現HOOK:

InlineHook & 原理與實現(3)


上圖中的12345678就代指的是我們自己的函式,透過這種方法劫持到我們的流程中執行。下面,我們採用MessageBoxA的Hook作為例子,實際體驗一下InlineHook的實現方式。

首先,我們需要一個目標程式,程式碼如下:

InlineHook & 原理與實現(3)


然後我們來看一下HOOK後的效果:

正常情況下:

InlineHook & 原理與實現(3)


HOOK後:

InlineHook & 原理與實現(3)


 

接下來,我們將使用程式碼實現InlineHook,我這裡採用的作業系統是Windows 10 20H2(19042.1288),整合開發環境採用的是Visual Studio 2017。

閱讀全文


公眾號:極安御信安全研究院(即可獲得文章全部內容)


相關文章