第1章 縱觀Android生態圈  1
         1.1 瞭解Android的根源  1
         1.1.1 公司曆史  1
         1.1.2 版本曆史  2
         1.1.3 審視Android設備傢族  3
         1.1.4 主體開源  5
         1.2 瞭解Android的利益相關者  6
         1.2.1 榖歌  7
         1.2.2 硬件廠商  7
         1.2.3 移動通信運營商  9
         1.2.4 開發者  9
         1.2.5 用戶  10
         1.3 理解生態圈的復雜性  11
         1.3.1 碎片化問題  12
         1.3.2 兼容性  13
         1.3.3 更新問題  13
         1.3.4 安全性與開放性  15
         1.3.5 公開披露  16
         1.4 小結  17
         第2章 Android的安全設計與架構  18
         2.1 理解Android係統架構  18
         2.2 理解安全邊界和安全策略執行  19
         2.2.1 Android沙箱  19
         2.2.2 Android權限  22
         2.3 深入理解各個層次  25
         2.3.1 Android應用層  25
         2.3.2 Android框架層  28
         2.3.3 DalvikVM  29
         2.3.4 用戶空間原生代碼層  30
         2.3.5 內核  36
         2.4 復雜的安全性,復雜的漏洞利用  41
         2.5 小結  42
         第3章 root Android設備  43
         3.1 理解分區布局  43
         3.2 理解引導過程  45
         3.3 引導加載程序的鎖定與解鎖  47
         3.4 對未加鎖引導加載程序的設備進行root  50
         3.5 對鎖定引導加載程序的設備進行root  52
         3.5.1 在已啓動係統中獲取root權限  52
         3.5.2 NAND 鎖、臨時性root與永久性root  53
         3.5.3 對軟root 進行持久化  55
         3.6 曆史上的一些已知攻擊  56
         3.6.1 內核:Wunderbar/asroot  56
         3.6.2 恢復:Volez  57
         3.6.3 udev:Exploid  57
         3.6.4 adbd:RageAgainstTheCage  58
         3.6.5 Zygote:Zimperlich和Zysploit  58
         3.6.6 ashmem:KillingInTheName-
         Of 和psneuter  58
         3.6.7 vold:GingerBreak  59
         3.6.8 PowerVR:levitator  59
         3.6.9 libsysutils:zergRush  60
         3.6.10 內核:mempodroid  60
         3.6.11 文件權限和符號鏈接相關的攻擊  61
         3.6.12 adb 恢復過程競爭條件漏洞  61
         3.6.13 Exynos4:exynos-abuse  62
         3.6.14 Diag:lit/diaggetroot  62
         3.7 小結  63
         第4章 應用安全性評估  64
         4.1 普遍性安全問題  64
         4.1.1 應用權限問題  64
         4.1.2 敏感數據的不安全傳輸  66
         4.1.3 不安全的數據存儲  67
         4.1.4 通過日誌的信息泄露  68
         4.1.5 不安全的IPC端點  69
         4.2 案例分析:移動安全應用  71
         4.2.1 初步剖析  71
         4.2.2 靜態分析  72
         4.2.3 動態分析  87
         4.2.4 攻擊  95
         4.3 案例分析:SIP客戶端  97
         4.3.1 瞭解Drozer  97
         4.3.2 發現漏洞  98
         4.3.3 snarfing  99
         4.3.4 注入  102
         4.4 小結  104
         第5章 理解Android的攻擊麵  105
         5.1 攻擊基礎術語  105
         5.1.1 攻擊嚮量  106
         5.1.2 攻擊麵  106
         5.2 對攻擊麵進行分類  107
         5.2.1 攻擊麵屬性  108
         5.2.2 分類決策  108
         5.3 遠程攻擊麵  108
         5.3.1 網絡概念  109
         5.3.2 網絡協議棧  112
         5.3.3 暴露的網絡服務  113
         5.3.4 移動技術  114
         5.3.5 客戶端攻擊麵  115
         5.3.6 榖歌的基礎設施  119
         5.4 物理相鄰  123
         5.4.1 無綫通信  123
         5.4.2 其他技術  127
         5.5 本地攻擊麵  128
         5.5.1 探索文件係統  128
         5.5.2 找到其他的本地攻擊麵  129
         5.6 物理攻擊麵  133
         5.6.1 拆解設備  133
         5.6.2 USB  134
         5.6.3 其他物理攻擊麵  137
         5.7 第三方修改  137
         5.8 小結  137
         第6章 使用模糊測試來挖掘漏洞  139
         6.1 模糊測試的背景  139
         6.1.1 選定目標  140
         6.1.2 構造畸形輸入  140
         6.1.3 處理輸入  141
         6.1.4 監控結果  142
         6.2 Android上的模糊測試  142
         6.3 對Broadcast Receiver進行模糊測試  143
         6.3.1 選定目標  143
         6.3.2 生成輸入  144
         6.3.3 傳遞輸入  145
         6.3.4 監控測試  145
         6.4 對Android上的Chrome進行模糊測試  147
         6.4.1 選擇一種技術作為目標  148
         6.4.2 生成輸入  149
         6.4.3 處理輸入  151
         6.4.4 監控測試  152
         6.5 對USB攻擊麵進行模糊測試  155
         6.5.1 對USB進行模糊測試的挑戰  155
         6.5.2 選定目標模式  155
         6.5.3 生成輸入  156
         6.5.4 處理輸入  158
         6.5.5 監控測試  158
         6.6 小結  159
         第7章 調試與分析安全漏洞  161
         7.1 獲取所有信息  161
         7.2 選擇一套工具鏈  162
         7.3 調試崩潰Dump  163
         7.3.1 係統日誌  163
         7.3.2 Tombstone  164
         7.4 遠程調試  165
         7.5 調試Dalvik代碼  166
         7.5.1 調試示例應用  167
         7.5.2 顯示框架層源代碼  168
         7.5.3 調試現有代碼  170
         7.6 調試原生代碼  173
         7.6.1 使用NDK進行調試  174
         7.6.2 使用Eclipse進行調試  177
         7.6.3 使用AOSP進行調試  179
         7.6.4 提升自動化程度  183
         7.6.5 使用符號進行調試  184
         7.6.6 調試非AOSP設備  189
         7.7 調試混閤代碼  190
         7.8 其他調試技術  191
         7.8.1 調試語句  191
         7.8.2 在設備上進行調試  191
         7.8.3 動態二進製注入  192
         7.9 漏洞分析  193
         7.9.1 明確問題根源  193
         7.9.2 判斷漏洞可利用性  205
         7.10 小結  205
         第8章 用戶態軟件的漏洞利用  206
         8.1 內存破壞漏洞基礎  206
         8.1.1 棧緩衝區溢齣  206
         8.1.2 堆的漏洞利用  209
         8.2 公開的漏洞利用  215
         8.2.1 GingerBreak  215
         8.2.2 zergRush  218
         8.2.3 Mempodroid  221
         8.3 Android瀏覽器漏洞利用  222
         8.3.1 理解漏洞  222
         8.3.2 控製堆  224
         8.4 小結  227
         第9章 ROP漏洞利用技術  228
         9.1 曆史和動機  228
         9.2 ARM 架構下的ROP 基礎  230
         9.2.1 ARM 子函數調用  231
         9.2.2 將gadget組成ROP鏈  232
         9.2.3 識彆潛在的gadget  234
         9.3 案例分析:Android 4.0.1鏈接器  235
         9.3.1 遷移棧指針  236
         9.3.2 在新映射內存中執行任意代碼  237
         9.4 小結  240
         第10章 攻擊內核  242
         10.1 Android 的Linux內核  242
         10.2 內核提取  242
         10.2.1 從齣廠固件中提取內核  243
         10.2.2 從設備中提取內核  245
         10.2.3 從啓動鏡像中提取內核  246
         10.2.4 解壓內核  247
         10.3 運行自定義內核代碼  247
         10.3.1 獲取源代碼  247
         10.3.2 搭建編譯環境  250
         10.3.3 配置內核  251
         10.3.4 使用自定義內核模塊  252
         10.3.5 編譯自定義內核  254
         10.3.6 製作引導鏡像  257
         10.3.7 引導自定義內核  258
         10.4 調試內核  262
         10.4.1 獲取內核崩潰報告  263
         10.4.2 理解Oops信息  264
         10.4.3 使用KGDB進行Live調試  267
         10.5 內核漏洞利用  271
         10.5.1 典型Android內核  271
         10.5.2 獲取地址  273
         10.5.3 案例分析  274
         10.6 小結  283
         第11章 攻擊RIL無綫接口層  284
         11.1 RIL簡介  284
         11.1.1 RIL架構  285
         11.1.2 智能手機架構  285
         11.1.3 Android電話棧  286
         11.1.4 對電話棧的定製  287
         11.1.5 RIL 守護程序  287
         11.1.6 用於vendor-ril的API  289
         11.2 短信服務  290
         11.2.1 SMS消息的收發  290
         11.2.2 SMS消息格式  291
         11.3 與調製解調器進行交互  293
         11.3.1 模擬調製解調器用於模糊測試  293
         11.3.2 在Android中對SMS進行模糊測試  295
         11.4 小結  302
         第12章 漏洞利用緩解技術  303
         12.1 緩解技術的分類  303
         12.2 代碼簽名  304
         12.3 加固堆緩衝區  305
         12.4 防止整數溢齣  305
         12.5 阻止數據執行  306
         12.6 地址空間布局隨機化  308
         12.7 保護棧  310
         12.8 保護格式化字符串  310
         12.9 隻讀重定位錶  312
         12.10 沙盒  313
         12.11 增強源代碼  313
         12.12 訪問控製機製  315
         12.13 保護內核  316
         12.13.1 指針和日誌限製  316
         12.13.2 保護零地址頁  317
         12.13.3 隻讀的內存區域  318
         12.14 其他加固措施  318
         12.15 漏洞利用緩解技術總結  320
         12.16 禁用緩解機製  322
         12.16.1 更改personality  322
         12.16.2 修改二進製文件  323
         12.16.3 調整內核  323
         12.17 對抗緩解技術  323
         12.17.1 對抗棧保護  324
         12.17.2 對抗ASLR  324
         12.17.3 對抗數據執行保護  324
         12.17.4 對抗內核級保護機製  325
         12.18 展望未來  325
         12.18.1 進行中的官方項目  325
         12.18.2 社區的內核加固工作  326
         12.18.3 一些預測  326
         12.19 小結  327
         第13章 硬件層的攻擊  328
         13.1 設備的硬件接口  328
         13.1.1 UART 串行接口  329
         13.1.2 I2C、SPI 和單總綫接口  331
         13.1.3 JTAG  334
         13.1.4 尋找調試接口  343
         13.2 識彆組件  353
         13.2.1 獲得規格說明書  353
         13.2.2 難以識彆的組件  354
         13.3 攔截、監聽和劫持數據  355
         13.3.1 USB  355
         13.3.2 I2C、SPI和UART串行端口  359
         13.4 竊取機密和固件  364
         13.4.1 無損地獲得固件  364
         13.4.2 有損地獲取固件  365
         13.4.3 拿到dump文件後怎麼做  368
         13.5 陷阱  371
         13.5.1 定製的接口  371
         13.5.2 二進製私有數據格式  371
         13.5.3 熔斷調試接口  372
         13.5.4 芯片密碼  372
         13.5.5 bootloader密碼、熱鍵和啞終端  372
         13.5.6 已定製的引導過程  373
         13.5.7 未暴露的地址綫  373
         13.5.8 防止逆嚮的環氧樹脂  373
         13.5.9 鏡像加密、混淆和反調試  373
         13.6 小結  374
         附錄A 工具  375
         附錄B 開源代碼庫  386
      · · · · · ·     (
收起)