HOOK原理

hook(鉤子)處理特殊的消息機(jī)制

iOS中HOOK技術(shù)的幾種方式

1、Method Swizzle
利用OC的Runtime特性,動態(tài)改變SEL(方法編號)和IMP(方法實(shí)現(xiàn))的對應(yīng)關(guān)系,達(dá)到OC方法調(diào)用流程改變的目的。主要用于OC方法。
原理:Method Swizzing是發(fā)生在運(yùn)行時(shí)的,主要用于在運(yùn)行時(shí)將兩個(gè)Method進(jìn)行交換,我們可以將Method Swizzling代碼寫到任何地方,但是只有在這段Method Swilzzling代碼執(zhí)行完畢之后互換才起作用。 而且Method Swizzling也是iOS中AOP(面相切面編程)的一種實(shí)現(xiàn)方式,我們可以利用蘋果這一特性來實(shí)現(xiàn)AOP編程。

2、fishhook
它是Facebook提供的一個(gè)動態(tài)修改鏈接mach-O文件的工具。利用MachO文件加載原理,通過修改懶加載和非懶加載兩個(gè)表的指針達(dá)到C函數(shù)HOOK的目的。
fishhook就是對間接符號表的偏移量動的手腳,提供一個(gè)假的nlist結(jié)構(gòu)體,從而達(dá)到hook的目的。

3、Cydia Substrate
Cydia Substrate 原名為 Mobile Substrate ,它的主要作用是針對OC方法、C函數(shù)以及函數(shù)地址進(jìn)行HOOK操作。當(dāng)然它并不是僅僅針對iOS而設(shè)計(jì)的,安卓一樣可以用。
1、safe mode
因?yàn)锳PP程序質(zhì)量參差不齊崩潰再所難免,破解程序本質(zhì)是dylib,寄生在別人進(jìn)程里。 系統(tǒng)進(jìn)程一旦出錯(cuò),可能導(dǎo)致整個(gè)進(jìn)程崩潰,崩潰后就會造成iOS癱瘓。所以CydiaSubstrate引入了安全模式,在安全模 式下所有基于CydiaSubstratede 的三方dylib都會被禁用,便于查錯(cuò)與修復(fù)。

2、MobileLoader
MobileLoader用于加載第三方dylib在運(yùn)行的應(yīng)用程序中。啟動時(shí)MobileLoader會根據(jù)規(guī)則把指定目錄的第三方的動態(tài)庫加載進(jìn)去,第三方的動態(tài)庫也就是我們寫的破解程序.

3、MobileHooker
MobileHooker顧名思義用于HOOK。它定義一系列的宏和函數(shù),底層調(diào)用objc的runtime和fishhook來替換系統(tǒng)或者目標(biāo)應(yīng)用的函數(shù).
其中有兩個(gè)函數(shù):

//MSHookMessageEx 主要作用于Objective-C方法
 void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP result)

//MSHookFunction 主要作用于C和C++函數(shù)
 void MSHookFunction(voidfunction,void* replacement,void** p_original)

Logos語法的%hook 就是對此函數(shù)做了一層封裝

!總結(jié)!
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容