Frida Android SO 逆向深入實踐

陳佳林

  • 出版商: 清華大學
  • 出版日期: 2023-10-01
  • 售價: $894
  • 貴賓價: 9.5$849
  • 語言: 簡體中文
  • 頁數: 505
  • 裝訂: 平裝
  • ISBN: 7302645590
  • ISBN-13: 9787302645597
  • 相關分類: Android
  • 立即出貨 (庫存 < 4)

  • Frida Android SO 逆向深入實踐-preview-1
  • Frida Android SO 逆向深入實踐-preview-2
  • Frida Android SO 逆向深入實踐-preview-3
Frida Android SO 逆向深入實踐-preview-1

買這商品的人也買了...

商品描述

《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