第1章 iOS安全機製  1
         1.1 應用的安裝源  1
         1.2 沙盒  2
         1.3 代碼簽名  3
         1.4 用戶權限隔離  4
         1.5 數據執行保護  4
         1.6 地址隨機化  5
         1.7 後颱程序  5
         第2章 越獄環境開發工具的準備  8
         2.1 越獄與Cydia  8
         2.2 文件管理工具  10
         2.2.1 iFile:在手機上管理文件  10
         2.2.2 AFC2:通過USB管理手機文件  10
         2.3 命令行工具  11
         2.3.1 MTerminal:手機中執行命令行  11
         2.3.2 OpenSSH:在電腦上執行命令行  12
         2.4 代碼注入測試工具  13
         2.5 遠程調試工具  14
         2.5.1 debugserver的配置與啓動  14
         2.5.2 LLDB連接debugserver及其調試  15
         2.5.3 通過USB連接SSH進行調試  17
         2.6 反匯編工具  18
         2.6.1 IDA  18
         2.6.2 Hopper  21
         2.7 其他工具  22
         第3章 ARM匯編基礎  30
         3.1 ARMv7  30
         3.1.1 編寫32位匯編代碼  30
         3.1.2 寄存器與棧  32
         3.1.3 基礎指令  32
         3.1.4 條件跳轉與循環  33
         3.1.5 函數參數的調用過程  34
         3.1.6 Thumb指令  35
         3.2 ARM64  36
         3.2.1 編寫64位的匯編代碼  36
         3.2.2 寄存器與棧  36
         3.2.3 函數參數的調用過程  37
         3.3 在Xcode中使用內聯匯編  38
         3.3.1 C/C++/Objective-C調用匯編函數  39
         3.3.2 直接編寫內聯匯編  39
         第4章 應用逆嚮分析  41
         4.1 尋找main函數的入口  41
         4.1.1 編寫一個測試程序  41
         4.1.2 ARMv7的main函數入口  42
         4.1.3 ARM64的main函數入口  43
         4.2 動態調試  44
         4.2.1 反匯編  44
         4.2.2 添加斷點  45
         4.2.3 打印數據  50
         4.2.4 讀寫數據  51
         4.2.5 修改程序的執行流程  52
         4.2.6 查看信息  54
         4.2.7 執行到上層調用棧  56
         4.2.8 臨時修改變量的值  57
         4.2.9 使用幫助與搜索  57
         4.3 靜態分析  58
         4.3.1 通過字符串定位到代碼的引用位置  58
         4.3.2 查看函數被調用的位置  62
         4.3.3 重設基地址  63
         4.3.4 修改代碼並保存文件  64
         4.3.5 使用IDA Python腳本  65
         4.4 逆嚮分析實例  65
         第5章 Tweak編寫技術  76
         5.1 Theos開發環境的使用  76
         5.1.1 編寫第一個Tweak  76
         5.1.2 Theos工程文件  80
         5.2 逆嚮分析與編寫Tweak  83
         5.2.1 逆嚮分析  83
         5.2.2 編寫Tweak  91
         第6章 注入與hook  94
         6.1 注入動態庫  94
         6.1.1 編寫動態庫  94
         6.1.2 DynamicLibraries目錄  95
         6.1.3 DYLD_INSERT_LIBRARIES環境變量  95
         6.1.4 不越獄注入動態庫  96
         6.2 hook  97
         6.2.1 Cydia Substrate  97
         6.2.2 Symbol Table  100
         6.2.3 Method Swizzing  102
         第7章 Mach-O文件格式解析  104
         7.1 Mach-O文件格式  104
         7.1.1 Fat頭部  106
         7.1.2 Mach頭部  108
         7.1.3 Load command  109
         7.1.4 符號錶與字符串錶  122
         7.2 CFString的運行過程  124
         7.2.1 編寫測試代碼  124
         7.2.2 CFString的數據結構  125
         7.2.3 調試運行過程  126
         7.3 Mach-O ARM函數綁定的調用過程分析  127
         7.3.1 編寫測試代碼  127
         7.3.2 分析ARMv7函數綁定的調用過程  128
         7.3.3 分析ARM64函數綁定的調用過程  136
         7.3.4 總結  140
         7.4 靜態庫文件格式  142
         7.5 class-dump導齣頭文件的原理  143
         7.6 關於Bitcode  147
         7.6.1 Bitcode的作用  148
         7.6.2 在Xcode中如何生成Bitcode  148
         7.6.3 通過命令行編譯Bitcode  150
         7.6.4 將Bitcode編譯成可執行文件  152
         7.6.5 編譯器相關參數  153
         第8章 唯一設備ID  154
         8.1 UDID與設備ID  154
         8.2 IDFA  157
         8.3 IDFV  157
         8.4 OpenUDID  158
         8.5 SimulateIDFA  159
         8.6 MAC地址  160
         8.7 ID的持久化存儲  163
         8.8 DeviceToken  167
         第9章 刷量與作弊  168
         9.1 越獄環境下獲取root權限  168
         9.2 修改手機信息  169
         9.2.1 修改基本信息  169
         9.2.2 修改Wi-Fi信息  176
         9.2.3 修改DeviceToken  177
         9.2.4 修改位置信息  178
         9.3 清除應用數據  179
         9.4 清除Keychain  181
         9.5 清除剪貼闆  183
         9.6 發布應用  183
         9.6.1 將App打包成deb  183
         9.6.2 製作Cydia源發布應用  184
         9.7 權限的切換  185
         9.8 變化IP地址  186
         9.9 反越獄檢測  188
         9.10 不用越獄修改任意位置信息  190
         9.11 在兩個手機上同時登錄同一微信  192
         9.12 微信的62數據  193
         第10章 重要信息獲取與取證  195
         10.1 通訊錄  195
         10.2 短信  196
         10.3 通話記錄  197
         10.4 位置信息  197
         10.5 網絡信息  199
         10.6 傳感器信息  206
         10.7 係統信息  210
         10.8 硬件ID信息  214
         10.9 已安裝的應用列錶  216
         10.10 使用idb分析泄露的數據  218
         10.11 重要的文件與目錄  223
         10.12 libimobiledevice獲取手機信息  226
         第11章 應用破解  228
         11.1 重打包應用與多開  228
         11.1.1 重打包應用  228
         11.1.2 多開  235
         11.2 應用重簽名  238
         11.2.1 代碼簽名  238
         11.2.2 授權機製  241
         11.2.3 配置文件  243
         11.2.4 重簽名  244
         11.3 抓包和改包  245
         11.3.1 tcpdump抓包  245
         11.3.2 Wireshark抓包  248
         11.3.3 Charles抓取HTTPS數據包  250
         11.3.4 Charles修改數據包與重發  254
         11.3.5 突破SSL雙嚮認證  257
         11.4 文件監控  258
         11.5 破解登錄驗證  259
         11.5.1 得到HTTP傳輸的數據  259
         11.5.2 得到解密的數據  260
         11.5.3 破解方法  261
         第12章 應用保護  262
         12.1 函數名混淆  262
         12.2 字符串加密  262
         12.3 代碼混淆  265
         12.3.1 inline內聯函數  265
         12.3.2 obfuscator-llvm編譯器  266
         12.3.3 Xcode集成配置obfuscator-llvm  268
         12.3.4 Theos集成配置obfuscator-llvm  270
         12.4 越獄檢測  270
         12.4.1 判斷相關文件是否存在  270
         12.4.2 直接讀取相關文件  271
         12.4.3 使用stat函數判斷文件  271
         12.4.4 檢查動態庫列錶  272
         12.4.5 檢查環境變量  272
         12.4.6 檢查函數是否被劫持  272
         12.5 反盜版  273
         12.5.1 檢查Bundle identifier  273
         12.5.2 檢查來源是否為App Store  273
         12.5.3 檢查重簽名  276
         12.5.4 代碼校驗  277
         12.6 反調試與反反調試  278
         12.6.1 反調試方法  279
         12.6.2 反反調試  281
         12.7 反注入與反反注入  285
         第13章 代碼入口點劫持  287
         13.1 實現原理  287
         13.2 編寫ShellCode  287
         13.2.1 編寫ARM匯編  288
         13.2.2 計算main函數的跳轉地址  292
         13.2.3 最終的ShellCode  294
         13.3 插入代碼  295
         13.4 修改入口點  296
         13.4.1 關於指令切換  296
         13.4.2 ARMv7入口點  297
         13.4.3 ARM64入口點  297
         13.5 重簽名  298
         第14章 寫殼內幕  300
         14.1 判斷文件格式類型  300
         14.2 代碼的插入  301
         14.3 修改程序入口點  303
         14.4 Shellcode如何調用函數  304
         14.5 編寫和調試Shellcode  308
         14.5.1 ARMv7 Shellcode  309
         14.5.2 ARM64 Shellcode  316
         14.6 總結  329
         第15章 係統相關  331
         15.1 Cydia的相關問題及修復方法  331
         15.2 降級傳說  334
         15.3 訪問限製密碼的安全隱患  335
         15.4 掃碼在綫安裝應用  338
         15.5 CVE-2018-4407遠程溢齣漏洞  344
         15.6 解決磁盤空間不足的問題  345
         附錄A 書中用到的工具列錶  347
      · · · · · ·     (
收起)