一、HOOK概述
HOOK(鉤子) 其實(shí)就是改變程序執(zhí)行流程的一種技術(shù)的統(tǒng)稱!
009--HOOK原理
一鬼贱、HOOK概述
HOOK(鉤子) 其實(shí)就是改變程序執(zhí)行流程的一種技術(shù)的統(tǒng)稱!
iOS中HOOK技術(shù)的幾種方式
1作谚、Method Swizzle
利用OC的Runtime特性配深,動態(tài)改變SEL(方法編號)和IMP(方法實(shí)現(xiàn))的對應(yīng)關(guān)系鹏漆,達(dá)到OC方法調(diào)用流程改變的目的于购。主要用于OC方法袍睡。
2、fishhook
它是Facebook提供的一個動態(tài)修改鏈接mach-O文件的工具肋僧。利用MachO文件加載原理斑胜,通過修改懶加載和非懶加載兩個表的指針達(dá)到C函數(shù)HOOK的目的控淡。
3、Cydia Substrate
Cydia Substrate 原名為 Mobile Substrate 止潘,它的主要作用是針對OC方法掺炭、C函數(shù)以及函數(shù)地址進(jìn)行HOOK操作。當(dāng)然它并不是僅僅針對iOS而設(shè)計(jì)的凭戴,安卓一樣可以用涧狮。官方地址:http://www.cydiasubstrate.com/
Cydia Substrate主要由3部分組成:
-
MobileHooker
MobileHooker顧名思義用于HOOK。它定義一系列的宏和函數(shù)么夫,底層調(diào)用objc的runtime和fishhook來替換系統(tǒng)或者目標(biāo)應(yīng)用的函數(shù).
其中有兩個函數(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ù)做了一層封裝
-
MobileLoader
MobileLoader用于加載第三方dylib在運(yùn)行的應(yīng)用程序中者冤。啟動時MobileLoader會根據(jù)規(guī)則把指定目錄的第三方的動態(tài)庫加載進(jìn)去,第三方的動態(tài)庫也就是我們寫的破解程序.
-
safe mode
因?yàn)锳PP程序質(zhì)量參差不齊崩潰再所難免档痪,破解程序本質(zhì)是dylib涉枫,寄生在別人進(jìn)程里。 系統(tǒng)進(jìn)程一旦出錯腐螟,可能導(dǎo)致整個進(jìn)程崩潰,崩潰后就會造成iOS癱瘓愿汰。所以CydiaSubstrate引入了安全模式,在安全模 式下所有基于CydiaSubstratede 的三方dylib都會被禁用,便于查錯與修復(fù)乐纸。
iOS中HOOK技術(shù)的幾種方式
1衬廷、Method Swizzle
利用OC的Runtime特性,動態(tài)改變SEL(方法編號)和IMP(方法實(shí)現(xiàn))的對應(yīng)關(guān)系锯仪,達(dá)到OC方法調(diào)用流程改變的目的泵督。主要用于OC方法。
2庶喜、fishhook
它是Facebook提供的一個動態(tài)修改鏈接mach-O文件的工具小腊。利用MachO文件加載原理,通過修改懶加載和非懶加載兩個表的指針達(dá)到C函數(shù)HOOK的目的久窟。
3秩冈、Cydia Substrate
Cydia Substrate 原名為 Mobile Substrate ,它的主要作用是針對OC方法斥扛、C函數(shù)以及函數(shù)地址進(jìn)行HOOK操作入问。當(dāng)然它并不是僅僅針對iOS而設(shè)計(jì)的,安卓一樣可以用稀颁。官方地址:http://www.cydiasubstrate.com/
Cydia Substrate主要由3部分組成:
-
MobileHooker
MobileHooker顧名思義用于HOOK芬失。它定義一系列的宏和函數(shù),底層調(diào)用objc的runtime和fishhook來替換系統(tǒng)或者目標(biāo)應(yīng)用的函數(shù).
其中有兩個函數(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ù)做了一層封裝
-
MobileLoader
MobileLoader用于加載第三方dylib在運(yùn)行的應(yīng)用程序中匾灶。啟動時MobileLoader會根據(jù)規(guī)則把指定目錄的第三方的動態(tài)庫加載進(jìn)去棱烂,第三方的動態(tài)庫也就是我們寫的破解程序.
-
safe mode
因?yàn)锳PP程序質(zhì)量參差不齊崩潰再所難免,破解程序本質(zhì)是dylib阶女,寄生在別人進(jìn)程里颊糜。 系統(tǒng)進(jìn)程一旦出錯哩治,可能導(dǎo)致整個進(jìn)程崩潰,崩潰后就會造成iOS癱瘓。所以CydiaSubstrate引入了安全模式,在安全模 式下所有基于CydiaSubstratede 的三方dylib都會被禁用衬鱼,便于查錯與修復(fù)业筏。