在Windows上實現遠端IAT hook

2022-09-24 04:48:10 字數 1840 閱讀 7360

iat hook,就是我們要hook的目標函式在匯入表it中,通過修改目標函式所在iat中項的位址為我們自定義函式的位址,從而實現函式hook。

在這裡我們要hook的目標是乙個遠端程序,採用之前部落格《windows上的程序注入》一文中用到的反射式dll注入這一技術,在其中新增額外的iat hook**來實現hook。

hook的步驟:

將dll檔案注入到目標程序中並完成載入;

在dllmain函式中呼叫hook處理函式;

遍歷匯入表尋找目標函式所在iat中的位置;

儲存原目標函式位址;

修改對應iat中的項,將儲存的位址修改為我們定義的函式。

typedef struct

_image_import_descriptor ;

dword timedatestamp;

//時間戳

dword forwarderchain; //

指向前乙個image_import_descriptor

dword name; //

dll的名字

dword firstthunk; //

該項指向iat

} image_import_descriptor;

int和iat的型別皆為_image_thunk_data32,如下:

typedef struct

_image_thunk_data32 u1;

} image_thunk_data32;

它們每一項都按照順序還是一一對應的。我們通過比較int中對應項記錄的函式名判斷其是否為我們的目標函式,若是則修改對應iat中的項記錄的函式位址,並儲存乙份原始資料。

因為iat所在的記憶體空間預設是不可寫的,所以我們還需要修改一下許可權,通過使用virtualprotect函式新增乙個寫入許可權即可。為了程序安全和穩定,完事後記得改回來。

最好,我們編寫乙個自定義的函式用於替換目標函式,這裡我選取了messageboxa函式為目標。

int

hook_messageboxa(hwnd hwnd, lpcstr lptext, lpcstr lpcaption, uint utype)

iat hook **如下:

void hookiatfunctionbyname(char  *functionname, ulong_ptr hookaddress) 

dwcounter = 1

;

break

; }

ptmp1 += sizeof

(ulong_ptr);

if(ptmp4)

ptmp4 += sizeof

(ulong_ptr);

}if (dwcounter == 1

)

break

; pt*** += sizeof

(image_import_descriptor);}}

關於dllmain函式的**如下:

bool winapi dllmain( hinstance hinstdll, dword dwreason, lpvoid lpreserved )

return

breturnvalue;

}

MinGW lapack 在windows 上安裝

方案一 mingw makefiles 配置好以後直接在build資料夾下,執行cmd.exe shell,mingw32 make j5,之後執行mingw32 make install 安裝檔案到c program files x86 lapack,勾選build shared libs 方案二...

windows 上Mysql遠端連線配置

例子 允許myuser使用mypassword從任何主機連線到mysql伺服器。grant all privileges on to myuser identified by mypassword with grant option flush privileges 允許使用者myuser從ip為1...

在windows上擴充套件python

在windows環境下建立乙個python的模組。使用vc6和python2.3 先講講做簡單的步驟 1。在vc6中建立乙個dll的project。假定我們的module的名字是mytest.那麼我們的dll名字就是mytest.dll。這個是必須的。2。用c寫我們想要實現的部分。步驟如下 incl...