官术网_书友最值得收藏!

第2章

越獄iOS平臺(tái)簡(jiǎn)介

相較于iOS應(yīng)用的高層表象,人們對(duì)其底層實(shí)現(xiàn)更感興趣,這也是大家進(jìn)行逆向工程的原動(dòng)力。

但是,我們也都知道,原版iOS是個(gè)對(duì)開發(fā)者封閉的黑盒子,直到Redsn0w等越獄組織對(duì)iOS進(jìn)行破解、越獄之后,這個(gè)盒子才被揭開,神秘的iOS系統(tǒng)得以完全展現(xiàn)在我們面前。

2.1 iOS系統(tǒng)架構(gòu)

對(duì)于原版(即未越獄)iOS,Apple官方并未提供直接訪問iOS文件系統(tǒng)的任何入口,iOS開發(fā)者只需要遵循規(guī)定,參考文檔即可完成工作,所以,純粹的App Store開發(fā)者可能對(duì)iOS系統(tǒng)的目錄結(jié)構(gòu)一無(wú)所知。

因?yàn)樯诚浼皺?quán)限的關(guān)系,從App Store下載的App不能訪問除自己目錄以外的絕大多數(shù)文件。這時(shí),可以借助Xcode,通過點(diǎn)擊Xcode→Organizer→Devices瀏覽指定App的目錄結(jié)構(gòu),如圖2-1所示。但是,這種方式也僅能訪問/var/mobile/Applications下的App目錄,而對(duì)系統(tǒng)里的其他目錄仍是束手無(wú)策。

圖2-1 使用Xcode查看App的目錄結(jié)構(gòu)

在越獄iOS中,用戶可通過安裝強(qiáng)大的第三方文件管理工具,如iFunBox、iExplorer或iFile等,訪問iOS全系統(tǒng)文件。圖2-2是用iFile查看iOS文件系統(tǒng)的界面,它可以直接讀取和修改系統(tǒng)中的任何文件,不用再顧慮嚴(yán)格的沙箱與權(quán)限限制。

至此,逆向工程的大門已經(jīng)向我們敞開了,一起來(lái)看看吧。

2.1.1 iOS目錄結(jié)構(gòu)

iOS是由Mac OS X演化而來(lái)的,而Mac OS X則是基于UNIX操作系統(tǒng)的,這三者雖然有很大區(qū)別,但它們血脈相連。從Filesystem Hierarchy Standard(文件系統(tǒng)層次標(biāo)準(zhǔn))和hier(7)中,可以一窺iOS目錄結(jié)構(gòu)設(shè)計(jì)的參考標(biāo)準(zhǔn)。

圖2-2 iFile 瀏覽文件目錄

Filesystem Hierarchy Standard(以下簡(jiǎn)稱FHS)為類UNIX操作系統(tǒng)的文件目錄結(jié)構(gòu)制定了一套標(biāo)準(zhǔn),制定這套標(biāo)準(zhǔn)的初衷之一是為了能讓用戶預(yù)知文件或目錄的存放位置;Mac OS X在此基礎(chǔ)上形成了自己的hier(7)框架。類UNIX操作系統(tǒng)的常見目錄結(jié)構(gòu)如下所示。

?/根目錄,以斜杠表示,其他所有文件和目錄在根目錄下展開。

?/bin:"binary"的簡(jiǎn)寫,存放提供用戶級(jí)基礎(chǔ)功能的二進(jìn)制文件,如ls、ps等。

?/boot:存放能使系統(tǒng)成功啟動(dòng)的所有文件,這些文件一般在內(nèi)核用戶程序開始執(zhí)行前得到調(diào)用。在iOS中此目錄為空。

?/dev:"device"的簡(jiǎn)寫,存放BSD設(shè)備文件。每個(gè)文件代表系統(tǒng)的一個(gè)塊設(shè)備或字符設(shè)備,一般來(lái)說(shuō),“塊設(shè)備”以塊為單位傳輸數(shù)據(jù),如硬盤;而“字符設(shè)備”以字符為單位傳輸數(shù)據(jù),如調(diào)制解調(diào)器。

?/sbin:"system binaries"的簡(jiǎn)寫,存放提供系統(tǒng)級(jí)基礎(chǔ)功能的二進(jìn)制文件,如netstat、reboot等。

?/etc:"et cetera"的簡(jiǎn)寫,存放系統(tǒng)腳本及配置文件,如passwd、hosts等。在iOS中,/etc是一個(gè)符號(hào)鏈接,實(shí)際指向/private/etc。

?/lib:存放系統(tǒng)庫(kù)文件、內(nèi)核模塊及設(shè)備驅(qū)動(dòng)等。iOS中此目錄為空。

?/mnt:"mount"的簡(jiǎn)寫,存放臨時(shí)的文件系統(tǒng)掛載點(diǎn)。iOS中此目錄為空。

?/private:存放兩個(gè)目錄,分別是/private/etc和/private/var。

?/tmp:臨時(shí)目錄。在iOS中,/tmp是一個(gè)符號(hào)鏈接,實(shí)際指向/private/tmp。

?/usr:包含了大多數(shù)用戶工具和程序。/usr/bin包含那些/bin和/sbin中未出現(xiàn)的基礎(chǔ)功能,如nm、killall等;/usr/include包含所有的標(biāo)準(zhǔn)C頭文件;/usr/lib存放庫(kù)文件。

?/var:"variable"的簡(jiǎn)寫,存放一些經(jīng)常更改的文件,比如日志、用戶數(shù)據(jù)、臨時(shí)文件等。其中/var/mobile/Applications下存放了所有App Store App,是要重點(diǎn)關(guān)注的目錄之一。

上述目錄中的內(nèi)容多用于系統(tǒng)底層,逆向難度較大,作為初學(xué)者,暫時(shí)不用在其中投入太多精力。從學(xué)和練的角度出發(fā),循序漸進(jìn),由易到難,從我們熟悉的內(nèi)容開刀,效率更高。

作為iOS開發(fā)者,日常操作所對(duì)應(yīng)的功能模塊大多來(lái)自iOS的獨(dú)有目錄,如下所示。

?/Applications:存放所有的系統(tǒng)App和來(lái)自Cydia的App,不包括App Store App。越獄的過程把/Applications變成了一個(gè)符號(hào)鏈接,實(shí)際指向/var/stash/Applications,如圖2-3所示。這個(gè)目錄也是我們要重點(diǎn)關(guān)注的目錄之一。

?/Developer:/Developer相對(duì)沒那么重要,它的出現(xiàn)完全是因?yàn)槲覀冊(cè)赬code連接iOS設(shè)備時(shí)選擇了"Use for Development",這個(gè)目錄的結(jié)構(gòu)如圖2-4所示。

?/Library:用來(lái)存放系統(tǒng)App的數(shù)據(jù)。其中最需要關(guān)注的是/Library/MobileSubstrate目錄,因?yàn)檫@個(gè)目錄中存放了所有基于MobileSubstrate的插件,其結(jié)構(gòu)如圖2-5所示。

在iOS系統(tǒng)中,MobileSubstrate是一個(gè)提供hook功能的基礎(chǔ)平臺(tái),運(yùn)行在這個(gè)平臺(tái)上的插件通常被稱為tweak。

圖2-3 /Applications目錄

圖2-4 /Developer目錄

圖2-5 /Library/MobileSubstrate目錄

從圖2-5中的文件列表中也可看到,/Library/MobileSubstrate下通常有3類文件。

?dylib:即Dynamic Library,也就是tweak插件。

?plist:用于配合dylib使用的filter文件,指定注入目標(biāo),其格式如下(將在第3章中詳細(xì)介紹):

Filter = {
  Bundles = (com.apple.springboard);
};

?disabled:被SBSettings禁用的tweak文件,圖2-5中的Weixin.disabled,其實(shí)就是把Weixin.dylib改了個(gè)名字,不讓MobileSubstrate加載而已。

?/System:iOS文件系統(tǒng)中最重要的目錄之一,包含了大量的系統(tǒng)組件,其目錄結(jié)構(gòu)如圖2-6所示。其中需要重點(diǎn)關(guān)注的有:

〇/System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各種framework,SDK文檔里提及的各種framework只是冰山一角,還有數(shù)不清的未公開功能等待我們?nèi)ネ诰颉?/p>

〇/System/Library/CoreServices里的SpringBoard.app:也就是桌面管理器,是用戶與系統(tǒng)交流的最重要的中介。

〇/System/Library/PreferenceBundles:其中的各種bundle提供了“設(shè)置”中的絕大多數(shù)功能,也是iOS逆向工程入門階段練習(xí)的好目標(biāo)。

?/User:用戶目錄,實(shí)際指向/var/mobile,其目錄結(jié)構(gòu)如圖2-7所示。

這個(gè)目錄里存放了大量的用戶數(shù)據(jù),比如:

?/var/mobile/Media/DCIM:照片目錄。

?/var/mobile/Library/SMS:短信目錄。

?/var/mobile/Library/Mail:郵件目錄。

?/var/wireless/Library/CallHistory:通話記錄。這個(gè)稍微特殊一點(diǎn),在iOS 4時(shí)代,通話記錄是存放在/var/mobile/Library/CallHistory下的。

另外一個(gè)非常重要的子目錄就是/var/mobile/Applications,里面存放的是通過App Store下載的App,如圖2-8所示。

圖2-6 System/Library目錄

圖2-7 /var/mobile目錄

圖2-8 /var/mobile/Applications目錄

在對(duì)iOS文件系統(tǒng)的目錄結(jié)構(gòu)有了初步了解之后就能夠針對(duì)感興趣的功能定位其對(duì)應(yīng)的文件,也可以開展下一步的工作了。

2.1.2 iOS文件權(quán)限

iOS是一個(gè)多用戶操作系統(tǒng)。“用戶”是一個(gè)抽象的概念,它代表對(duì)操作系統(tǒng)的所有權(quán)和使用權(quán),比如,mobile用戶是無(wú)法調(diào)用reboot命令重啟iOS系統(tǒng)的,而root用戶則可以;“組”是用戶的一種組織方式,一個(gè)組可以包含多個(gè)用戶,一個(gè)用戶也可以屬于多個(gè)組。

iOS中的每個(gè)文件都有一個(gè)屬主用戶和一個(gè)屬主組,或者說(shuō)這個(gè)用戶和這個(gè)組擁有這個(gè)文件;每個(gè)文件都具有一系列權(quán)限,簡(jiǎn)單地說(shuō),權(quán)限的作用在于說(shuō)明文件的屬主用戶能做什么,屬主組能做什么,以及其他所有人能做什么。iOS用3bit來(lái)表示文件的使用權(quán),從高位到低位分別是r(read)權(quán)限、w(write)權(quán)限以及x(execute)權(quán)限。文件與用戶的關(guān)系存在以下三種可能性:

?此用戶是屬主用戶。

?此用戶不是屬主用戶,但在屬主組里。

?此用戶既不是屬主用戶,又不在屬主組里。

因此,需要3×3bit來(lái)表示一個(gè)文件的權(quán)限,其中1bit如果置1,則代表生效,置0代表無(wú)效。例如,111101101代表rwxr-xr-x,即該文件的屬主用戶擁有r、w、x權(quán)限,而屬主組和其他所有人只具有r和x權(quán)限;同時(shí),二進(jìn)制的111101101轉(zhuǎn)換成十六進(jìn)制是755,也是一種常見的權(quán)限表示法。

2.2 iOS程序類型

越獄iOS中最常見的程序有Application、Dynamic Library和Daemon三類。在當(dāng)前階段,逆向工程的目標(biāo)仍是這三類程序,對(duì)它們的了解越深入,逆向工程就會(huì)越順利。這三類是不同類型的程序,分工不同,其目錄結(jié)構(gòu)和文件權(quán)限也有較大區(qū)別。下面一起來(lái)看看吧。

2.2.1 Application

Application就是我們常說(shuō)的應(yīng)用程序,簡(jiǎn)稱App,其意義早已為所有iOS開發(fā)人員熟知。不過,在本節(jié)中還是要對(duì)Application的概念作一個(gè)完整的回顧和補(bǔ)充。

1.bundle

在iOS這個(gè)體系中,bundle的概念來(lái)源于NeXTSTEP,其實(shí)它就是一個(gè)按某種標(biāo)準(zhǔn)結(jié)構(gòu)來(lái)組織的目錄,其中包含可執(zhí)行程序以及運(yùn)行所需的資源。App、framework和PreferenceBundle都是以bundle的形式存在的,當(dāng)你將某個(gè)bundle確立為逆向目標(biāo)后,絕大多數(shù)逆向資源都可以在bundle內(nèi)找到,大大減少了逆向工程的工作量。

2.App的結(jié)構(gòu)

在App Store中只能發(fā)布App這一種類型的程序,絕大多數(shù)iOS開發(fā)者對(duì)App的結(jié)構(gòu)很熟悉;但在越獄iOS平臺(tái)上,還有兩類App形式的存在:WeeApp(即依附于Notification Center的App)和PreferenceBundle(即依附于Settings的App),它們的結(jié)構(gòu)與App類似,常見于Cydia平臺(tái),這里也把它們看做是App。

framework的結(jié)構(gòu)與App類似,但framework的bundle中存放的是一個(gè)動(dòng)態(tài)鏈接庫(kù),而不是可執(zhí)行程序;相對(duì)來(lái)說(shuō),framework在逆向工程中的地位比App更高,因?yàn)橐粋€(gè)App的絕大多數(shù)功能都是通過調(diào)用framework提供的接口來(lái)實(shí)現(xiàn)的。

在逆向工程時(shí),主要關(guān)注App中的以下三個(gè)部分。

(1)Info.plist

Info.plist記錄App的基本信息,如bundle identifier(唯一標(biāo)識(shí)符)、可執(zhí)行文件名、圖標(biāo)文件名等。

這個(gè)文件之所以如此重要,是因?yàn)楹竺娴拈_發(fā)調(diào)試過程中會(huì)利用MobileSubstrate對(duì)App進(jìn)行hook(鉤取、注入),獲取正確的bundle identifier是成功逆向的第一前提。圖2-9是WhatsApp的Info.plist。

圖2-9 Info.plist詳情

(2)Executable(可執(zhí)行程序)

App的執(zhí)行入口,也是逆向工程最主要的目標(biāo)之一,得到它之后,馬上斧鉞加身,class-dump、IDA還有GDB等重磅武器都會(huì)攻擊它。圖2-10是筆者開發(fā)的一個(gè)聯(lián)系人信息優(yōu)化App,打開之后即可在目錄結(jié)構(gòu)中看到對(duì)應(yīng)的可執(zhí)行文件(即Info.plist中的"Executable file")。

圖2-10 App的目錄內(nèi)容

(3)Resources(資源文件)

圖標(biāo)、圖片、聲音、配置文件、nib文件以及各種App運(yùn)行時(shí)用到的資源文件,同樣可見于圖2-10。其中,各種本地化字符串(.strings)是定位逆向目標(biāo)的重要線索。

3./Applications和/var/mobile/Applications

/Applications目錄用于存放系統(tǒng)App及從Cydia下載的App,如圖2-11所示,在此目錄下有來(lái)自Cydia的iFile.app和iOS自帶的MobileMail.app。

而/var/mobile/Applications目錄存放的則是從App Store下載的App。

圖2-11 Applications目錄

兩者都是App文件,目錄結(jié)構(gòu)區(qū)別不大,但前者的屬主用戶和屬主組一般是root和admin,后者的屬主用戶和屬主組都是mobile,因而它們擁有不同的權(quán)限。不同的越獄工具對(duì)兩者sandbox(沙箱)的影響不同,一般來(lái)說(shuō),前者的sandbox比后者的限制要少很多。

順便提一下,/Applications目錄中App安裝包的格式多為deb,而/var/mobile/Applications目錄中App安裝包的格式則為ipa,由此又引申出了iOS平臺(tái)上的不同安裝包格式。

(1)deb

deb格式是Debian 系統(tǒng)(包含Debian 和Ubuntu)專屬安裝包格式,配合APT 軟件管理系統(tǒng)使用,是當(dāng)前Linux下非常流行的一種安裝包格式,是由Cydia 作者Jay Freeman(saurik)移植到iOS中的。

由于UNIX類系統(tǒng)對(duì)權(quán)限、所有者、組的要求很嚴(yán)格,而deb 格式安裝包又經(jīng)常會(huì)涉及系統(tǒng)比較底層的操作,可以獲取較高的權(quán)限,所以從Cydia下載的App都是deb格式的。

(2)ipa

ipa格式是蘋果公司在iOS 平臺(tái)上推出的專屬軟件安裝包,在2.0的固件發(fā)布后才正式投入使用,是目前iOS中唯一的官方安裝包格式。

ipa的文件權(quán)限很小,sandbox限制很大,訪問資源十分有限,這一點(diǎn)早已為廣大開發(fā)人員所熟知。

(3)pxl

pxl格式起源于Mac 系統(tǒng)上的pkg 安裝包,在1.x固件時(shí)代被廣泛應(yīng)用,曾經(jīng)是iOS平臺(tái)上唯一的軟件安裝包,現(xiàn)在只有91手機(jī)助手等少數(shù)平臺(tái)在使用,基本上可以忽略它的存在。

4.sandbox

通俗地說(shuō),iOS中的sandbox就是一種訪問限制機(jī)制。它是iOS最核心的安全部件之一,其實(shí)現(xiàn)很復(fù)雜,這里不過多討論其實(shí)現(xiàn)細(xì)節(jié),只列舉兩個(gè)主要現(xiàn)象供大家參考。

(1)文件訪問

總的來(lái)說(shuō),sandbox會(huì)將App的文件訪問限制在這個(gè)App的bundle內(nèi)部,因此一個(gè)App不知道其他App的存在,更別說(shuō)訪問它們了。

不過,App可以通過framework來(lái)訪問諸如照片、歌曲、通訊錄等系統(tǒng)數(shù)據(jù)。

(2)硬件調(diào)用

App可以通過framework來(lái)調(diào)用攝像頭、GPS模塊等硬件。跟文件訪問一樣,因?yàn)檫@些操作要通過framework來(lái)進(jìn)行,所以App的作用范圍還是在iOS的控制之內(nèi)。

在初學(xué)階段,我們的目標(biāo)不是逆向sandbox,所以知道以上兩點(diǎn)就夠用了。在iOS逆向工程中,越獄操作已經(jīng)破除了iOS的絕大多數(shù)安全限制,而這一點(diǎn)往往被我們忽略了。有時(shí)會(huì)碰到一些看似奇怪的問題,比如某個(gè)tweak不能寫文件,或者通過objc_getClass函數(shù)獲取不到類等,在確保自己的代碼沒有問題的前提下,這時(shí)就要回過頭來(lái)檢查這些問題是不是由對(duì)權(quán)限或者sandbox的誤解造成的。

2.2.2 Dynamic Library

大部分的iOS開發(fā)者可能都沒有接觸過Dynamic Library的概念,因?yàn)槊嫦駻pp Store的App用不到它。但是放眼望去,Cydia中的tweak插件無(wú)一不是以Dynamic Library的形式工作的,正是這些tweak插件的存在讓我們能夠隨意定制自己的iOS。所以,有必要了解Dynamic Library的基本知識(shí)。

Static Library的概念很簡(jiǎn)單,在一個(gè)App啟動(dòng)時(shí),系統(tǒng)會(huì)把App的代碼和它所鏈接的Static Library一股腦放進(jìn)分配好的內(nèi)存空間里,不過因?yàn)橐淮涡约虞d的內(nèi)容過多,會(huì)造成App啟動(dòng)慢。

Dynamic Library則相對(duì)“智能”一些,只有當(dāng)App要用到這個(gè)Library時(shí),系統(tǒng)才把這個(gè)Library加載進(jìn)內(nèi)存。具體來(lái)說(shuō),當(dāng)一個(gè)App啟動(dòng)時(shí),iOS內(nèi)核創(chuàng)建一個(gè)新進(jìn)程,然后把App的代碼加載到新進(jìn)程的內(nèi)存空間里;同時(shí)內(nèi)核還會(huì)啟動(dòng)Dynamic Loader(/usr/lib/dyld),把App需要的Dynamic Library加載進(jìn)App的內(nèi)存空間。

值得一提的是,雖然Dynamic Library的功能非常強(qiáng)大,但其本身并不是可執(zhí)行程序,而是以類似插件的形式存活在一個(gè)App中的,是這個(gè)App的一部分。所以,Dynamic Library的權(quán)限及內(nèi)存空間是由加載它的那個(gè)App決定的,比如你寫了一個(gè)Instagram的tweak插件,用來(lái)將你喜歡的圖片保存在本地,如果你的保存目錄是/var/mobile/Applications/InstagramGUID/Documents,那么這樣操作沒有問題,你的tweak插件能夠非常好地工作;如果你想保存在/Developer下,而你又沒注意或忘記了這個(gè)tweak插件是存活在一個(gè)App Store App里,那么可能在興高采烈地保存了一大堆美圖,準(zhǔn)備回頭細(xì)細(xì)品味時(shí),卻發(fā)現(xiàn)/Developer里啥也沒有——你的寫操作都被sandbox給禁掉了。

2.2.3 Daemon

相信本書的絕大部分讀者從接觸iOS開發(fā)的第一天起,就不斷被Apple灌輸這樣一個(gè)觀念——iOS中沒有真正的后臺(tái)多任務(wù),你的App在后臺(tái)將被大大限制從iOS7開始,官方已經(jīng)支持真正的后臺(tái)多任務(wù)了。。如果你是一個(gè)純粹的App Store開發(fā)者,堅(jiān)信并堅(jiān)守這個(gè)觀念,那么它將是你的App通過Apple審核的助推劑;但既然你閱讀了這本書,想要了解一些官方文檔沒有闡述的事實(shí),那么你就要保持冷靜,謹(jǐn)慎思考,讓我們一起回想一下iPhone上的一些現(xiàn)象。

1)當(dāng)我們正在用iPhone上網(wǎng)或刷微博,接到一個(gè)電話,所有其他操作會(huì)立即中斷,系統(tǒng)第一時(shí)間將接聽電話的界面呈現(xiàn)在用戶面前。如果iOS中沒有后臺(tái)多任務(wù),系統(tǒng)是如何迅速響應(yīng)這個(gè)來(lái)電的呢?

2)相信很多越獄手機(jī)上都裝了360、QQ手機(jī)助手等類似的軟件,用來(lái)攔截垃圾短信、騷擾電話。出于對(duì)巨頭們的不完全信任,以及同臺(tái)競(jìng)技的小小需求,筆者也做了一款這樣的手機(jī)助手軟件——SMSNinja。如果iOS中沒有后臺(tái)多任務(wù),SMSNinja這類助手軟件如何保證自己能及時(shí)處理收到的短信呢?

3)Backgrounder是一款幫助App實(shí)現(xiàn)真正后臺(tái)運(yùn)行的強(qiáng)大插件,有了它,再也不用擔(dān)心因?yàn)閜ush功能的不給力而漏收即時(shí)信息啦!如果iOS中沒有真正的后臺(tái)多任務(wù),Backgrounder怎么會(huì)存在呢?

這些現(xiàn)象無(wú)一不說(shuō)明iOS中是存在真正的后臺(tái)多任務(wù)的,那么難道是Apple說(shuō)錯(cuò)了?并不是!對(duì)于App Store App來(lái)說(shuō),當(dāng)用戶按下home鍵,程序就進(jìn)入后臺(tái)了,大多數(shù)功能都會(huì)被暫停;也就是說(shuō),對(duì)于遵紀(jì)守法的App Store開發(fā)者來(lái)說(shuō),可以把iOS看做是沒有真正后臺(tái)多任務(wù)的系統(tǒng),因?yàn)槟阄ㄒ荒芨傻氖虏恢С趾笈_(tái)多任務(wù)。但iOS是基于Mac OS X的,后者又跟所有類UNIX操作系統(tǒng)一樣,有daemon(即守護(hù)進(jìn)程,Windows稱Service)的概念,隨著越獄iOS全文件系統(tǒng)的開放,daemon也展現(xiàn)在我們面前。

daemon存在的意義就是后臺(tái)運(yùn)行,為用戶使用操作系統(tǒng)提供各種“守護(hù)”,如imagent保障iMessage的正確收發(fā),mediaserverd處理幾乎所有的音頻、視頻,syslogd記錄系統(tǒng)日志等。

iOS系統(tǒng)中的daemon主要由一個(gè)可執(zhí)行文件和一個(gè)plist文件構(gòu)成。iOS的根進(jìn)程是/sbin/launchd,會(huì)在開機(jī)或接到命令時(shí)檢查/System/Library/LaunchDaemons和/Library/Daemons下所有符合格式規(guī)定的plist文件,然后按需啟動(dòng)對(duì)應(yīng)的daemon。這里的plist文件與App中的Info.plist文件作用類似,記錄了daemon的基本信息。

相對(duì)于App,daemon提供的功能要底層得多,逆向難度也要大得多,如果對(duì)某個(gè)daemon的認(rèn)識(shí)不夠成熟,隨意更改它可能導(dǎo)致系統(tǒng)崩潰。當(dāng)你在iOS逆向工程上有了一定的積累后,就可以挑戰(zhàn)這些daemon了,雖然相比App,花費(fèi)的精力會(huì)更多,但它們也會(huì)給你更豐厚的回報(bào)。例如,前段時(shí)間剛剛發(fā)布的“iOS第一款電話錄音軟件”Audio Recorder就是通過逆向/usr/sbin/mediaserverd這個(gè)daemon實(shí)現(xiàn)的。

2.3 小結(jié)

本章介紹了iOS系統(tǒng)架構(gòu)和iOS中的常見程序類型,App Store開發(fā)者一般不需要了解也接觸不到這些知識(shí),容易形成概念盲區(qū)。本章旨在科普那些在逆向工程中非常重要但Apple官方閉口不提的iOS系統(tǒng)知識(shí)點(diǎn),為App Store開發(fā)者打開iOS系統(tǒng)中的另一扇門。

就本章所涉及的知識(shí)點(diǎn),將其內(nèi)容擴(kuò)充成一整本書都不為過,但作為逆向工程的初學(xué)者,了解這些內(nèi)容就已足夠?yàn)槲覀兊哪嫦蛑烽_一個(gè)好頭了。

主站蜘蛛池模板: 郓城县| 卓资县| 信宜市| 郴州市| 元朗区| 贺州市| 平邑县| 绥阳县| 正宁县| 砚山县| 德格县| 西青区| 肃南| 宝坻区| 东乌| 芮城县| 顺昌县| 九江市| 哈巴河县| 游戏| 西林县| 庆安县| 朝阳区| 昌平区| 长兴县| 马边| 西盟| 宁国市| 观塘区| 沾益县| 鄱阳县| 喀喇沁旗| 稻城县| 海原县| 来安县| 山丹县| 融水| 永德县| 林口县| 长沙市| 西昌市|