2.2 iOS二進(jìn)制文件類型(個(gè)人筆記)

在iOS逆向工程初學(xué)階段蜈敢,我們的目標(biāo)主要是 Application撕氧、Dynamic Library(以下簡(jiǎn)稱dylib)Daemon這三類二進(jìn)制文件腐宋,對(duì)它們的了解越深入无蜂, 逆向工程就會(huì)越順利伺糠。這三類文件分工不同,其目錄 結(jié)構(gòu)和文件權(quán)限也有一些區(qū)別酱讶。

Application

Application就是我們最熟悉的App了退盯。了解下面的幾個(gè)App相關(guān)概念,是
開(kāi)始逆向工程前的必備工作。

bundle:概念來(lái)源于NeXTSTEP,是一個(gè)按某種標(biāo)準(zhǔn)結(jié)構(gòu)來(lái)組織的目錄渊迁,其中包含了二進(jìn)制文件及運(yùn)行所需的資源慰照。正向開(kāi)發(fā)中常見(jiàn)的App和framework都是以bundle的形式存在的;在越獄iOS中常見(jiàn)的PreferenceBundle琉朽,可以看成是一種依附于Settings的App毒租,結(jié)構(gòu)與App類似,本質(zhì)也是bundle箱叁。Framework也是bundle墅垮,但framework的bundle中存放的是一個(gè)dylib,而不是可執(zhí)行文件耕漱。
App目錄結(jié)構(gòu):App目錄的以下三個(gè)部分比較重要:

  • Info.plist:Info.plist記錄了App的基本信息算色,如bundle identifier、可執(zhí)行文件名螟够、圖標(biāo)文件名等灾梦。其中bundle identifier會(huì)在后續(xù)章節(jié)的CydiaSubstrate中成為 tweak的重要配置信息〖梭希可以通過(guò)Xcode查看它的值若河,也可以通過(guò)Xcode自帶的命令行工具plutil查看它的值。
  • 可執(zhí)行文件:同樣可以通過(guò)Xcode和plutil兩種方式來(lái)查看Info.plist寞宫,定位可執(zhí)行文件萧福。也可以通過(guò)Xcode自帶的命令行工具plutil查看它的值“Executable File”。
  • lproj目錄:proj目錄下存放的是各種本地化的字符串(.strings)辈赋,是iOS逆向工程的重要線索鲫忍,也可以用plutil查看。

系統(tǒng)App VS StoreApp:/Applications/目錄存放系統(tǒng)App和從Cydia下載的App(我們把來(lái)自Cydia的App視為系統(tǒng)App)炭庙。而/var/mobile/Containers/目錄存放的則是StoreApp饲窿。雖然兩者都是App,但它們?cè)谌缦路矫娲嬖谥恍┎顒e:

  • 目錄結(jié)構(gòu):數(shù)據(jù)目錄的位置不同:StoreApp的數(shù)據(jù)目錄在/var/mobile/Containers/Data/下焕蹄,以mobile權(quán)限運(yùn)行的系統(tǒng)App的數(shù)據(jù)目錄在/var/mobile/下,而以root權(quán)限運(yùn)行的系統(tǒng)App的數(shù)據(jù)目錄在/var/root/下阀溶。
  • 安裝包格式與權(quán)限:Cydia App的安裝包格式一般是deb腻脏,StoreApp的 安裝包格式一般是ipa。其中deb是來(lái)自Debian的安裝 包格式银锻,由Cydia作者saurik移植到iOS中永品,它的屬主 用戶和屬主組一般是root和admin,能夠以root權(quán)限運(yùn) 行击纬;而ipa是蘋(píng)果為iOS推出的專屬App安裝包格式鼎姐, 屬主用戶和屬主組都是mobile,只能以mobile權(quán)限運(yùn) 行。
  • 沙盒(sandbox):iOS中的沙盒就是一種訪問(wèn)限制機(jī)制炕桨,我們可以把它看作是權(quán)限的一種表現(xiàn)形式饭尝,授權(quán)文件(entitlements)也是沙盒的一部分。它是iOS最核心的安全組件之一献宫≡科剑總的來(lái)說(shuō),沙盒會(huì)將App的文件訪問(wèn)范圍限制在這個(gè)App內(nèi)部姊途,一個(gè)App一般不知道其他App的存在涉瘾,更別說(shuō)訪問(wèn)它們了;沙盒還會(huì)限制App的功能捷兰,例如對(duì)iCloud接口的調(diào)用就必須經(jīng)過(guò)沙盒的允許立叛。

Dynamic Library

在Xcode工程里導(dǎo)入的各種framework,鏈接的各種lib贡茅,其實(shí)本質(zhì)都是dylib秘蛇。如果把焦點(diǎn)轉(zhuǎn)移到越獄iOS中,Cydia里的各種tweak無(wú)一不是以dylib的形式工作的友扰,正是這些tweak的存在讓我們能夠隨意定制自己的iOS彤叉。在逆向工程中,我們會(huì)頻繁接觸各種dylib村怪,因此有必要了解一些相關(guān)知識(shí)秽浇。

在iOS中,lib分為static和dynamic兩種甚负,其中staticlib在編譯階段成為App可執(zhí)行文件的一部分柬焕,會(huì)增加可執(zhí)行文件的大小。因?yàn)锳pp尺寸變大梭域,啟動(dòng)時(shí)需要加載的內(nèi)容變多斑举,所以可能會(huì)導(dǎo)致App啟動(dòng)變慢。dylib則相對(duì)“智能”一些病涨,它不會(huì)改變可執(zhí)行文件的大小富玷,只有當(dāng)App需要用到這個(gè)dylib時(shí),iOS才會(huì)把它加載進(jìn)內(nèi)存既穆,成為App進(jìn)程的一部分赎懦。

值得一提的是,dylib雖然充斥在iOS的各個(gè)角落幻工,是逆向工程的重要目標(biāo)類型励两,但其本身并不是可執(zhí)行文件,不能獨(dú)立運(yùn)行囊颅,只能為別的進(jìn)程服務(wù)当悔,而且它們寄生在別的進(jìn)程里傅瞻,成為了這個(gè)進(jìn)程的一部分。因此盲憎,dylib的權(quán)限是由它寄生的那個(gè)App決定的嗅骄,同一個(gè)dylib寄生在系統(tǒng)App和StoreApp里時(shí)的權(quán)限是不同的。

例如焙畔,你寫(xiě)了一個(gè)Instagram的tweak掸读,用來(lái)把喜歡的圖片保存在本地,如果保存目錄是/var/mobile/Containers/Data/下App對(duì)應(yīng)的Documents目錄宏多,那么因?yàn)镮nstagram是一個(gè)StoreApp儿惫,這樣的操作是沒(méi)有問(wèn)題的,tweak能夠正常工作伸但。而如果保存目錄是/var/mobile/Documents肾请,那么在興高采烈地保存了一大堆美圖,準(zhǔn)備回頭細(xì)細(xì)品味時(shí)更胖,你就會(huì)發(fā)現(xiàn)/var/mobile/Documents里啥圖片也沒(méi)有——操作都被sandbox給禁掉了铛铁。

Daemon

Daemon為后臺(tái)運(yùn)行而生,給用戶提供了各種“守護(hù)”却妨,如imagent保障了iMessage的正確收發(fā)饵逐,mediaserverd處理了幾乎所有的音頻、視頻彪标,syslogd則用于記錄系統(tǒng)日志等倍权。

iOS中的daemon主要由一個(gè)可執(zhí)行文件和一個(gè)plist文件構(gòu)成。iOS的根進(jìn)程是launchd捞烟,它會(huì)在開(kāi)機(jī)時(shí)檢查/System/Library/LaunchDaemons和/Library/LaunchDaemons下所有格式符合規(guī)定的plist文件薄声,然后啟動(dòng)對(duì)應(yīng)的daemon。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末题画,一起剝皮案震驚了整個(gè)濱河市默辨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苍息,老刑警劉巖缩幸,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竞思,居然都是意外死亡桌粉,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)衙四,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人患亿,你說(shuō)我怎么就攤上這事传蹈⊙罕疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵惦界,是天一觀的道長(zhǎng)挑格。 經(jīng)常有香客問(wèn)我,道長(zhǎng)沾歪,這世上最難降的妖魔是什么漂彤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮灾搏,結(jié)果婚禮上挫望,老公的妹妹穿的比我還像新娘。我一直安慰自己狂窑,他們只是感情好媳板,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著泉哈,像睡著了一般蛉幸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丛晦,一...
    開(kāi)封第一講書(shū)人閱讀 49,071評(píng)論 1 285
  • 那天奕纫,我揣著相機(jī)與錄音逸绎,去河邊找鬼田巴。 笑死饮睬,一個(gè)胖子當(dāng)著我的面吹牛蛮原,可吹牛的內(nèi)容都是我干的喂江。 我是一名探鬼主播蔗蹋,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼怀酷,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼须教!你這毒婦竟也來(lái)了煤率?” 一聲冷哼從身側(cè)響起仰冠,我...
    開(kāi)封第一講書(shū)人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蝶糯,沒(méi)想到半個(gè)月后洋只,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡昼捍,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年识虚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒茬。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡担锤,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乍钻,到底是詐尸還是另有隱情肛循,我是刑警寧澤铭腕,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站多糠,受9級(jí)特大地震影響累舷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夹孔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一被盈、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧搭伤,春花似錦只怎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至佑菩,卻和暖如春盾沫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背殿漠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工赴精, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绞幌。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓蕾哟,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親莲蜘。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谭确,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

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