Frida Android SO逆向深入實踐

Frida Android SO逆向深入實踐

《Frida Android SO逆向深入實踐》是2023年10月 1日清華大學出版社出版的圖書,作者:陳佳林。

基本介紹

  • 中文名:Frida Android SO逆向深入實踐
  • 作者:陳佳林
  • 出版時間:2023年10月1日
  • 出版社:清華大學出版社
  • ISBN:9787302645597
  • 定價:149 元
  • 印次:1-1
  • 印刷日期:2023.09.21
內容簡介,圖書目錄,

內容簡介

《Frida Android SO逆向深入實踐》主要介紹使用Frida輔助分析SO進行逆向工程項目開發。首先從基礎開始介紹NDK編譯套件,開發編譯包含SO的套用軟體並進行動靜態分析調試;接著介紹如何將算法移植到SO中保護App,並使用模擬執行框架載入SO運行算法,使用GDB、HyperPwn、Objection、Frida聯合調試SO中的算法;此外,還將介紹ARM/ELF的檔案格式和反編譯工具IDA,Frida/Jnitrace Hook/Invoke JNI,JNI與反射及簡單風控案例設計分析,onCreate的Native化,分析Android源碼追蹤JNI的綁定流程。最後介紹哈希和對稱加解密算法的核心原理與實現細節,以及使用Frida輔助逆向分析的工作流程。 《Frida Android SO逆向深入實踐》按照由易到難、由淺入深的方式進行講解,適合Native層的初、中級讀者閱讀。

圖書目錄

目 錄
第1章 基本開發環境配置 1
1.1 虛擬機環境搭建 1
1.2 逆向環境搭建 3
1.2.1 Android Studio安裝NDK編譯套件 3
1.2.2 ADB的配置和使用 5
1.2.3 Python版本管理 6
1.2.4 移動設備環境準備 7
1.2.5 Frida版本管理 7
1.2.6 Objection的安裝和使用 8
1.3 Frida基本源碼開發環境搭建 10
1.4 初識NDK 12
1.5 其他工具 16
1.6 本章小結 18
第2章 Android SO動態調試入門 19
2.1 Android SO基本動態分析調試 19
2.1.1 第一個NDK程式 19
2.1.2 動態調試NDK程式 20
2.1.3 交叉編譯 24
2.2 LLDB動態調試(三方)Android SO 27
2.3 Capstone/Keystone/Unicorn(反)彙編器 30
2.4 Frida動態調試Android Native部分 32
2.5 Frida Instruction模組動態反彙編 32
2.6 本章小結 34
第3章 靜態分析工具的安裝和基本使用 35
3.1 使用objdump反彙編目標檔案命令顯示二進制檔案信息 35
3.2 使用010 Editor解析SO檔案顯示二進制基本信息 38
3.3 Ghidra/JEB/IDA高級反彙編器 40
3.4 Binary Ninja新晉反彙編器 47
3.5 本章小結 51
第4章 C算法開發及模擬執行 52
4.1 Native層密碼學套件移植開發 52
4.2 Frida Hook/主動調用執行算法 62
4.3 使用AndroidNativeEmu模擬執行算法 63
4.4 本章小結 64
第5章 動態調試:GDB動態調試、Hyperpwn/(記憶體)斷點/棧幀 65
5.1 GDB C/S的調試架構 65
5.2 將App編譯成帶調試符號的SO檔案 67
5.3 使用Android調試模式來啟動App 69
5.4 Hyperpwn調試入門 73
5.5 Objection+Frida+Hyperpwn聯合調試 79
5.6 本章小結 82
第6章 彙編開發:ARM彙編原理/流程/調用約定/動態調試 83
6.1 Android和ARM處理器 83
6.2 ARM原生程式的生成過程 84
6.3 彙編語言簡介 87
6.3.1 彙編程式組成 87
6.3.2 ARM處理器的工作模式與定址方式 91
6.4 ARM彙編指令及動態調試分析 94
6.5 多功能CPU模擬器:Unicorn 109
6.6 本章小結 110
第7章 逆向分析:ELF檔案結構、節/區/表/段/符號/連結器 111
7.1 作業系統ELF檔案動態載入的基礎知識 111
7.1.1 從幾個問題入手 111
7.1.2 作業系統的核心概念 112
7.2 執行檔的載入過程 114
7.3 使用Unidbg模擬執行SO檔案中的函式 116
7.3.1 Unidbg框架的基本運作原理 117
7.3.2 Unidbg各組件的基本功能 119
7.3.3 追蹤SO檔案的載入與解析流程 123
7.4 本章小結 126
第8章 反編譯工具IDA 127
8.1 IDA入門 127
8.1.1 IDA的安裝與使用 127
8.1.2 IDA外掛程式的使用 129
8.1.3 IDA反彙編介紹 130
8.1.4 IDA分析與Frida Hook結合 136
8.2 動靜態SO算法還原與脫機 137
8.2.1 IDA動態調試SO算法 137
8.2.2 Keypatch原理/實戰硬改算法邏輯 149
8.3 本章小結 150
第9章 JNI接口初識 151
9.1 JNI及其工作原理 151
9.1.1 NDK簡介 151
9.1.2 JNI——NDK具體的實現接口 153
9.2 Frida手動追蹤JNI接口 163
9.3 jnitrace自動追蹤JNI 167
9.4 JNI接口大橫評 168
9.4.1 Frida Hook並主動調用 169
9.4.2 jnitrace 179
9.4.3 ExAndroidNativeEmu 179
9.5 本章小結 183
第10章 JNI的特性:Java/Native互相調用、反射/全局/局部引用 184
10.1 反射“濫用”類和對象的基本屬性 184
10.1.1 反射的概念與相關的Java類 184
10.1.2 實例:Xposed刷機和編譯使用的外掛程式 186
10.1.3 反射設定/調用類和對象的域和方法 190
10.1.4 來自Native層的反射調用追蹤 192
10.2 設計簡單風控SDK並主動調用觀察效果 194
10.2.1 收集設備關鍵信息的常見方向和思路 194
10.2.2 Native層使用反射調用Java層API獲取設備信息 195
10.3 本章小結 208
第11章 onCreate進行Native化和引用 209
11.1 將onCreate函式Native化 209
11.2 Java記憶體管理 220
11.2.1 C和Java記憶體管理的差異 220
11.2.2 JNI的三種引用 220
11.3 本章小結 221
第12章 JNI動靜態綁定和追蹤 222
12.1 Dalvik下動靜態註冊流程追蹤 222
12.2 ART下動靜態註冊流程追蹤 228
12.3 本章小結 237
第13章 MD5算法分析和魔改 238
13.1 MD5算法的描述 240
13.2 MD5工程實現 246
13.3 哈希算法逆向分析 248
13.3.1 Findcrypt/Signsrch源碼剖析 248
13.3.2 算法識別外掛程式的核心原理與改進方向 254
13.3.3 使用findhash外掛程式檢測哈希算法 255
13.3.4 SHA1算法逆向分析實戰 258
13.4 哈希算法的擴展延伸 264
13.4.1 哈希算法的特徵 264
13.4 2 大廠最愛:HMAC-MD5/SHA1詳解 266
13.5 Frida MemoryAccessMonitor的使用場景 270
13.6 本章小結 277
第14章 對稱加密算法逆向分析 278
14.1 DES詳解 278
14.1.1 分組密碼的填充與工作模式 286
14.1.2 三重DES 287
14.2 AES 289
14.2.1 AES初識 289
14.2.2 深入了解AES 296
14.2.3 Unicorn輔助分析 302
14.2.4 AES的工作模式 305
14.3 本章小結 312
第15章 讀懂DEX並了解DexDump解析過程 313
15.1 環境及開發工具 313
15.2 認識DEX檔案結構 314
15.2.1 DEX檔案格式概貌 314
15.2.2 DEX檔案格式項目搭建 315
15.2.3 DEX檔案詳細分析 316
15.3 DexDump解析 330
15.3.1 ULEB128格式講解 330
15.3.2 DexDump解析過程 333
15.4 本章小結 338
第16章 ELF檔案格式解讀及其生成過程 339
16.1 ELF檔案頭 339
16.1.1 分析環境搭建 340
16.1.2 elf_header 341
16.1.3 program_header_table 344
16.1.4 section_header_table 344
16.2 ELF執行檔的生成過程與執行視圖 352
16.2.1 ARM執行檔的生成過程 352
16.2.2 執行視圖 357
16.2.3 GOT和PLT 359
16.3 本章小結 365
第17章 高版本Android函式地址索引徹底解決方案 366
17.1 不同版本對於動態程式庫的調用對比 366
17.2 高版本載入SO檔案 367
17.2.1 自定義庫查看庫函式的偏移 367
17.2.2 自定義庫實現的背景 368
17.2.3 自定義庫findsym的實現 370
17.3 SO符號地址尋找 372
17.3.1 通過節頭獲取符號地址 372
17.3.2 模仿Android通過哈希尋找符號 374
17.4 本章小結 377
第18章 從findExportByName源碼分析到anti-frida新思路 378
18.1 兩種模式下anti-frida的演示 378
18.1.1 Frida attach模式下的anti-frida 378
18.1.2 Frida spawn模式下的anti-frida 380
18.2 源碼分析 383
18.2.1 Frida編譯 384
18.2.2 源碼追蹤分析 385
18.3 本章小結 388
第19章 PLT和GOT的Hook 389
19.1 GOT的Hook 389
19.1.1 根據節頭實現Hook 392
19.1.2 根據程式頭來實現Hook 395
19.2 PLT的Hook 397
19.2.1 根據節頭來實現Hook 397
19.2.2 根據程式頭來實現Hook 403
19.3 從GOT和PLT的Hook到xHook原理剖析 406
19.3.1 xHook的優點 406
19.3.2 源碼賞析 406
19.4 本章小結 407
第20章 番外篇——另類方法尋找SO檔案首地址 408
20.1 項目搭建 408
20.2 封裝成庫 413
20.3 通過soinfo的映射表遍歷符號 415
20.4 dlopen和dlsym獲取符號地址 417
20.5 本章小結 418
第21章 Java Hook的原理 419
21.1 Java函式源碼追蹤 419
21.1.1 什麼是Java Hook 419
21.1.2 源碼追蹤 420
21.2 Java Hook實踐 424
21.3 Frida中Java Hook的實現 429
21.3.1 Frida perform源碼追蹤 429
21.3.2 Frida implementation源碼追蹤 435
21.4 本章小結 437
第22章 inline Hook中用到的彙編指令 438
22.1 兩種Hook方式的介紹 438
22.2 定向跳轉 441
22.3 暫存器保存 445
22.3.1 暫存器選擇 445
22.3.2 3種暫存器賦值的方案 446
22.4 本章小結 449
第23章 基於Capstone處理特殊指令 450
23.1 編譯Capstone並配置測試環境 450
23.2 Capstone官方測試案例演示 453
23.3 自定義彙編翻譯函式 456
23.4 基於Capstone修正指令 459
23.4.1 指令修復的目的 459
23.4.2 修復指令的原理 460
23.4.3 指令修復的種類 460
23.5 本章小結 461
第24章 inline Hook框架集成 462
24.1 inline Hook框架測試 462
24.2 結合Capstone框架 467
24.3 本章小結 469
第25章 通殺的檢測型框架r0Invoke 470
25.1 r0Invoke牛刀小試脫殼fulao2 471
25.1.1 APK靜態分析 471
25.1.2 使用r0Invoke脫殼 471
25.1.3 脫殼操作 472
25.2 r0Invoke進階:跟蹤所有運行在ART下的Java函式 477
25.3 r0Invoke主動調用Native函式並且修改參數 479
25.4 r0Invoke Trace高度混淆OLLVM 482
25.5 本章小結 484
第26章 SO檔案載入流程分析與注入實戰 485
26.1 SO檔案的載入方式 485
26.2 SO檔案載入流程 487
26.3 Frida Hook dlopen和android_dlopen_ext 491
26.4 編譯AOSP注入SO 496
26.4.1 直接載入sdcard中的SO檔案 497
26.4.2 載入私有目錄的SO檔案 498
26.4.3 編譯AOSP注入SO檔案 500
26.5 注入最佳化 502
26.6 本章小結 504

相關詞條

熱門詞條

聯絡我們