Android軟體安全權威指南

書籍信息

作譯者:豐生強

出版時間:2019-03千 字 數:698版次:01-01頁 數:468

開本:16開裝幀:I S B N :9787121355202

換版:

紙質書定價:¥95.0

內容簡介

本書主要介紹Android平台上的軟體安全技術。從平台搭建和語言基礎開始,循序漸進地講解了Android平台上的軟體攻防技術。   本書共12章,系統地講解了與Android軟體安全相關的環境搭建、檔案格式、靜態分析、動態調試、Hook與注入、軟體保護技術、軟體殼等多個主題。本書較第1版更新幅度較大,加入了Windows、Linux、macOS 3個平台上的軟體平台支持,在檔案格式上加入了OAT、ELF等新的檔案格式。另外,本書更新調整了目錄結構,將Java與Native層的軟體安全技術分開講解,在內容安排上更加細緻、合理。同時,加入了時下流行的軟體殼章節,內容大多是目前尚未公開的技術。另外,書中的每一章中都以實例講解的方式來展開內容,實踐性較強。  

圖書目錄

第1章 搭建Android程式分析環境

1.1 搭建Windows分析環境 1

1.1.1 安裝JDK 1

1.1.2 安裝Android SDK 2

1.1.3 安裝Android NDK 5

1.1.4 Android Studio集成開發環境 6

1.1.5 創建Android模擬器 7

1.1.6 Cygwin 9

1.1.7 Bash on Ubuntu on Windows 11

1.2 搭建macOS分析環境 12

1.2.1 安裝JDK 12

1.2.2 安裝Android SDK 14

1.2.3 安裝Android NDK 14

1.2.4 Android Studio集成開發環境 15

1.3 搭建Ubuntu分析環境 15

1.3.1 安裝JDK 16

1.3.2 安裝Android SDK 17

1.3.3 安裝Android NDK 17

1.3.4 Android Studio集成開發環境 18

1.4 常用逆向分析工具 19

1.5 常用Linux Shell命令 19

1.6 搭建源碼分析環境 20

1.6.1 在macOS中編譯Android源碼 20

1.6.2 在Ubuntu中編譯Android源碼 26

1.6.3 在Windows中編譯Android源碼 26

1.7 本章小結 27  

第2章 如何分析Android程式

2.1 編寫第一個Android程式 28

2.1.1 創建Android工程 28

2.1.2 編譯生成APK檔案 30

2.2 破解第一個Android程式 35

2.2.1 破解入手 35

2.2.2 反編譯APK檔案 35

2.2.3 分析APK檔案 36

2.2.4 修改smali檔案的代碼 44

2.2.5 重新編譯APK檔案並簽名 45

2.2.6 安裝和測試 47

2.2.7 小結 48

2.3 本章小結 48

第3章 Dalvik可執行格式與位元組碼規範

3.1 Dalvik虛擬機 49

3.1.1 Dalvik虛擬機的特點 49

3.1.2 Dalvik虛擬機與Java虛擬機的區別 49

3.1.3 虛擬機的執行流程 54

3.1.4 虛擬機的執行方式 56

3.2 Dalvik語言基礎 56

3.2.1 Dalvik指令格式 57

3.2.2 DEX反彙編工具 58

3.2.3 Dalvik暫存器 59

3.2.4 暫存器命名法 61

3.2.5 Dalvik位元組碼 62

3.3 Dalvik指令集 63

3.3.1 指令類型 64

3.3.2 空操作指令 64

3.3.3 數據操作指令 64

3.3.4 返回指令 65

3.3.5 數據定義指令 65

3.3.6 鎖指令 66

3.3.7 實例操作指令 66

3.3.8 數組操作指令 66

3.3.9 異常指令 67

3.3.10 跳轉指令 67

3.3.11 比較指令 68

3.3.12 欄位操作指令 69

3.3.13 方法調用指令 69

3.3.14 數據轉換指令 70

3.3.15 數據運算指令 70

3.4 Dalvik指令練習 71

3.4.1 編寫smali檔案 71

3.4.2 編譯smali檔案 73

3.4.3 測試運行 73

3.5 本章小結 73  

第4章 常見Android檔案格式

4.1 庫檔案 74

4.1.1 jar包 74

4.1.2 aar包 75

4.2 APK 78

4.2.1 APK檔案結構 78

4.2.2 APK檔案的生成流程 79

4.2.3 APK的安裝流程 84

4.3 classes.dex 90

4.3.1 DEX檔案結構 90

4.3.2 DEX檔案的驗證與最佳化過程 104

4.3.3 DEX檔案的修改 108

4.3.4 MultiDex 111

4.4 AndroidManifest.xml 113

4.4.1 AndroidManifest.xml檔案的格式 113

4.4.2 AXML檔案格式 114

4.4.3 AXML檔案的修改 121

4.5 resources.arsc 121

4.5.1 ARSC檔案格式 122

4.5.2 ARSC檔案的修改 128

4.6 META-INF目錄 128

4.6.1 CERT.RSA 128

4.6.2 MANIFEST.MF 129

4.6.3 CERT.SF 130

4.7 ODEX 132

4.7.1 生成ODEX檔案 132

4.7.2 ODEX檔案格式 132

4.7.3 將ODEX檔案轉換成DEX檔案 136

4.8 OAT 137

4.8.1 ART虛擬機 137

4.8.2 生成OAT檔案 137

4.8.3 OAT檔案格式 138

4.8.4 將OAT檔案轉換成DEX檔案 141

4.9 本章小結 143

第5章 靜態分析Android程式

5.1 靜態分析簡介 145

5.2 閱讀smali代碼 145

5.2.1 smali檔案結構 145

5.2.2 循環語句 148

5.2.3 switch分支語句 153

5.2.4 try/catch語句 158

5.3 閱讀Java代碼 163

5.3.1 將DEX檔案轉換成jar包 163

5.3.2 jar分析工具 163

5.4 代碼定位技巧 164

5.4.1 入口分析法 164

5.4.2 信息反饋法 165

5.4.3 特徵函式法 165

5.5 使用JEB進行靜態分析 165

5.5.1 安裝JEB 165

5.5.2 JEB的靜態分析功能 166

5.5.3 JEB的腳本化與外掛程式 169

5.6 使用IDA Pro進行靜態分析 170

5.6.1 IDA Pro對Android的支持 170

5.6.2 分析DEX檔案 170

5.6.3 定位關鍵代碼 172

5.7 使用Androguard進行靜態分析 174

5.7.1 安裝Androguard 175

5.7.2 Androguard的使用方法 175

5.7.3 使用androlyze.py進行分析 179

5.8 本章小結 182  

第6章 動態分析Android程式

6.1 動態分析框架 183

6.2 動態分析技巧 189

6.2.1 代碼注入法 189

6.2.2 棧跟蹤法 192

6.2.3 Method Profiling 193

6.2.4 UI檢查 196

6.3 使用JDB動態調試APK 198

6.4 使用JEB動態調試APK 200

6.5 使用IDA Pro動態調試APK 201

6.6 本章小結 203

第7章 ARM反彙編基礎

7.1 Android與ARM處理器 204

7.1.1 ARM處理器架構概述 204

7.1.2 Android支持的處理器架構 205

7.2 Android ARM EABI 206

7.2.1 armeabi 206

7.2.2 armeabi-v7a 207

7.2.3 arm64-v8a 208

7.3 ARM原生程式的生成過程 208

7.3.1 預處理 210

7.3.2 編譯 211

7.3.3 彙編 215

7.3.4 連結 215

7.4 ARM彙編語言 216

7.4.1 ARM彙編程式結構 216

7.4.2 彙編指令 221

7.4.3 暫存器 223

7.4.4 處理器定址方式 224

7.4.5 子程式參數傳遞 227

7.5 ARM彙編指令集 230

7.5.1 ARM指令集分類 230

7.5.2 ARM指令編碼 231

7.5.3 ARM指令格式解析 233

7.5.4 常見ARM指令 234

7.6 Thumb彙編指令集 240

7.6.1 16位Thumb指令編碼 240

7.6.2 16位Thumb指令格式解析 241

7.6.3 32位Thumb指令編碼 242

7.6.4 32位Thumb指令格式解析 244

7.7 AArch64彙編指令集 246

7.7.1 AArch64指令編碼 246

7.7.2 AArch64指令格式解析 247

7.8 本章小結 250

第8章 Android原生程式開發與逆向分析

8.1 原生程式開發 251

8.1.1 原生程式工程 252

8.1.2 STL的選擇 253

8.1.3 JNI 254

8.1.4 編譯選項與配置項 256

8.2 原生程式移植 256

8.2.1 ADT項目的移植 257

8.2.2 UNIX開源項目的移植 258

8.2.3 CMake項目的移植 262

8.2.4 其他類型項目的移植 264  

10.1.4 GOT Hook 366

10.1.5 Inline Hook 367

10.2 Hook框架Xposed 368

10.3 Hook場景與套用 372

10.3.1 開啟日誌調試輸出 372

10.3.2 APK外掛程式 373

10.3.3 繞過SSL Pinning 373

10.4 動態注入 374

10.4.1 so動態庫注入 374

10.4.2 DEX注入 376

10.5 注入框架Frida 377

10.5.1 Frida的安裝與配置 377

10.5.2 執行注入與Hook 378

10.5.3 跟蹤Native方法 384

10.6 本章小結 386

第11章 軟體保護技術

11.1 軟體保護技術簡介 387

11.2 軟體混淆技術 388

11.2.1 源碼混淆 389

11.2.2 模板混淆 389

11.2.3 AST混淆 391

11.2.4 IR混淆 397

11.2.5 DEX混淆 397

11.2.6 DEX二次混淆 399

11.3 資源保護 401

11.4 完整性校驗 403

11.5 反調試技術 404

11.5.1 調試器狀態檢測 404

11.5.2 調試器連線埠檢測 404

11.5.3 進程狀態檢測 406

11.6 運行環境檢測 407

11.6.1 模擬器檢測 407

11.6.2 Root檢測 409

11.6.3 Hook檢測 409

11.7 本章小結 411

第12章 軟體殼

12.1 Android軟體殼 412

12.2 軟體殼的特徵與偵察 413

12.2.1 編譯器指紋 413

12.2.2 軟體殼的特徵 416

12.2.3 查殼工具 418

12.3 動態載入型殼 418

12.3.1 快取脫殼法 418

12.3.2 記憶體Dump脫殼法 419

12.3.3 動態調試脫殼法 420

12.3.4 Hook脫殼法 423

12.3.5 系統定製脫殼法 424

12.4 代碼抽取型殼 425

12.4.1 記憶體重組脫殼法 425

12.4.2 Hook脫殼法 427

12.4.3 系統定製脫殼法 427

12.5 代碼混淆殼 429

12.5.1 LLVM基礎 430

12.5.2 編寫Pass 434

12.5.3 Obfuscator-LLVM 440

12.5.4 代碼混淆殼的脫殼 443

12.6 本章小結 451  

相關詞條

熱門詞條

聯絡我們