非越獄環(huán)境:
- OC的runtime特性,來(lái)動(dòng)態(tài)替換修改oc類(lèi)的方法履怯,但僅能針對(duì)OC語(yǔ)言
- fishhook facebook開(kāi)發(fā)的可hook C函數(shù)的類(lèi)庫(kù)终畅,參考這篇博文
越獄環(huán)境:
除了支持上面兩種Hook方式外宏所,越獄環(huán)境還支持MobileSubstrate(CydiaSubstrate)里面的MSHookFunction
現(xiàn)在我已知的大致有inlinehook、fishhook诈铛、runtime hook等等
inlinehook
目前已知的只能在越獄環(huán)境中實(shí)現(xiàn),如CydiaSubstrate的MSHookFunction就是一種inlinehook方式墨礁,其原理是對(duì)C函數(shù)的開(kāi)頭修改了匯編指令幢竹,使其跳轉(zhuǎn)到新的實(shí)現(xiàn),執(zhí)行完成后再返回執(zhí)行原指令恩静。
MSHookFunction即能hook帶符號(hào)的系統(tǒng)和自定義的C函數(shù)焕毫,也能hook只有地址的函數(shù),如在IDA/Hopper中顯示為sub_xxx的函數(shù)
CydiaSubstrate中還有一個(gè)MSHookMessageEx函數(shù)蜕企,主要是用來(lái)hook OC方法的咬荷,其原理就是基于OC的runtime,所以這個(gè)函數(shù)的使用在越獄和非越獄狀態(tài)下都能正常工作轻掩。
fishhook
它利用 MachO 文件加載原理,通過(guò)修改懶加載和非懶加載兩個(gè)表的指針達(dá)到 C 函數(shù) Hook 的目的參考這篇博文
還有這篇