《unidbg逆向工程:原理與實踐》是2024年機械工業出版社出版的圖書。
基本介紹
- 中文名:unidbg逆向工程:原理與實踐
- 出版時間:2024年1月1日
- 出版社:機械工業出版社
- ISBN:9787111741824
內容簡介,圖書目錄,
內容簡介
這是一本從原理和實踐角度講解unidbg的著作,不僅深入解析了unidbg的使用方法、工作原理、實現細節,而且詳細講解了如何用unidbg解決生產環境中的各種逆向工程難題。它是作者多年安全工作經驗的總結,得到了unidbg框架作者的高度評價和推薦。
全書共31章,分為四個部分。
第一部分(第1~3章) unidbg基礎
主要介紹了unidbg的基本使用和操作,包括工作環境的準備、so檔案載入、簡單補環境、Hook和Patch的方法等。
第二部分(第4~15章) unidbg原理與實現
通過源碼分析的方式對unidbg的原理與實現進行了詳細的剖析,首先分析了Unicorn模擬linker實現so的載入、連結、初始化的原理,然後深入分析了unidbg主要功能和模組的源碼實現,包括AndroidEmulator、JNI互動流程追蹤、DalvikVM、Memory、Hook等。
第三部分(第16~26章) 補環境與模擬執行實戰
通過實戰案例講解了unidbg在生產環境中的使用,包括如I/O重定向、Debugger自吐,指針參數與Debugger、魔改Base64還原、使用unidbg動態分析記憶體中的數據、使用unidbg主動調用fork進程,並對補環境中的補環境入門、標識記錄、設備風控、補環境加強等進行分析,指導讀者編寫實際的補環境代碼,更好地將理論知識運用於實踐中。
第四部分(第27~31章) 反制與生產環境部署。
介紹了環境變數檢測、xHook框架檢測、JNI層常見函式處理等,對常規檢測進行了總結,並介紹了在檢測之後如何把so部署到x86伺服器上。這部分內容對批量生產與對抗、大數據風控非常有價值,對於打擊黑灰產、遏制網路犯罪有著非常積極的意義。
圖書目錄
前 言
第一部分 進入unidbg的世界
第1章 unidbg環境準備與快速
上手 2
1.1 r0env環境介紹與集成 2
1.1.1 r0env各組件介紹 2
1.1.2 r0env下載及安裝 5
1.2 IDEA安裝及配置 6
1.3 第一個unidbg項目 7
1.3.1 unidbg介紹 7
1.3.2 unidbg下載與運行示例 8
1.3.3 unidbg示例講解 9
1.4 本章小結 13
第2章 unidbg模擬執行初探 14
2.1 第一個NDK項目 14
2.1.1 使用Android Studio創建NDK項目 14
2.1.2 編寫自己的so業務代碼 16
2.2 unidbg的符號調用與地址調用 18
2.2.1 unidbg主動調用前置準備 18
2.2.2 unidbg主動調用so函式 19
2.2.3 unidbg部分API簡單講解 22
2.3 本章小結 24
第3章 unidbg補環境、Hook與
Patch 25
3.1 為so添加互動:使用JNI接口
編寫md5方法 25
3.2 使用unidbg修補執行環境並
模擬執行 27
3.3 脫離編譯器,使用命令行
編譯so 34
3.4 unidbg的Hook 36
3.5 unidbg的Patch 39
3.6 本章小結 42
第二部分 unidbg原理
第4章 ELF檔案執行視圖解析 44
4.1 ELF檔案結構 44
4.1.1 ELF頭部結構 45
4.1.2 程式頭部表 47
4.1.3 動態節區_DYNAMIC段 51
4.2 深入jelf代碼細節,探究ELF
解析 54
4.2.1 分析原版jelf代碼 54
4.2.2 分析unidbg版jelf代碼 56
4.3 本章小結 60
第5章 Unicorn的初級使用與初探Linker 61
5.1 Unicorn的初級使用:模擬執行與Hook 61
5.1.1 使用Unicorn進行模擬
執行 61
5.1.2 Unicorn的Hook 64
5.1.3 Keystone與Capstone 70
5.2 初探Android系統源碼 71
5.2.1 Java層代碼追蹤 73
5.2.2 Native層代碼追蹤 75
5.3 本章小結 78
第6章 深入Linker:so的載入、
連結、初始化 79
6.1 so的載入過程 79
6.2 so的連結過程 90
6.3 so的初始化操作 100
6.4 本章小結 102
第7章 使用Unicorn模擬Linker:so的載入過程 103
7.1 模擬Linker?:環境準備 103
7.2 模擬Linker?:so的載入 109
7.3 動態調試Linker,探究so的記憶體
布局圖 118
7.4 本章小結 122
第8章 使用Unicorn模擬Linker:
so的連結過程 123
8.1 so的依賴庫載入過程 123
8.2 so的動態連結 127
8.3 初嘗試:使用unidbg模擬執行
簡單so檔案 131
8.4 探究unidbg的Linker代碼
細節 133
8.4.1 unidbg載入so檔案代碼
入口 134
8.4.2 處理so信息並載入記憶體 135
8.4.3 對so的依賴庫進行處理 137
8.4.4 重定位操作 138
8.4.5 處理so的初始化信息與生成module對象 140
8.4.6 執行初始化 141
8.5 本章小結 142
第9章 R0dbg實戰與Unidbg_FindKey 143
9.1 模擬Linker?:so的初始化過程 143
9.2 指令追蹤與排錯 147
9.2.1 TLS執行緒局部存儲環境
初始化 148
9.2.2 R0dbg對系統調用進行
處理 150
9.3 使用R0dbg模擬執行so 152
9.4 Unidbg_FindKey牛刀小試 154
9.5 本章小結 157
第10章 unidbg源碼解析:AndroidEmulator 158
10.1 創建AndroidEmulator 158
10.2 創建FileSystem 165
10.3 創建Backend 168
10.4 創建SvcMemory 169
10.5 本章小結 172
第11章 unidbg源碼解析:
DalvikVM 173
11.1 分析createDalvikVM() 173
11.2 Dvm相關類介紹 178
11.2.1 BaseVM解析 179
11.2.2 DalvikVM解析 184
11.2.3 DvmObject解析 185
11.2.4 DvmClass解析 187
11.3 本章小結 188
第12章 unidbg源碼解析:模擬
執行流程追蹤 189
12.1 編寫含JNI互動的MD5算法並
模擬執行 189
12.1.1 編寫含JNI互動的so 189
12.1.2 使用unidbg進行模擬
執行 190
12.2 模擬執行流程追蹤:尋找
函式 192
12.3 模擬執行流程追蹤:處理參數
並模擬執行 195
12.4 本章小結 202
第13章 unidbg源碼解析:JNI
互動流程追蹤 203
13.1 JNI註冊 203
13.2 JNI指令執行 208
13.3 本章小結 217
第14章 unidbg源碼解析:
Memory 218
14.1 Memory模組的創建 218
14.2 AndroidElfLoader的方法實現 219
14.2.1 記憶體相關方法實現 219
14.2.2 棧空間相關方法實現 226
14.2.3 用戶常用方法解析 227
14.2.4 虛擬模組 230
14.3 載入so的loader功能 231
14.4 本章小結 237
第15章 unidbg源碼解析:
Hook 238
……