Frida Android SO 逆向深入實踐
陳佳林
買這商品的人也買了...
-
$505深入解析 Android 虛擬機
-
$1,280$1,216 -
$1,810$1,720 -
$714$678 -
$720$569 -
$594$564 -
$505Android 系統性能優化:卡頓、穩定性與續航
-
$1,188$1,129 -
$948$901 -
$534$507 -
$980$764 -
$510新能源汽車維修快速入門一本通
-
$414$393 -
$599$569 -
$500$395 -
$479$455 -
$414$393 -
$2,380$2,261 -
$1,000$900 -
$1,000$790 -
$720$504 -
$720$569 -
$479$455 -
$419$398 -
$1,080$853
相關主題
商品描述
《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