Cydia的基石:MobileSubstrate

在MAC與IOS平臺(tái)上也拜,動(dòng)態(tài)庫(kù)的后綴一般是dylid坛善,而加載這些動(dòng)態(tài)庫(kù)的程序叫做dynamic linker(dyld)。這個(gè)程序有很多的環(huán)境變量來(lái)設(shè)置程序的一些行為吧史,最為常用的一個(gè)環(huán)境變量叫做"DYLD_INSERT_LIBRARIES"鼓鲁。它是一個(gè)使用冒號(hào)分隔的動(dòng)態(tài)庫(kù)路徑字符串蕴轨,表示一個(gè)將要加載運(yùn)行的動(dòng)態(tài)庫(kù)額外依賴的其它動(dòng)態(tài)庫(kù)。通過(guò)這個(gè)環(huán)境變量骇吭,我們就可以向應(yīng)用中注入自己的動(dòng)態(tài)庫(kù)橙弱,進(jìn)而改變應(yīng)用運(yùn)行時(shí)的特定行為。而這種方式,也正是mobileSubstrate所使用的最基本方法膘螟。

MobileSubstrate又叫Cydia Substrate成福,它是由Saurik開(kāi)發(fā)的一個(gè)框架碾局。第三方開(kāi)發(fā)者調(diào)用其API荆残,可以實(shí)現(xiàn)給IOS系統(tǒng)打補(bǔ)丁,改變系統(tǒng)或者應(yīng)用的運(yùn)行行為净当。隨著時(shí)間的發(fā)展内斯,Mobilesubstrate也不再僅僅局限于IOS平臺(tái),同樣提供了對(duì)Android平臺(tái)的支持像啼,同時(shí)也支持了c/c++俘闯。Mobile Substrate由MobileHooker/MobileLoader/SafeMode三部分組成。

MobileHooker是對(duì)外的API部分忽冻,它們主要用來(lái)替換系統(tǒng)的函數(shù)實(shí)現(xiàn)真朗。最主要的二個(gè)API見(jiàn)下圖:

MSHookMessage是非線程安全的,用于替換原函數(shù)實(shí)現(xiàn)僧诚。而MSHookMessageEx則是線程安全遮婶,二者主要是在OC的Runtime機(jī)制上實(shí)現(xiàn)的。MSHookFunction功能與上面兩個(gè)類似湖笨,但主要用于C/C++函數(shù)旗扑,與OC不同,它另有一套自己的實(shí)現(xiàn)方式慈省,有興趣的同學(xué)可以到其wiki上查閱臀防。

MobileLoader的主要功能是將指定目錄下的補(bǔ)丁文件(動(dòng)態(tài)庫(kù)文件)加載到指定的程序中。MobileLoader首先會(huì)將自己通過(guò)DYLD_INSERT_LIBRARIES加載到目錄程序中边败,然后它會(huì)在/Library/MobileSubstrate/DynamicLibraries/目錄下尋找需要加載的第三方補(bǔ)丁文件并使用dlopen加載它們袱衷。是否加載是通過(guò)一個(gè)plist文件來(lái)控制的,該文件中可以指定目標(biāo)程序的bundle id等笑窜。如下圖:

其中CoreFoundationVersion表示該庫(kù)的版本致燥,第一個(gè)值表示大于或等于,第二個(gè)值表示小于怖侦,具體的值見(jiàn)wiki篡悟。

Executables表示目標(biāo)程序可執(zhí)行文件的名稱。Bundles表示目標(biāo)程序的bundle id匾寝,Mode表示以上條件之間的邏輯關(guān)系搬葬,Any表示與運(yùn)算。

SafeMode的主要功能是容錯(cuò)處理艳悔。第三方開(kāi)發(fā)者通過(guò)MobileSubstrate向系統(tǒng)注入自定義代碼時(shí)急凰,如果考慮不周就可能導(dǎo)致終端設(shè)備處于崩潰的狀態(tài)。MobileLoader會(huì)捕獲這個(gè)崩潰異常,然后讓設(shè)備進(jìn)入SafeMode狀態(tài)抡锈,在這個(gè)狀態(tài)下疾忍,所有的第三方補(bǔ)丁都將被禁用,開(kāi)發(fā)者可以比較從容的恢復(fù)設(shè)備床三。

MobileSubstrate是cydia實(shí)現(xiàn)的基礎(chǔ)一罩,現(xiàn)有的越獄開(kāi)發(fā)環(huán)境一般使用的是THEOS或者iosopendev,這兩者h(yuǎn)ook功能都是對(duì)MobileSubstrate API的封裝撇簿。而MobileSubstrate又是基于DYLD_INSERT_LIBRARIES方式實(shí)現(xiàn)的聂渊,因此有些應(yīng)用(如美團(tuán))為了阻止他人的破解,采用了一些措施阻止了DYLD_INSERT_LIBRARIES這種注入方式四瘫,基本原理參見(jiàn)鏈接https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html汉嗽。方法是在應(yīng)用編譯時(shí)加入下圖的編譯參數(shù):

參考資料:

1.https://wizardforcel.gitbooks.io/ios-sec-wiki/content/chapter7/issue7-1.html

2.http://www.cydiasubstrate.com/inject/darwin/

3.http://blog.timac.org/?p=761

4.https://pewpewthespells.com/blog/blocking_code_injection_on_ios_and_os_x.html

5.http://bbs.iosre.com/t/tweak-app-app-tweak/438

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市找蜜,隨后出現(xiàn)的幾起案子饼暑,更是在濱河造成了極大的恐慌,老刑警劉巖洗做,帶你破解...
    沈念sama閱讀 222,681評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弓叛,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡竭望,警方通過(guò)查閱死者的電腦和手機(jī)邪码,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)咬清,“玉大人闭专,你說(shuō)我怎么就攤上這事【缮眨” “怎么了影钉?”我有些...
    開(kāi)封第一講書人閱讀 169,421評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)掘剪。 經(jīng)常有香客問(wèn)我平委,道長(zhǎng),這世上最難降的妖魔是什么夺谁? 我笑而不...
    開(kāi)封第一講書人閱讀 60,114評(píng)論 1 300
  • 正文 為了忘掉前任廉赔,我火速辦了婚禮,結(jié)果婚禮上匾鸥,老公的妹妹穿的比我還像新娘蜡塌。我一直安慰自己,他們只是感情好勿负,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,116評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布馏艾。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪琅摩。 梳的紋絲不亂的頭發(fā)上铁孵,一...
    開(kāi)封第一講書人閱讀 52,713評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音房资,去河邊找鬼蜕劝。 笑死,一個(gè)胖子當(dāng)著我的面吹牛志膀,可吹牛的內(nèi)容都是我干的熙宇。 我是一名探鬼主播鳖擒,決...
    沈念sama閱讀 41,170評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼溉浙,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蒋荚?” 一聲冷哼從身側(cè)響起戳稽,我...
    開(kāi)封第一講書人閱讀 40,116評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎期升,沒(méi)想到半個(gè)月后惊奇,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡播赁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,714評(píng)論 3 342
  • 正文 我和宋清朗相戀三年颂郎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片容为。...
    茶點(diǎn)故事閱讀 40,865評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乓序,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出坎背,到底是詐尸還是另有隱情替劈,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布得滤,位于F島的核電站陨献,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏懂更。R本人自食惡果不足惜眨业,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,211評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沮协。 院中可真熱鬧龄捡,春花似錦、人聲如沸皂股。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,699評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至就斤,卻和暖如春悍募,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洋机。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,814評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工坠宴, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绷旗。 一個(gè)月前我還...
    沈念sama閱讀 49,299評(píng)論 3 379
  • 正文 我出身青樓喜鼓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親衔肢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子庄岖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,870評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容