目 錄
推薦序一
推薦序二
第2版序
第1版序
前言
第一部分 概 念 篇
第1章 iOS逆向工程簡介 3
1.1 iOS逆向工程的要求 3
1.2 iOS應用逆向工程的作用 4
1.2.1 安全相關的iOS逆向工程 5
1.2.2 開發(fā)相關的iOS逆向工程 6
1.3 iOS應用逆向工程的過程 7
1.3.1 系統(tǒng)分析 7
1.3.2 代碼分析 8
1.4 iOS應用逆向工程的工具 8
1.4.1 監(jiān)測工具 9
1.4.2 反匯編工具 9
1.4.3 調試工具 10
1.4.4 開發(fā)工具 11
1.5 小結 11
第2章 越獄iOS平臺簡介 12
2.1 iOS系統(tǒng)結構 12
2.1.1 iOS目錄結構簡介 13
2.1.2 iOS文件權限簡介 16
2.2 iOS二進制文件類型 17
2.2.1 Application 17
2.2.2 Dynamic Library 20
2.2.3 Daemon 20
2.3 小結 22
第二部分 工 具 篇
第3章 OSX工具集 25
3.1 class-dump 25
3.2 Theos 27
3.2.1 Theos簡介 27
3.2.2 安裝Theos 28
3.2.3 Theos用法介紹 30
3.2.4 Theos開發(fā)tweak示例 51
3.3 Reveal 53
3.4 IDA 57
3.4.1 IDA簡介 57
3.4.2 IDA使用說明 58
3.4.3 IDA分析示例 68
3.5 iFunBox 71
3.6 dyld_decache 72
3.7 小結 73
第4章 iOS工具集 74
4.1 CydiaSubstrate 74
4.1.1 MobileHooker 74
4.1.2 MobileLoader 84
4.1.3 Safe mode 84
4.2 Cycript 85
4.3 LLDB與debugserver 89
4.3.1 LLDB簡介 89
4.3.2 debugserver簡介 90
4.3.3 配置debugserver 90
4.3.4 用debugserver啟動或附加進程 91
4.3.5 LLDB的使用說明 92
4.3.6 LLDB使用小提示 107
4.4 dumpdecrypted 107
4.5 OpenSSH 111
4.6 usbmuxd 112
4.7 iFile 113
4.8 MTerminal 114
4.9 syslogd to /var/log/syslog 115
4.10 小結 115
第三部分 理 論 篇
第5章 Objective-C相關的iOS逆向理論基礎 119
5.1 tweak在Objective-C中的工作方式 119
5.2 tweak 的編寫套路 121
5.2.1 尋找靈感 121
5.2.2 定位目標文件 123
5.2.3 定位目標函數(shù) 127
5.2.4 測試函數(shù)功能 129
5.2.5 解析函數(shù)參數(shù) 130
5.2.6 class-dump的局限性 133
5.3 實例演示 133
5.3.1 得到靈感 134
5.3.2 定位文件 135
5.3.3 定位函數(shù) 143
5.3.4 測試函數(shù) 145
5.3.5 編寫實例代碼 145
5.4 小結 147
第6章 ARM匯編相關的iOS逆向理論基礎 148
6.1 ARM匯編基礎 148
6.1.1 基本概念 149
6.1.2 ARM/THUMB指令解讀 152
6.1.3 ARM調用規(guī)則 159
6.2 tweak的編寫套路 161
6.2.1 從現(xiàn)象切入App,找出UI函數(shù) 162
6.2.2 以UI函數(shù)為起點,尋找目標函數(shù) 173
6.3 LLDB的使用技巧 203
6.3.1 尋找函數(shù)調用者 203
6.3.2 更改進程執(zhí)行邏輯 208
6.4 小結 211
第四部分 實 戰(zhàn) 篇
第7章 實戰(zhàn)1:Characount for Notes 8 215
7.1 備忘錄 215
7.2 搭建tweak原型 216
7.2.1 定位Notes的可執(zhí)行文件 217
7.2.2 class-dump出MobileNotes的頭文件 218
7.2.3 用Cycript找到閱覽界面及其controller 218
7.2.4 從NoteDisplayController找到當前note對象 220
7.2.5 找到實時監(jiān)測note內容變化的方法 223
7.3 逆向結果整理 227
7.4 編寫tweak 228
7.4.1 用Theos新建tweak工程“CharacountForNotes8” 228
7.4.2 構造CharacountForNotes8.h 229
7.4.3 編輯Tweak.xm 229
7.4.4 編輯Makefile及control 230
7.4.5 測試 230
7.5 小結 233
第8章 實戰(zhàn)2:自動將指定電子郵件標記為已讀 234
8.1 電子郵件 234
8.2 搭建tweak原型 235
8.2.1 定位Mail的可執(zhí)行文件并class-dump它 237
8.2.2 把頭文件導入Xcode 238
8.2.3 用Cycript找到Mailboxes界面的controller 239
8.2.4 用Reveal和Cycript找到All Inboxes界面的delegate 240
8.2.5 在MailboxContentViewController中定位“刷新完成”的響應函數(shù) 242
8.2.6 從MessageMegaMall中拿到所有郵件 246
8.2.7 從MFLibraryMessage中提取發(fā)件人地址,用MessageMegaMall標記
已讀 248
8.3 逆向結果整理 254
8.4 編寫tweak 255
8.4.1 用Theos新建tweak工程“iOSREMailMarker” 255
8.4.2 構造iOSREMailMarker.h 255
8.4.3 編輯Tweak.xm 256
8.4.4 編輯Makefile及control 257
8.4.5 測試 258
8.5 小結 259
第9章 實戰(zhàn)3:保存與分享微信小視頻 260
9.1 微信 260
9.2 搭建tweak原型 261
9.2.1 觀察小視頻播放窗口,尋找逆向切入點 261
9.2.2 class-dump獲取頭文件 262
9.2.3 把頭文件導入Xcode 263
9.2.4 用Reveal找到小視頻播放窗口 264
9.2.5 找到長按手勢響應函數(shù) 265
9.2.6 用Cycript定位小視頻的controller 270
9.2.7 從WCTimeLineViewController找到小視頻對象 272
9.2.8 從WCContentItemViewTemplateNewSight中提取WCDataItem對象 276
9.2.9 從WCDataItem中提取目標信息 278
9.3 逆向結果整理 288
9.4 編寫tweak 289
9.4.1 用Theos新建tweak工程“iOSREWCVideoDownloader” 289
9.4.2 構造iOSREWCVideoDownloader.h 289
9.4.3 編輯Tweak.xm 290
9.4.4 編輯Makefile及control 292
9.4.5 測試 293
9.5 彩蛋放送 294
9.5.1 從UIMenuItem切入,找到小視頻對象 294
9.5.2 微信歷史版本頭文件個數(shù)變遷 295
9.6 小結 298
第10章 實戰(zhàn)4:檢測與發(fā)送iMessage 299
10.1 iMessage 299
10.2 檢測一個號碼或郵箱地址是否支持iMessage 299
10.2.1 觀察MobileSMS界面元素的變化,尋找逆向切入點 299
10.2.2 用Cycript找出placeholder 302
10.2.3 用IDA和LLDB找出placeholderText的一重數(shù)據(jù)源 308
10.2.4 用IDA和LLDB找出placeholderText的N重數(shù)據(jù)源 311
10.2.5 還原原始數(shù)據(jù)源生成placeholderText的過程 340
10.3 發(fā)送iMessage 341
10.3.1 從MobileSMS界面元素尋找逆向切入點 341
10.3.2 用Cycript找出“Send”按鈕的響應函數(shù) 342
10.3.3 在響應函數(shù)中尋找可疑的發(fā)送操作 344
10.4 逆向結果整理 369
10.5 編寫tweak 370
10.5.1 用Theos新建tweak工程“iOSREMadridMessenger” 370
10.5.2 構造iOSREMadridMessenger.h 371
10.5.3 編輯Tweak.xm 372
10.5.4 編輯Makefile及control 372
10.5.5 用Cycript測試 373
10.6 小結 373
越獄開發(fā)一覽 375
沙箱逃脫 380
編寫tweak——新時代的hacking 382