天天看點

《編譯與反編譯技術實戰 》一導讀

《編譯與反編譯技術實戰 》一導讀

“編譯技術”是從事軟體開發和資訊安全相關工作的技術人員必須掌握的基礎性技術,也是高等院校計算機科學與技術和軟體專業的一門必修專業課,這是理論與實踐結合非常強的領域,對提升開發人員的技術水準和大學生科學思維的養成、解決實際問題能力具有重要作用。“反編譯技術”則是近幾年發展起來的新興技術,許多計算機軟體或資訊安全從業者非常關心該技術的發展,但目前這方面的書籍較少,與“編譯技術”結合起來講解的書也很少,從實踐角度來剖析的更是少見。本書就是在這種需求以及作者在這兩方面的科研實踐的驅動下誕生的,目的是為計算機軟體和資訊安全從業者提供編譯與反編譯技術方面的知識和實戰技巧。

本書的編寫得到了解放軍資訊工程大學和機械工業出版社的大力支援,在此表示誠摯的謝意。本書中的一些材料來自本書主編主持的國家自然科學基金(項目編号:61472447)、國家“863”(項目編号:2006aa01z408)、國家重大專項某子課題等項目的研究成果,在此對這些課題的支援表示衷心的感謝!

本書是機械工業出版社2016年4月出版的《編譯與反編譯技術》(isbn 978-7-111-53412-9)一書的姊妹篇,配合學習和使用效果更佳。在本書中,作者着力闡述編譯與反編譯技術及實戰方面的相關知識和實戰技巧,力圖使用通用的語言講述抽象的原理、技術和實戰技能,但限于作者水準,書中難免有錯誤與欠妥之處,懇請讀者批評指正。

第1章 實踐的環境與工具

第2章 編譯器實踐概述

2.3.1 利用flex和bison實作詞法和文法分析

2.3.2 利用llvm實作代碼優化和代碼生成

第3章 詞法分析器的設計與實作

3.1.1 詞法分析器的功能

3.1.2 輸入及其處理

3.3.1 lex源檔案結構

3.3.2 lex系統中的正規式

3.3.3 lex 的使用方式 36

3.3.4 lex 源檔案示例——c語言詞法分析器

第4章 文法分析器的設計與實作

4.1 自上而下的文法分析器的設計與實作

4.2 自下而上的文法分析器的設計與實作

4.3 文法分析器的生成器

4.3.1 yacc的源檔案結構

4.3.2 yacc和lex的接口

4.3.3 yacc源程式示例——簡單的桌上型電腦

4.4 本章小結

第5章 gcc編譯器分析與實踐

5.1 gcc編譯器概述

5.2 gcc編譯器的系統結構

5.3 gcc編譯器的分析程式

5.4 gcc編譯器的中間語言及其生成

5.5 gcc編譯器的優化

5.6 gcc編譯器的目标代碼生成

5.7 本章小結

第6章 llvm編譯器分析與實踐

6.1 llvm編譯器概述

6.1.1 起源

6.1.2 相關項目

6.2 經典編譯器概述

6.2.1 經典編譯器設計的啟示

6.2.2 現有編譯器的實作

6.3 llvm的設計

6.3.1 llvm中間表示

6.3.2 llvm庫檔案

6.4 llvm前端

6.4.1 前端庫檔案

6.4.2 詞法分析

6.4.3 文法分析

6.4.4 語義分析

6.4.5 llvm ir代碼生成

6.5 llvm的中間表示

6.5.1 llvm ir文法

6.5.2 llvm ir優化執行個體

6.6 llvm後端

6.6.1 後端庫檔案

6.6.2 llvm目标架構描述檔案

6.7 應用執行個體

6.7.1 代碼插樁

6.7.2 代碼保護

6.8 本章小結

第7章 多樣化編譯實踐

7.1 軟體多樣化的機會

7.1.1 應用層的多樣化機會

7.1.2 web服務層的多樣化機會

7.1.3 作業系統層的多樣化機會

7.1.4 組合後的多樣化機會

7.1.5 虛拟層的多樣化機會

7.2 多樣化帶來的管理複雜性

7.3 多樣化編譯技術

7.3.1 随機化技術

7.3.2 代碼混淆技術

7.3.3 與堆棧相關的多樣化技術

7.4 多樣化編譯的應用

7.4.1 多樣化編譯在安全防禦方面的應用

7.4.2 多樣化編譯工具的結構組成及原理

7.5 本章小結

第8章  反編譯的對象——可執行檔案格式分析

8.1 可執行檔案格式

8.1.1 pe可執行檔案格式

8.1.2 elf可執行檔案格式

8.2 main函數的識别

8.2.1 程式啟動過程分析

8.2.2 startup函數解析

8.2.3 main()函數定位

8.3 本章小結

第9章  反編譯的基礎——指令系統和反彙編

9.1 指令系統概述

9.1.1 機器指令及格式

9.1.2 彙編指令及描述

9.2 指令解碼

9.2.1 sled通用編解碼語言

9.2.2 x64的sled描述

9.2.3 ia64的sled描述

9.3 反彙編過程

9.3.1 線性掃描反彙編

9.3.2 行進遞歸反彙編

9.4 反彙編工具ida與ollyice實踐

9.4.1 ida實踐

9.4.2 ollyice實踐

9.5 本章小結

第10章 反編譯的中點——從彙編指令到中間表示

10.1 中間代碼生成在經典反編譯器中的實際應用

10.1.1 低級中間代碼

10.1.2 進階中間代碼

10.2 中間表示從設計到應用的具體執行個體

10.2.1 指令基本元件描述

10.2.2 用umsdl描述指令語義

10.3 本章小結

第11章 反編譯的推進1——資料類型恢複

11.1 基本資料類型的分析和恢複

11.1.1 資料類型分析的相關概念

11.1.2 基于指令語義的基本資料類型分析

11.1.3 基于過程的資料類型分析技術

11.2 函數類型恢複

11.2.1 問題引入

11.2.2 函數類型的恢複

11.3 本章小結

第12章 反編譯的推進2——控制流恢複執行個體

12.1 基于關鍵語義子樹的間接跳轉目标解析

12.1.1 問題的提出

12.1.2 相關工作

12.1.3 跳轉表的語義特征

12.1.4 基于關鍵語義子樹的間接跳轉目标解析及翻譯

12.2 功能塊概念的引入

12.2.1 分析機關

12.2.2 基于基本塊的分析

12.2.3 功能塊

12.2.4 針對功能塊的驗證

12.3 基于功能塊的間接轉移指令目标位址的确定

12.3.1 程式控制流圖建構方法中存在的問題

12.3.2 無法處理的代碼

12.3.3 程式執行路徑的逆向構造

12.3.4 逆向構造執行路徑的控制執行

12.3.5 針對程式執行路徑逆向構造的驗證

12.4 本章小結

第13章 反編譯的推進3——過程定義恢複

13.1 過程分析概述

13.1.1 過程抽象

13.1.2 調用約定分析

13.2 庫函數恢複

13.2.1 快速庫函數調用識别方法

13.2.2 基于特征資料庫的模式比對方法

13.2.3 基于函數簽名的庫函數識别方法

13.2.4 庫函數參數的恢複

13.2.5 隐式庫函數調用

13.3 使用者自定義過程的資料恢複

13.3.1 基于語義映射的資料恢複

13.3.2 基于棧幀平衡的資料恢複

13.4 使用者函數與庫函數同名的區分

13.4.1 函數同名問題

13.4.2 函數同名解決執行個體

13.5 本章小結

第14章 反編譯在資訊安全方面的應用實踐

14.1 反編譯在資訊安全中的應用

14.1.1 反編譯技術的優勢

14.1.2 代碼惡意性判定

14.1.3 代碼敏感行為标注

14.1.4 惡意代碼威脅性評估

14.2 反編譯在惡意代碼分析中的應用

14.2.1 基于檔案結構的惡意代碼分析

14.2.2 基于彙編指令的惡意代碼分析

14.2.3 基于流圖的惡意代碼分析

14.2.4 基于系統調用的惡意代碼分析

14.3 惡意代碼與反編譯技術的對抗

14.3.1 混淆

14.3.2 多态

14.3.3 變形

14.3.4 加殼

14.3.5 虛拟執行

14.4 反編譯架構針對惡意行為的改進

14.4.1 條件跳轉混淆

14.4.2 指令重疊混淆

14.4.3 子程式異常傳回

14.4.4 不透明謂詞混淆

14.5 執行個體分析

14.5.1 系統設計

14.5.2 系統子產品劃分

14.5.3 測試結果與分析

14.6 本章小結

參考文獻

繼續閱讀