前言
第1章 實踐的環境與工具 1
1.1 實踐環境概述 1
1.2 詞法分析生成器LEX 1
1.3 語法分析生成器YACC 3
1.4 編譯器GCC 4
1.5 編譯器LLVM 5
1.6 反匯編工具IDA 6
1.7 反匯編工具OllyICE 6
1.8 仿真與分析工具QEMU 6
1.9 動態分析工具TEMU 7
1.10 本章小結 8
第2章 編譯器實踐概述 9
2.1 編譯器、解釋器及其工作方式 9
2.2 編譯器的結構 10
2.3 編譯器的設計與實現概述 12
2.3.1 利用Flex和Bison實現詞法和語法分析 12
2.3.2 利用LLVM實現代碼優化和代碼生成 12
2.4 本章小結 13
第3章 詞法分析器的設計與實現 14
3.1 詞法分析器的設計 14
3.1.1 詞法分析器的功能 14
3.1.2 輸入及其處理 15
3.2 詞法分析器的手工實現 16
3.3 詞法分析器的LEX實現 31
3.3.1 LEX源文件結構 32
3.3.2 LEX係統中的正規式 34
3.3.3 LEX 的使用方式 36
3.3.4 LEX 源文件示例——C語言詞法分析器 37
3.4 本章小結 41
第4章 語法分析器的設計與實現 42
4.1 自上而下的語法分析器的設計與實現 42
4.2 自下而上的語法分析器的設計與實現 61
4.3 語法分析器的生成器 72
4.3.1 YACC的源文件結構 72
4.3.2 YACC和LEX的接口 76
4.3.3 YACC源程序示例——簡單的颱式計算器 77
4.4 本章小結 78
第5章 GCC編譯器分析與實踐 79
5.1 GCC編譯器概述 79
5.2 GCC編譯器的係統結構 80
5.3 GCC編譯器的分析程序 81
5.4 GCC編譯器的中間語言及其生成 82
5.5 GCC編譯器的優化 82
5.6 GCC編譯器的目標代碼生成 87
5.7 本章小結 88
第6章 LLVM編譯器分析與實踐 89
6.1 LLVM編譯器概述 89
6.1.1 起源 89
6.1.2 相關項目 90
6.2 經典編譯器概述 91
6.2.1 經典編譯器設計的啓示 91
6.2.2 現有編譯器的實現 92
6.3 LLVM的設計 93
6.3.1 LLVM中間錶示 94
6.3.2 LLVM庫文件 95
6.4 LLVM前端 96
6.4.1 前端庫文件 97
6.4.2 詞法分析 97
6.4.3 語法分析 99
6.4.4 語義分析 100
6.4.5 LLVM IR代碼生成 100
6.5 LLVM的中間錶示 100
6.5.1 LLVM IR語法 102
6.5.2 LLVM IR優化實例 104
6.6 LLVM後端 106
6.6.1 後端庫文件 107
6.6.2 LLVM目標架構描述文件 108
6.7 應用實例 109
6.7.1 代碼插樁 110
6.7.2 代碼保護 110
6.8 本章小結 111
第7章 多樣化編譯實踐 112
7.1 軟件多樣化的機會 112
7.1.1 應用層的多樣化機會 112
7.1.2 Web服務層的多樣化機會 113
7.1.3 操作係統層的多樣化機會 115
7.1.4 組閤後的多樣化機會 116
7.1.5 虛擬層的多樣化機會 116
7.2 多樣化帶來的管理復雜性 117
7.3 多樣化編譯技術 118
7.3.1 隨機化技術 118
7.3.2 代碼混淆技術 120
7.3.3 與堆棧相關的多樣化技術 123
7.4 多樣化編譯的應用 125
7.4.1 多樣化編譯在安全防禦方麵的應用 126
7.4.2 多樣化編譯工具的結構組成及原理 127
7.5 本章小結 128
第8章 反編譯的對象——可執行文件格式分析 129
8.1 可執行文件格式 129
8.1.1 PE可執行文件格式 129
8.1.2 ELF可執行文件格式 130
8.2 main函數的識彆 133
8.2.1 程序啓動過程分析 136
8.2.2 startup函數解析 137
8.2.3 main()函數定位 140
8.3 本章小結 142
第9章 反編譯的基礎——指令係統和反匯編 143
9.1 指令係統概述 143
9.1.1 機器指令及格式 145
9.1.2 匯編指令及描述 147
9.2 指令解碼 149
9.2.1 SLED通用編解碼語言 149
9.2.2 x64的SLED描述 154
9.2.3 IA64的SLED描述 159
9.3 反匯編過程 161
9.3.1 綫性掃描反匯編 161
9.3.2 行進遞歸反匯編 162
9.4 反匯編工具IDA與OllyICE實踐 163
9.4.1 IDA實踐 163
9.4.2 OllyICE實踐 166
9.5 本章小結 169
第10章 反編譯的中點——從匯編指令到中間錶示 170
10.1 中間代碼生成在經典反編譯器中的實際應用 170
10.1.1 低級中間代碼 171
10.1.2 高級中間代碼 172
10.2 中間錶示從設計到應用的具體實例 175
10.2.1 指令基本組件描述 176
10.2.2 用UMSDL描述指令語義 179
10.3 本章小結 184
第11章 反編譯的推進1——數據類型恢復 185
11.1 基本數據類型的分析和恢復 185
11.1.1 數據類型分析的相關概念 186
11.1.2 基於指令語義的基本數據類型分析 188
11.1.3 基於過程的數據類型分析技術 190
11.2 函數類型恢復 197
11.2.1 問題引入 198
11.2.2 函數類型的恢復 198
11.3 本章小結 203
第12章 反編譯的推進2——控製流恢復實例 205
12.1 基於關鍵語義子樹的間接跳轉目標解析 205
12.1.1 問題的提齣 206
12.1.2 相關工作 207
12.1.3 跳轉錶的語義特徵 208
12.1.4 基於關鍵語義子樹的間接跳轉目標解析及翻譯 210
12.2 功能塊概念的引入 222
12.2.1 分析單位 222
12.2.2 基於基本塊的分析 223
12.2.3 功能塊 228
12.2.4 針對功能塊的驗證 230
12.3 基於功能塊的間接轉移指令目標地址的確定 233
12.3.1 程序控製流圖構建方法中存在的問題 233
12.3.2 無法處理的代碼 234
12.3.3 程序執行路徑的逆嚮構造 235
12.3.4 逆嚮構造執行路徑的控製執行 245
12.3.5 針對程序執行路徑逆嚮構造的驗證 246
12.4 本章小結 248
第13章 反編譯的推進3——過程定義恢復 250
13.1 過程分析概述 250
13.1.1 過程抽象 250
13.1.2 調用約定分析 251
13.2 庫函數恢復 255
13.2.1 快速庫函數調用識彆方法 255
13.2.2 基於特徵數據庫的模式匹配方法 256
13.2.3 基於函數簽名的庫函數識彆方法 257
13.2.4 庫函數參數的恢復 262
13.2.5 隱式庫函數調用 267
13.3 用戶自定義過程的數據恢復 279
13.3.1 基於語義映射的數據恢復 280
13.3.2 基於棧幀平衡的數據恢復 282
13.4 用戶函數與庫函數同名的區分 283
13.4.1 函數同名問題 283
13.4.2 函數同名解決實例 286
13.5 本章小結 290
第14章 反編譯在信息安全方麵的應用實踐 291
14.1 反編譯在信息安全中的應用 291
14.1.1 反編譯技術的優勢 292
14.1.2 代碼惡意性判定 292
14.1.3 代碼敏感行為標注 293
14.1.4 惡意代碼威脅性評估 293
14.2 反編譯在惡意代碼分析中的應用 294
14.2.1 基於文件結構的惡意代碼分析 294
14.2.2 基於匯編指令的惡意代碼分析 295
14.2.3 基於流圖的惡意代碼分析 296
14.2.4 基於係統調用的惡意代碼分析 298
14.3 惡意代碼與反編譯技術的對抗 300
14.3.1 混淆 300
14.3.2 多態 304
14.3.3 變形 306
14.3.4 加殼 307
14.3.5 虛擬執行 308
14.4 反編譯框架針對惡意行為的改進 309
14.4.1 條件跳轉混淆 309
14.4.2 指令重疊混淆 314
14.4.3 子程序異常返迴 319
14.4.4 不透明謂詞混淆 324
14.5 實例分析 330
14.5.1 係統設計 330
14.5.2 係統模塊劃分 331
14.5.3 測試結果與分析 351
14.6 本章小結 355
參考文獻 356
· · · · · · (
收起)