iOS逆向工程(1)越獄平臺介紹

前提

(1)什么是越獄:
  • 越獄是指通過分析iOS系統代碼,找出iOS系統漏洞,繞過系統安全防護,獲取系統root權限的過程。

  • 越獄過后就可以訪問設備的整個文件系統、更改系統外觀,功能等。

(2)Cydia是什么:

在手機越獄后,會自動安裝一個叫Cydia的軟件,這個軟件相當于針對越獄設備的App Store,里面有很多類似 系統修改、應用插件,破解插件等相關的軟件包。

一、逆向工程的要求

1,具備豐富的 iOS 開發經驗。
2,最好能非常熟悉 iOS 設備的硬件構成,iOS 系統的運行原理。
3,拿到任意一個 App 之后能夠大致推斷出它的項目規模和使用的技術,比如它的MVC模型
是怎么建立的,引用了哪些 framework 和經典的開源代碼。
個人建議:最好了解下如何進iOS系統的安全模式,因為有時候萬一系統搞壞了,可以進入安全模式卸載掉有問題的插件。

其它要求
1,一臺越獄過的iOS設備(可利用PP助手進行越獄。)
2,設備安裝了Open SSH,用于傳輸文件等作用,可以在Cydia里面搜索到。
如果你目前還不具備這些充分條件,那么一定要滿足兩個必要條件:
-------- (強烈的好奇心)(契而不舍的精神)--------

二、iOS 應用逆向工程的作用

1,一般的 App 防護,感覺就像是一個 , 將 App 的 MVC 布置在城堡內部 , 外圍圈上厚厚的 ,看上去易守難攻。


防御良好的 (圖片來自 客信條)

但是當我們站到高處,在天空中俯瞰這個 App 所在的城堡,它的內部結構就不再是秘密。


(圖片來自 刺客信條)

如果我們站在巨人的角度,那么所有的 Objective-C 函數定義、所有的 property、所有的導出函數、所有的全局變量、所有的邏輯將完全暴露在我們面前。

iOS 逆向工程主要有兩個作用:
1,分析目標程序,拿到關鍵信息,可以歸類于安全相關的逆向工程;
2,借鑒他人的程序功能來開發自己的軟件。

三、安全相關的iOS逆向工程

  1. 評定安全等級
  2. 逆向惡意軟件
  3. 檢查軟件后門
  4. 去除軟件使用限制

四、開發相關的iOS逆向工程

  1. 逆向系統API
    可逆向系統API后,擴展iOS系統的功能,眾所周知,能在 AppStore 上架的 App 的功能十分有限,在蘋果公司嚴格的審核制度下,絕大多數 App 的實現都源于公開的開發文 ,而不能使用例如發短信、打電話等文檔中不涉及的功能。
  2. 借鑒別人的軟件
    比如通過逆向那些軟件,可以從 App 中把它們的設計思路抽象出來為我所用,從而提高自己 App 的精致程度。

五、iOS應用逆向工具

1,監測工具Reveal:能夠輔助定位 App 中我們感興趣的部分,讓我們能夠迅速從 UI 層面切入代碼層面。
2,反匯編工具:IDA和Hopper
3,調試工具:LLDB調試器
4,Theos 和iOSOpenDev

一、iOS 系統結構

1,對于未越獄的 iOS設備,蘋果官方開放給第三方直接訪問 iOS文件系統的接口非常有限。
2,越獄后能夠訪問 iOS 全系統文件,這是開展 iOS 逆向工程的首要前提。

二、iOS 目錄結構簡介

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

/bin:
“binary”的簡寫,存放提供用戶級基礎功能的二進制文件,如 ls、ps 等。

/boot:
存放能使系統成功啟動的所有文件。iOS 中此目錄為空。

/dev:
“device”的簡寫,存放BSD設備文件。每個文件代表系統的一個塊設備或字符設備,一般來說,“ 設備”以塊為單位傳 數據,如硬盤;而“字符設備”以字符為單位傳輸數據,如調制解調器。

/sbin :
“ system binaries”的簡寫,存放提供系統級基礎功能的二進制文件,如 netstat、reboot 等。

/etc :
“Et Cetera”的簡寫,存放系統腳本及配置文件,如 passwd、hosts 等。在 iOS中,/etc 是一個符號鏈接,實際指向 /private/etc。

/lib:
存放系統庫文件、內核模塊及設備驅動等。iOS 中此目錄為空。

/mnt:
“mount”的簡寫,存放臨時的文件系統掛載點。iOS 中此目錄為空。

/tmp:
臨時目錄。在 iOS 中,/tmp 是一個符號鏈接,實際指向 /private/var/tmp。

/usr:
包含了大多數用戶工具和程序。/usr/bin包含那些/bin和/sbin中未出現的基礎功能,如 nm、killall 等;/usr/include 包含所有的標準C 頭文件;

/usr/lib:
存放系統庫文件。

/var :
“ variable”的簡寫,存放一些經常更改的文件,比如日志、用戶數據、臨時文件等。

/var/mobile和 /var/root 分別存放了 mobile 用戶和 root 用戶的文件,是重點關注的目錄。

iOS 的獨有目錄:

/Applications:
存放所有的系統App和來自于Cydia的App,不包括 StoreApp。

/Developer:
如果一臺設備連接Xcode后被指定為調試要的工具和數據,

/Library:
存放一些提供系統支持的數據,其中/Library/MobileSubstrate 下存放了所有基于 CydiaSubstrate(原名 MobileSubstrate)的插件。

/System/Library :
iOS 文件系統中最重要的目錄之一,存放大量系統組件,其目錄結構

/System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各種 framework,其中出現在 SDK 文檔里的只是冰山一角,還有數不清的未公開功能等待我們去挖 。

/System/Library/CoreServices里的SpringBoard.app:
iOS 面管理器(類似于Windows里的explorer),是用戶與系統交流的最重要中介。

/User:
用戶目錄,實際指向/var/mobile,這個目錄里存放大量用戶數據,比如:
● /var/mobile/Media/DCIM下存放照片;
● /var/mobile/Media/Recordings下存放錄音文件;
● /var/mobile/Library/SMS下存放短信數據 ;
● /var/mobile/Library/Mail下存放郵件數據。

上面的介紹只是整個 iOS 目錄結構的九牛一毛,更詳細的討論,盡在 http://bbs.iosre.com

三、iOS 二進制文件類型

在iOS逆向工程初學階段,我們的目標主要是Application、Dynamic Library(以下 dylib)和 Daemon 這三類二進制文件。

1, Application相關概念
bundle:是一個按某種標準結構來組織的目錄,其中包含了二進制文件及運行所需的資源。正向開發中常見的 App 和 framework都是以bundle的形式存在的;在越獄iOS中常見的PreferenceBundle,可以看成是一種依附于Settings 的 App。Settings 的 App,結構與 App 類似,本質也是 bundle。

Framework 也是 bundle,但 framework 的 bundle 中存放的是一個 dylib,而不是可執行文件。相對來說,framework的地位比 App 更高,因為一個 App 的絕大多數功能都是通過調用 framework 提供的接口來實現的。將某個 bundle 確立為逆向目標后,絕大多數逆向線索都可以在 bundle 內找到,這大大 低了逆向工程的復雜度。

App 目錄 :
Info.plist 文件記錄了App的基本信息,如bundle identifier、可執行文件名、圖標文件名等。
可以通過 Xcode 自帶的命 行工具 plutil 查看bundle identifier的值,如下:

plutil -p /Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5
/SiriViewService.app/Info.plist | grep CFBundleIdentifier

lproj目錄:lproj目錄下存放的是各種本地化的字符 (.strings),是iOS逆向工程的重要線索,也可以用 plutil 查看,如下:

plutil -p /Users/snakeninny/Code/iOSSystemBinaries/8.1_iPhone5
/SiriViewService.app/en.lproj/Localizable.strings

安裝包格式與權限:
Cydia App 的安裝包格式一般是 deb,StoreApp 的安裝包格式一般是 ipa。其中 deb 是來自 Debian 的安裝包格式,由 Cydia 作者 saurik 移 到 iOS 中,它的 主用戶和 主組一般是 root 和 admin,能夠以 root權限運行;而 ipa 是蘋果為 iOS 推出的專用App安裝包格式, 主用戶和 主組都是 mobile,只能以 mobile權限運行。

2, Dynamic Library:
1,在 Xcode 工程里導入的各種 framework,鏈接的各種 lib,其實本質都是 dylib。
2,Cydia 里的各種 tweak 無一不是以 dylib 的形式工作的,正是這些 tweak 的存在讓我們能夠隨意定制自己的 iOS。
3,在iOS中,lib分為static和dynamic兩種,其中static lib在編譯階段成為App可執行文件的一部分,會增加可執行文件的大小。
4,dylib 則相對“智能”一些,它不會改變可執行文件的大小,只有當 App 需要用到這個 dylib 時,iOS 才會把它加載進內存,成為 App 進程的一部分。
5,dylib 的權限是由它寄生的那個 App 決定的,同一個 dylib 寄生在系統 App 和 StoreApp 里時的權限是不同的。

參考書籍 <iOS應用逆向工程-第2版> 沙梓社 吳航 * 著

下一篇:iOS逆向工程(2)工具介紹

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容