編譯與反編譯技術(shù)實(shí)戰(zhàn)
定 價(jià):79 元
叢書(shū)名:信息安全技術(shù)叢書(shū)
- 作者:龐建民 等
- 出版時(shí)間:2017/5/22
- ISBN:9787111566175
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類(lèi):TP393.08
- 頁(yè)碼:359
- 紙張:膠版紙
- 版次:1
- 開(kāi)本:16K
全書(shū)共14章,第1章簡(jiǎn)要介紹了本書(shū)所基于的環(huán)境與工具;第2~6章針對(duì)編譯的不同階段,展開(kāi)實(shí)踐方面的相關(guān)闡述,并結(jié)合GCC和LLVM這兩款具體的編譯器進(jìn)行論述;第7章介紹了多樣化編譯方面的實(shí)踐;第8~13章從反編譯的不同階段介紹與反編譯相關(guān)的可執(zhí)行程序格式、程序解碼和反匯編、中間表示生成、數(shù)據(jù)類(lèi)型和控制流的恢復(fù)、過(guò)程定義恢復(fù)等內(nèi)容;第14章簡(jiǎn)要介紹了反編譯在信息安全方面的應(yīng)用。
“編譯技術(shù)”是從事軟件開(kāi)發(fā)和信息安全相關(guān)工作的技術(shù)人員必須掌握的基礎(chǔ)性技術(shù),也是高等院校計(jì)算機(jī)科學(xué)與技術(shù)和軟件專(zhuān)業(yè)的一門(mén)必修專(zhuān)業(yè)課,這是理論與實(shí)踐結(jié)合非常強(qiáng)的領(lǐng)域,對(duì)提升開(kāi)發(fā)人員的技術(shù)水平和大學(xué)生科學(xué)思維的養(yǎng)成、解決實(shí)際問(wèn)題能力具有重要作用!胺淳幾g技術(shù)”則是近幾年發(fā)展起來(lái)的新興技術(shù),許多計(jì)算機(jī)軟件或信息安全從業(yè)者非常關(guān)心該技術(shù)的發(fā)展,但目前這方面的書(shū)籍較少,與“編譯技術(shù)”結(jié)合起來(lái)講解的書(shū)也很少,從實(shí)踐角度來(lái)剖析的更是少見(jiàn)。本書(shū)就是在這種需求以及作者在這兩方面的科研實(shí)踐的驅(qū)動(dòng)下誕生的,目的是為計(jì)算機(jī)軟件和信息安全從業(yè)者提供編譯與反編譯技術(shù)方面的知識(shí)和實(shí)戰(zhàn)技巧。
本書(shū)的編寫(xiě)得到了解放軍信息工程大學(xué)和機(jī)械工業(yè)出版社的大力支持,在此表示誠(chéng)摯的謝意。本書(shū)中的一些材料來(lái)自本書(shū)主編主持的國(guó)家自然科學(xué)基金(項(xiàng)目編號(hào):61472447)、國(guó)家“863”(項(xiàng)目編號(hào):2006AA01Z408)、國(guó)家重大專(zhuān)項(xiàng)某子課題等項(xiàng)目的研究成果,在此對(duì)這些課題的支持表示衷心的感謝!
本書(shū)是機(jī)械工業(yè)出版社2016年4月出版的《編譯與反編譯技術(shù)》(ISBN978-7-111-53412-9)一書(shū)的姊妹篇,配合學(xué)習(xí)和使用效果更佳。在本書(shū)中,作者著力闡述編譯與反編譯技術(shù)及實(shí)戰(zhàn)方面的相關(guān)知識(shí)和實(shí)戰(zhàn)技巧,力圖使用通用的語(yǔ)言講述抽象的原理、技術(shù)和實(shí)戰(zhàn)技能,但限于作者水平,書(shū)中難免有錯(cuò)誤與欠妥之處,懇請(qǐng)讀者批評(píng)指正。
作者2017年3月
目 錄?Contents
前言
第1章 實(shí)踐的環(huán)境與工具 1
1.1 實(shí)踐環(huán)境概述 1
1.2 詞法分析生成器LEX 1
1.3 語(yǔ)法分析生成器YACC 3
1.4 編譯器GCC 4
1.5 編譯器LLVM 5
1.6 反匯編工具IDA 6
1.7 反匯編工具OllyICE 6
1.8 仿真與分析工具QEMU 6
1.9 動(dòng)態(tài)分析工具TEMU 7
1.10 本章小結(jié) 8
第2章 編譯器實(shí)踐概述 9
2.1 編譯器、解釋器及其工作方式 9
2.2 編譯器的結(jié)構(gòu) 10
2.3 編譯器的設(shè)計(jì)與實(shí)現(xiàn)概述 12
2.3.1 利用Flex和Bison實(shí)現(xiàn)詞法和語(yǔ)法分析 12
2.3.2 利用LLVM實(shí)現(xiàn)代碼優(yōu)化和代碼生成 12
2.4 本章小結(jié) 13
第3章 詞法分析器的設(shè)計(jì)與實(shí)現(xiàn) 14
3.1 詞法分析器的設(shè)計(jì) 14
3.1.1 詞法分析器的功能 14
3.1.2 輸入及其處理 15
3.2 詞法分析器的手工實(shí)現(xiàn) 16
3.3 詞法分析器的LEX實(shí)現(xiàn) 31
3.3.1 LEX源文件結(jié)構(gòu) 32
3.3.2 LEX系統(tǒng)中的正規(guī)式 34
3.3.3 LEX 的使用方式 36
3.3.4 LEX 源文件示例——C語(yǔ)言詞法分析器 37
3.4 本章小結(jié) 41
第4章 語(yǔ)法分析器的設(shè)計(jì)與實(shí)現(xiàn) 42
4.1 自上而下的語(yǔ)法分析器的設(shè)計(jì)與實(shí)現(xiàn) 42
4.2 自下而上的語(yǔ)法分析器的設(shè)計(jì)與實(shí)現(xiàn) 61
4.3 語(yǔ)法分析器的生成器 72
4.3.1 YACC的源文件結(jié)構(gòu) 72
4.3.2 YACC和LEX的接口 76
4.3.3 YACC源程序示例——簡(jiǎn)單的臺(tái)式計(jì)算器 77
4.4 本章小結(jié) 78
第5章 GCC編譯器分析與實(shí)踐 79
5.1 GCC編譯器概述 79
5.2 GCC編譯器的系統(tǒng)結(jié)構(gòu) 80
5.3 GCC編譯器的分析程序 81
5.4 GCC編譯器的中間語(yǔ)言及其生成 82
5.5 GCC編譯器的優(yōu)化 82
5.6 GCC編譯器的目標(biāo)代碼生成 87
5.7 本章小結(jié) 88
第6章 LLVM編譯器分析與實(shí)踐 89
6.1 LLVM編譯器概述 89
6.1.1 起源 89
6.1.2 相關(guān)項(xiàng)目 90
6.2 經(jīng)典編譯器概述 91
6.2.1 經(jīng)典編譯器設(shè)計(jì)的啟示 91
6.2.2 現(xiàn)有編譯器的實(shí)現(xiàn) 92
6.3 LLVM的設(shè)計(jì) 93
6.3.1 LLVM中間表示 94
6.3.2 LLVM庫(kù)文件 95
6.4 LLVM前端 96
6.4.1 前端庫(kù)文件 97
6.4.2 詞法分析 97
6.4.3 語(yǔ)法分析 99
6.4.4 語(yǔ)義分析 100
6.4.5 LLVM IR代碼生成 100
6.5 LLVM的中間表示 100
6.5.1 LLVM IR語(yǔ)法 102
6.5.2 LLVM IR優(yōu)化實(shí)例 104
6.6 LLVM后端 106
6.6.1 后端庫(kù)文件 107
6.6.2 LLVM目標(biāo)架構(gòu)描述文件 108
6.7 應(yīng)用實(shí)例 109
6.7.1 代碼插樁 110
6.7.2 代碼保護(hù) 110
6.8 本章小結(jié) 111
第7章 多樣化編譯實(shí)踐 112
7.1 軟件多樣化的機(jī)會(huì) 112
7.1.1 應(yīng)用層的多樣化機(jī)會(huì) 112
7.1.2 Web服務(wù)層的多樣化機(jī)會(huì) 113
7.1.3 操作系統(tǒng)層的多樣化機(jī)會(huì) 115
7.1.4 組合后的多樣化機(jī)會(huì) 116
7.1.5 虛擬層的多樣化機(jī)會(huì) 116
7.2 多樣化帶來(lái)的管理復(fù)雜性 117
7.3 多樣化編譯技術(shù) 118
7.3.1 隨機(jī)化技術(shù) 118
7.3.2 代碼混淆技術(shù) 120
7.3.3 與堆棧相關(guān)的多樣化技術(shù) 123
7.4 多樣化編譯的應(yīng)用 125
7.4.1 多樣化編譯在安全防御方面的應(yīng)用 126
7.4.2 多樣化編譯工具的結(jié)構(gòu)組成及原理 127
7.5 本章小結(jié) 128
第8章 反編譯的對(duì)象——可執(zhí)行文件格式分析 129
8.1 可執(zhí)行文件格式 129
8.1.1 PE可執(zhí)行文件格式 129
8.1.2 ELF可執(zhí)行文件格式 130
8.2 main函數(shù)的識(shí)別 133
8.2.1 程序啟動(dòng)過(guò)程分析 136
8.2.2 startup函數(shù)解析 137
8.2.3 main()函數(shù)定位 140
8.3 本章小結(jié) 142
第9章 反編譯的基礎(chǔ)——指令系統(tǒng)和反匯編 143
9.1 指令系統(tǒng)概述 143
9.1.1 機(jī)器指令及格式 145
9.1.2 匯編指令及描述 147
9.2 指令解碼 149
9.2.1 SLED通用編解碼語(yǔ)言 149
9.2.2 x64的SLED描述 154
9.2.3 IA64的SLED描述 159
9.3 反匯編過(guò)程 161
9.3.1 線性?huà)呙璺磪R編 161
9.3.2 行進(jìn)遞歸反匯編 162
9.4 反匯編工具IDA與OllyICE實(shí)踐 163
9.4.1 IDA實(shí)踐 163
9.4.2 OllyICE實(shí)踐 166
9.5 本章小結(jié) 169
第10章 反編譯的中點(diǎn)——從匯編指令到中間表示 170
10.1 中間代碼生成在經(jīng)典反編譯器中的實(shí)際應(yīng)用 170
10.1.1 低級(jí)中間代碼 171
10.1.2 高級(jí)中間代碼 172
10.2 中間表示從設(shè)計(jì)到應(yīng)用的具體實(shí)例 175
10.2.1 指令基本組件描述 176
10.2.2 用UMSDL描述指令語(yǔ)義 179
10.3 本章小結(jié) 184
第11章 反編譯的推進(jìn)1——數(shù)據(jù)類(lèi)型恢復(fù) 185
11.1 基本數(shù)據(jù)類(lèi)型的分析和恢復(fù) 185
11.1.1 數(shù)據(jù)類(lèi)型分析的相關(guān)概念 186
11.1.2 基于指令語(yǔ)義的基本數(shù)據(jù)類(lèi)型分析 188
11.1.3 基于過(guò)程的數(shù)據(jù)類(lèi)型分析技術(shù) 190
11.2 函數(shù)類(lèi)型恢復(fù) 197
11.2.1 問(wèn)題引入 198
11.2.2 函數(shù)類(lèi)型的恢復(fù) 198
11.3 本章小結(jié) 203
第12章 反編譯的推進(jìn)2——控制流恢復(fù)實(shí)例 205
12.1 基于關(guān)鍵語(yǔ)義子樹(shù)的間接跳轉(zhuǎn)目標(biāo)解析 205
12.1.1 問(wèn)題的提出 206
12.1.2 相關(guān)工作 207
12.1.3 跳轉(zhuǎn)表的語(yǔ)義特征 208
12.1.4 基于關(guān)鍵語(yǔ)義子樹(shù)的間接跳轉(zhuǎn)目標(biāo)解析及翻譯 210
12.2 功能塊概念的引入 222
12.2.1 分析單位 222
12.2.2 基于基本塊的分析 223
12.2.3 功能塊 228
12.2.4