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