iOS 黑客攻防秘籍, 2/e

iOS 黑客攻防秘籍, 2/e

作者: 陳德
出版社: 人民郵電
出版在: 2021-10-01
ISBN-13: 9787115568816
ISBN-10: 7115568812
裝訂格式: 平裝
總頁數: 483 頁





內容描述


本書內容易於理解,可以讓讀者循序漸進、系統性地學習iOS安全技術。全書共16章,知識點覆蓋iOS 8到iOS 14。書中首先細致地介紹了越獄環境的開發與逆向相關工具,然後依次講解了匯編基礎、動態調用、靜態分析、註入與hook、文件格式,最後為大家呈現了應用破解與應用保護、隱私獲取與取證、刷量與作弊、唯一設備ID、寫殼內幕等多個主題。


目錄大綱


目  錄
第 1章 iOS安全機制 1
1.1 iOS 應用的安裝源 1
1.2 沙盒 2
1.3 代碼簽名 3
1.4 用戶權限隔離 4
1.5 數據執行保護 4
1.6 地址空間佈局隨機化 5
1.7 後台程序 6
第 2章 越獄環境開發工具的準備 8
2.1 越獄與 Cydia 8
2.2 文件管理工具 11
2.2.1 iFile:在手機上管理文件 11
2.2.2 AFC2:通過 USB 管理手機文件 12
2.3 命令行工具 12
2.3.1 MTerminal:在手機上執行命令行 12
2.3.2 OpenSSH:在計算機上執行命令行 13
2.4 代碼注入工具 15
2.5 遠程調試工具 16
2.5.1 debugserver 的配置與啟動 16
2.5.2 LLDB 連接 debugserver 及其調試 17
2.5.3 通過 USB 連接 SSH 進行調試 19
2.6 反彙編工具 20
2.6.1 IDA 20
2.6.2 Hopper 23
2.7 其他工具 24
2.7.1 syslogd:記錄日誌 24
2.7.2 Vi IMproved:編輯器 24
2.7.3 apt:下載命令 25
2.7.4 Network commands:網絡命令 25
2.7.5 dumpdecrypted:脫殼 25
2.7.6 class-dump:導出頭文件 27
2.7.7 lsof:查看進程所佔用的文件 29
2.7.8 AppSync:安裝未簽名的應用 31
2.7.9 App Admin:下載指定版本的應用 31
2.7.10 Cydown:下載時提取 deb 包 31
第3章 ARM 彙編基礎 33
3.1 ARMv7 33
3.1.1 編寫 32 位彙編代碼 33
3.1.2 寄存器與棧 35
3.1.3 基礎指令 35
3.1.4 條件跳轉與循環 36
3.1.5 函數參數的調用過程 37
3.1.6 Thumb 指令 38
3.2 ARM64 39
3.2.1 編寫 64 位的彙編代碼 39
3.2.2 寄存器與棧 39
3.2.3 函數參數的調用過程 40
3.3 在 Xcode 中使用內聯彙編 41
3.3.1 C、C++、Objective-C 調用彙編函數 42
3.3.2 直接編寫內聯彙編 42
第4章 應用逆向分析 44
4.1 尋找程序入口——main 函數 44
4.1.1 編寫一個程序 44
4.1.2 ARMv7 的 main 函數 45
4.1.3 ARM64 的 main 函數 46
4.2 動態調試 47
4.2.1 反彙編 47
4.2.2 添加斷點 48
4.2.3 打印數據 53
4.2.4 讀寫數據 54
4.2.5 修改程序的執行流程 56
4.2.6 查看信息 58
4.2.7 執行到上層調用棧 61
4.2.8 臨時修改變量的值 62
4.2.9 使用幫助與搜索 63
4.2.10 LLDB 腳本 63
4.2.11 不越獄使用 Xcode 調試第三方應用 68
4.2.12 IDA 動態調試 71
4.3 靜態分析 75
4.3.1 通過字符串定位代碼的引用位置 75
4.3.2 查看函數被調用的位置 79
4.3.3 重設基地址 81
4.3.4 修改代碼並保存文件 81
4.3.5 使用 IDA Python 腳本 82
4.4 逆向分析實例 83
4.5 Frida 93
4.5.1 Frida 的安裝與相關工具 93
4.5.2 frida-trace 實例 97
4.5.3 攔截器的使用 99
4.5.4 攔截 sub_xxxx 這種函數 103
4.5.5 API 查找器和攔截器的組合使用 106
4.5.6 遠程過程調用 110
4.6 使用 MonkeyDev 逆向應用 114
4.6.1 安裝 MonkeyDev 114
4.6.2 分析應用 115
4.6.3 不越獄使用 Frida 119
第5章 Tweak 編寫技術 122
5.1 Theos 開發環境的使用 122
5.1.1 編寫第 一個 Tweak 122
5.1.2 Theos 工程文件 126
5.2 逆向分析與編寫 Tweak 129
5.2.1 逆向分析 129
5.2.2 編寫 Tweak 137
5.3 使用 MonkeyDev 開發 Tweak 140
第6章 注入與 Hook 144
6.1 注入動態庫 144
6.1.1 編寫動態庫 144
6.1.2 DynamicLibraries 目錄 145
6.1.3 DYLD_INSERT_LIBRARIES 環境變量 145
6.1.4 不越獄注入動態庫 146
6.2 Hook 147
6.2.1 Cydia Substrate 147
6.2.2 Symbol Table 150
6.2.3 Method Swizzing 152
第7章 Mach-O 文件格式解析 154
7.1 Mach-O 文件格式 154
7.1.1 Fat 頭部 156
7.1.2 Mach 頭部 158
7.1.3 Load command 159
7.1.4 符號表與字符串表 172
7.2 CFString 的運行過程 174
7.2.1 編寫代碼 174
7.2.2 CFString 的數據結構 175
7.2.3 調試運行過程 176
7.3 Mach-O ARM 函數綁定的調用過程分析 177
7.3.1 編寫代碼 177
7.3.2 分析 ARMv7 函數綁定的調用過程 178
7.3.3 分析 ARM64 函數綁定的調用過程 186
7.3.4 總結 190
7.4 靜態庫文件格式 192
7.5 class-dump 導出頭文件的原理 194
7.6 關於 Bitcode 198
7.6.1 Bitcode 的作用 198
7.6.2 在 Xcode 中如何生成 Bitcode 198
7.6.3 通過命令行編譯 Bitcode 200
7.6.4 將 Bitcode 編譯成可執行文件 202
7.6.5 編譯器相關參數 203
第8章 唯設備 ID 205
8.1 UDID 與設備 ID 205
8.1.1 編寫 mobileconfig 205
8.1.2 編寫 receive.php 206
8.1.3 安裝描述文件 206
8.1.4 mobileconfig 簽名 207
8.2 IDFA 208
8.3 IDFV 208
8.4 OpenUDID 209
8.5 SimulateIDFA 210
8.6 MAC 地址 211
8.7 ID 的持久化存儲 214
8.7.1 Keychain 的存儲 214
8.7.2 剪貼板 216
8.8 DeviceToken 218
第9章 刷量與作弊 219
9.1 越獄環境下獲取 root 權限 219
9.1.1 iOS 8 - iOS 10 獲取 root 權限 220
9.1.2 iOS 11- iOS 14 獲取 root 權限 220
9.2 修改手機信息 221
9.2.1 修改基本信息 221
9.2.2 修改 Wi-Fi 信息與運營商 228
9.2.3 修改 DeviceToken 230
9.2.4 修改位置信息 232
9.2.5 修改系統啟動時間 233
9.2.6 修改屏幕亮度、音量、電池電量 234
9.2.7 修改磁盤空間與內存 235
9.2.8 修改網絡 IP 地址、MAC 地址、DNS 236
9.2.9 修改上網類型 238
9.2.10 修改系統版本與機型 240
9.2.11 繞過 VPN 與 HTTP 代理檢測 246
9.3 清除數據 247
9.3.1 清除沙盒目錄 247
9.3.2 清除 Keychain 250
9.3.3 清除剪貼板 251
9.3.4 清除 AppGroup 252
9.3.5 清除 iTunes 信息 255
9.4 發布應用 256
9.4.1 將 App 打包成 deb 格式 256
9.4.2 製作 Cydia 源發布應用 257
9.5 權限的切換 258
9.6 變化 IP 地址 259
9.7 反越獄檢測 261
9.8 不用越獄修改任意位置信息 263
9.9 在兩台手機上同時登錄同一微信 264
9.10 微信的 62 數據 265
第 10章 重要信息獲取與取證 267
10.1 通訊錄 267
10.2 短信 268
10.3 通話記錄 269
10.4 位置信息 269
10.5 網絡信息 271
10.5.1 上網類型 272
10.5.2 熱點信息 273
10.5.3 DNS 信息 274
10.5.4 IP 地址 275
10.5.5 代理信息 277
10.6 傳感器信息 278
10.6.1 加速計 279
10.6.2 陀螺儀 280
10.6.3 磁力計 281
10.6.4 氣壓計 282
10.7 系統信息 283
10.8 硬件 ID 信息 286
10.9 已安裝的應用列表 289
10.10 使用 idb 分析洩露的數據 291
10.10.1 安裝和運行 291
10.10.2 使用方法 293
10.11 重要的文件與目錄 296
10.11.1 照片 297
10.11.2 Safari 瀏覽器書籤 297
10.11.3 Wi-Fi 歷史連接記錄 297
10.11.4 應用快照 298
10.11.5 錄音 298
10.12 libimobiledevice 獲取手機信息 299
第 11章 應用破解 301
11.1 重打包應用與多開 301
11.1.1 重打包應用 301
11.1.2 多開 308
11.2 應用重簽名 310
11.2.1 代碼簽名 311
11.2.2 授權機制 314
11.2.3 配置文件 315
11.2.4 重簽名 317
11.3 抓包和改包 318
11.3.1 tcpdump 抓包 318
11.3.2 Wireshark 抓包 321
11.3.3 Charles 抓取 HTTPS 數據包 323
11.3.4 Charles 修改數據包與重發 327
11.3.5 突破 SSL 雙向認證 330
11.4 文件監控 331
11.5 破解登錄驗證 332
11.5.1 得到 HTTP 傳輸的數據 332
11.5.2 得到解密的數據 333
11.5.3 破解方法 334
第 12章 應用保護 335
12.1 函數名混淆 335
12.2 字符串加密 335
12.3 代碼混淆 338
12.3.1 inline 內聯函數 338
12.3.2 obfuscator-llvm 編譯器 339
12.3.3 Xcode 集成配置 obfuscator-llvm 341
12.3.4 Theos 集成配置 obfuscator-llvm 343
12.3.5 HikariObfuscator 343
12.4 越獄檢測 344
12.4.1 判斷相關文件是否存在 344
12.4.2 直接讀取相關文件 345
12.4.3 使用 stat 函數判斷文件 345
12.4.4 檢查動態庫列表 346
12.4.5 檢查環境變量 346
12.4.6 檢查函數是否被劫持 346
12.5 反盜版 347
12.5.1 檢查 Bundle identifier 347
12.5.2 檢查來源是否為 App Store 347
12.5.3 檢查重簽名 350
12.5.4 代碼校驗 351
12.6 反調試與反反調試 353
12.6.1 反調試方法 353
12.6.2 反反調試 355
12.7 反注入與反反注入 359
12.8 防止被抓包 361
第 13章 代碼入口點劫持 365
13.1 實現原理 365
13.2 編寫 ShellCode 365
13.2.1 編寫 ARM 彙編 366
13.2.2 計算 main 函數的跳轉地址 370
13.2.3 
終的 ShellCode 372
13.3 插入代碼 373
13.4 修改入口點 374
13.4.1 關於指令切換 374
13.4.2 ARMv7 入口點 375
13.4.3 ARM64 入口點 375
13.5 重簽名 376
第 14章 寫殼內幕 378
14.1 判斷文件格式類型 378
14.2 代碼的插入 379
14.3 修改程序入口點 381
14.4 Shellcode 如何調用函數 382
14.5 編寫和調試 Shellcode 386
14.5.1 ARMv7 Shellcode 387
14.5.2 ARM64 Shellcode 394
14.6 總結 407
第 15章 系統相關 409
15.1 Cydia 的相關問題及修復方法 409
15.1.1 使用 h3lix 越獄後,Cydia 不能上網 409
15.1.2 越獄後抹掉所有內容修復 Cydia 409
15.1.3 Cydia 不能上網的終*解決方法 411
15.2 降級傳說 412
15.2.1 iPhone 5 降級到 8.4.1 412
15.2.2 iPhone 5s 降級到 10.3.3 413
15.3 訪問限制密碼的安全隱患 416
15.3.1 訪問限制密碼 416
15.3.2 備份密鑰數據 416
15.3.3 暴力破解密碼 417
15.4 掃碼在線安裝應用 418
15.4.1 安裝 Apache 418
15.4.2 配置自簽名證書支持 HTTPS 419
15.4.3 下載安裝應用 422
15.4.4 購買認證的 SSL 證書 424
15.5 CVE-2018-4407 遠程溢出漏洞 425
15.6 解決磁盤空間不足的問題 426
15.7 解決 h3lix 重簽名後越獄失敗 427
15.8 解決 iOS 12 啟動進程提示 Killed:9 的問題 429
15.9 iPhone 安裝 Android 系統 431
第 16章 LLVM 編譯器代碼混淆的原理 434
16.1 開發和調試 Pass 434
16.1.1 編寫第 一個 LLVM Pass 434
16.1.2 編寫 Pass 獲取基本塊和指令 438
16.1.3 將 Pass 編譯到 Clang 442
16.2 移植代碼混淆 Pass 444
16.2.1 移植代碼 444
16.2.2 安裝 graphivz 445
16.2.3 設置 opt 的啟動參數 446
16.3 從源碼角度解讀代碼混淆 Pass 449
16.3.1 flattening 449
16.3.2 boguscf 458
16.3.3 substitution 464
16.3.4 indirectbr 469
附錄A 書中用到的工具列表 477
附錄B 機型代號列表 479


作者介紹


陳德 軟件安全研究員,2007年開始自學安全技術,師出《黑客防線》,在安全領域精通多方面技術,個人作品有eXfaker、FileMonitorKit、SystemKit等,




相關書籍

HaaS物聯網設備雲端一體開發框架:AliOS Things最佳實踐

作者 阿裡雲IoT HaaS技術團隊

2021-10-01

Android工程化最佳實踐

作者 金凱

2021-10-01

Build Location-Based Projects for IOS: Gps, Sensors, and Maps

作者 Hauser Dominik

2021-10-01