我一直在嘗試檢測API鉤子,內聯和EAT鉤子。如何檢測API掛鉤?
現在我沒有找到如何檢測EAT鉤東西。
內聯環掛鉤,是我到目前爲止有:
FARPROC Address = GetProcAddress(GetModuleHandle("kernel32.dll"),"ExitProcess");
if (*(BYTE*)Address == 0xE9 || *(BYTE*)Address == 0x90 || *(BYTE*)Address == 0xC3)
{
printf("Api hooked\n");
}
的問題是,有幾個操作碼,可以用來鉤/改變功能的序幕,檢查JMP/NOP/RET是微不足道的,我已經看到很多HOOK類型,如PUSH RET,MOV,RETN等...
我不知道是否有人知道如何檢測API中的這些掛鉤(繞行)或修改。 還有一些方法來檢測EAT鉤子。
謝謝。
如果有人鉤住了你的程序,那麼他們可以鉤住你的鉤子檢測器。 –
那麼,查看導出地址表是否已被掛鉤的一個顯而易見的方法是查看錶中的任何地址是否指向EAT所屬的DLL之外的某個地方。雖然,我相信一些標準DLL通過EAT將一些函數轉發給其他DLL,所以你必須處理這種情況。 –