inline hook原理 VC注入dll后,如何用代碼實現(xiàn)inlinehook?
VC注入dll后,如何用代碼實現(xiàn)inlinehook?您需要理解這樣一個概念,即DLL的地址應(yīng)該在加載后重新定位。所有全局變量和函數(shù)都將根據(jù)DLL的基址進(jìn)行偏移。當(dāng)您寫入舊函數(shù)addr address
VC注入dll后,如何用代碼實現(xiàn)inlinehook?
您需要理解這樣一個概念,即DLL的地址應(yīng)該在加載后重新定位。所有全局變量和函數(shù)都將根據(jù)DLL的基址進(jìn)行偏移。當(dāng)您寫入舊函數(shù)addr address時,肯定會導(dǎo)致異常。誰知道你掛的程序的地址是什么?內(nèi)存分配了嗎?如果要寫入注入的進(jìn)程,必須首先使用virtualallocex來應(yīng)用內(nèi)存。你必須記住這個概念。所有地址都是動態(tài)的,只有函數(shù)和全局變量的偏移量是固定的。
如何Hook一個函數(shù)?
鉤子API有幾種方法:1。導(dǎo)入表鉤子,枚舉導(dǎo)入表,查找位置,替換函數(shù)指針,完成API plus算法。因此,C也可以調(diào)用API來完成2。內(nèi)聯(lián)鉤子,找到函數(shù)地址,在開始處寫跳轉(zhuǎn)指令并跳轉(zhuǎn)到新位置。執(zhí)行新位置后,可以選擇調(diào)用原始函數(shù)。在原始函數(shù)之前,可以執(zhí)行包含的指令并跳轉(zhuǎn)到剩余的函數(shù)指令。API plus算法可以完成,所以C#也可以調(diào)用API來完成
鉤子是一種機(jī)制,windows一直在運(yùn)行消息!鉤子可以是第一個得到消息的進(jìn)程!IAT鉤子,SSDT內(nèi)聯(lián)等等,鉤子有很多種!既然你需要鉤子,當(dāng)然,你需要外部連接庫!DLL,Sys起作用,然后與exe通信,達(dá)到了監(jiān)控變化的效果!