Cydia Tweak
http://www.jianshu.com/p/8982e9670fc6
?
Cydia Substrate、MobileHooker
- MSHookMessageEx
- MSHookFunction
- MobileLoader
- Safe Mode
- Logos
下面進(jìn)行一一說(shuō)明
四、基本原理說(shuō)明
1,Cydia Substrate 和 Mobile Substrate
* Cydia Substrate 原名為 Mobile Substrate 已經(jīng)正式更名為 Cydia Substrate。
?
* 它是越獄后cydia插件/軟件運(yùn)行的一個(gè)基礎(chǔ)依賴包。提供軟件運(yùn)行的公共庫(kù),可以用來(lái)動(dòng)態(tài)替換
? 內(nèi)存中的代碼、數(shù)據(jù)等所以iOS系統(tǒng)越獄環(huán)境下安裝絕大部分插件,必須首先安裝Cydia Substrate。
?
* Cydia Substrate主要由3部分組成:MobileHooker,MobileLoader 和 safe mode。
2,MobileHooker、Logos
* MobileHooker用于替換覆蓋系統(tǒng)的方法,這個(gè)過(guò)程被稱為Hooking(掛鉤)
* 它主要包含兩個(gè)函數(shù):
void MSHookMessageEx(Class class, SEL selector, IMP replacement, IMP *result);
void MSHookFunction(void*function,void* replacement,void** p_original);
MSHookMessageEx 主要作用于Objective-C函數(shù)
MSHookFunction 主要作用于C和C++函數(shù)
Logos語(yǔ)法就是對(duì)此函數(shù)做了一層封裝,讓編寫hook代碼變的更直觀,上面的例子用的就是logos語(yǔ)法。
MSHookMessageEx 和MSHookFunction 使用方法這里就不介紹了,大家可去看書籍或者查詢相關(guān)資料。
3,MobileLoader
* MobileLoader用于加載第三方dylib在運(yùn)行的應(yīng)用程序中。
* 啟動(dòng)時(shí)MobileLoader會(huì)根據(jù)dylib的同名plist文件指定的作用范圍,有選擇的在不同進(jìn)程里通過(guò)dlopen函數(shù)打開(kāi)目錄/Library/MobileSubstrate/DynamicLibraries/ 下的所有dylib。
4,safe mode
* 因?yàn)锳PP程序質(zhì)量參差不齊崩潰再所難免,tweak本質(zhì)是dylib,寄生在別人進(jìn)程里,如果注入Springboard等。
? 系統(tǒng)進(jìn)程一旦出錯(cuò),可能導(dǎo)致整個(gè)進(jìn)程崩潰,崩潰后就會(huì)造成iOS癱瘓。
?
* 所以CydiaSubstrate引入了安全模式,在安全模
? 式下所有基于CydiaSubstratede 的三方dylib都會(huì)被禁用,便于查錯(cuò)與修復(fù)。
?
* 本人建議自己測(cè)試的時(shí)候如果HOOK Springboard的時(shí)候一定要注意!如果出錯(cuò),進(jìn)入安全模式刪除插件即可。
總結(jié):
在我的理解就是:我們?cè)赥weak.xm文件里用封裝后的logos語(yǔ)法編寫代碼(底層利用了MSHookMessageEx,MSHookFunction函數(shù),使用 Object-C 的runtime特性發(fā)送了method_setImplementation消息)然后theos自動(dòng)打包成dylib,上傳到/Library/MobileSubstrate/DynamicLibraries/里面后,重啟Springboard, 利用MobileLoader尋找目錄并根據(jù)dylib的同名plist文件加載里面的dylib動(dòng)態(tài)庫(kù),這時(shí)候當(dāng)我們?cè)俅蜷_(kāi)APP后執(zhí)行方法時(shí),方法就被替換了。
總結(jié)
以上是生活随笔為你收集整理的Cydia Tweak的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机课程成绩认定管理办法,全日制普通本
- 下一篇: 支付宝身份认证初始化服务40004未知的