圖書信息
作者:錢林松,趙海旭著出版社:機械工業出版社
出版時間:2011-10-1
版次:1
印刷時間:2011-10-1
紙張:膠版紙
印次:1
ISBN:9787111356332
包裝:平裝
內容簡介
全書共分為三大部分:第一部分主要介紹了VC++6.0、OllyDBG和反彙編靜態分析工具的使用,以及反彙編引擎的工作原理;第二部分以C/C++語法為導向,以VC++6.0為例,深入解析了每個C/C++知識點的彙編表現形式,包括基本數據類型、表達式、流程控制語句、函式、變數、數組、指針、結構體、類、構造函式、析構函式、虛函式、繼承和多重繼承、異常處理等,這部分內容重在修煉“內功”,不僅講解了調試和識別各種C/C++語句的方法,而且還深入剖析了各知識點的底層機制;第三部分是逆向分析技術的實際套用,通過對PEID、“熊貓燒香”病毒、OllyDBG調試器等的逆向分析將理論和實踐很好地融合在了一起。
本書適合幾乎所有軟體安全領域的工作者、想了解C++內部機制的中高級程式設計師,以及對Windows底層原理感興趣的技術人員閱讀。
作者簡介
錢林松,資深安全技術專家、軟體開發工程師和架構師,從事計算機安全和軟體開發工作12年,實踐經驗極其豐富。尤其精通軟體逆向分析技術,對C/C++技術和Windows的底層機制也有非常深入的研究。武漢科銳軟體技術有限公司創始人,教學經驗豐富,多年來,為國內計算機安全領域培養和輸送了大量的人才。活躍於看雪論壇,有較高的知名度和影響力。
目錄
前言
第一部分 準備工作
第1章 熟悉工作環境和相關工具 / 2
1.1 調試工具Microsoft Visual C++ 6.0和OllyDBG / 2
1.2 反彙編靜態分析工具IDA / 5
1.3 反彙編引擎的工作原理 / 11
1.4 本章小結 / 16
第二部分 C++反彙編揭秘
第2章 基本數據類型的表現形式 / 18
2.1 整數類型 / 18
2.1.1 無符號整數 / 18
2.1.2 有符號整數 / 18
2.2 浮點數類型 / 20
2.2.1 浮點數的編碼方式 / 21
2.2.2 基本的浮點數指令 / 23
2.3 字元和字元串 / 26
2.3.1 字元的編碼 / 27
2.3.2 字元串的存儲方式 / 28
2.4 布爾類型 / 29
2.5 地址、指針和引用 / 29
2.5.1 指針和地址的區別 / 30
2.5.2 各類型指針的工作方式 / 31
2.5.3 引用 / 34
2.6 常量 / 35
2.6.1 常量的定義 / 36
2.6.2 #define和const的區別 / 37
2.7 本章小結 / 38
第3章 認識啟動函式,找到用戶入口 / 40
3.1 程式的真正入口 / 40
3.2 了解VC++ 6.0的啟動函式 / 40
3.3 main函式的識別 / 44
3.4 本章小結 / 46
第4章 觀察各種表達式的求值過程 / 47
4.1 算術運算和賦值 / 47
4.1.1 各種算術運算的工作形式 / 47
4.1.2 算術結果溢出 / 82
4.1.3 自增和自減 / 83
4.2 關係運算和邏輯運算 / 85
4.2.1 關係運算和條件跳轉的對應 / 85
4.2.2 表達式短路 / 86
4.2.3 條件表達式 / 88
4.3 位運算 / 92
4.4 編譯器使用的最佳化技巧 / 94
4.4.1 流水線最佳化規則 / 97
4.4.2 分支最佳化規則 / 101
4.4.3 高速快取(cache)最佳化規則 / 101
4.5 一次算法逆向之旅 / 102
4.6 本章小結 / 109
第5章 流程控制語句的識別 / 110
5.1 if語句 / 110
5.2 if…else…語句 / 112
5.3 用if構成的多分支流程 / 115
5.4 switch的真相 / 119
5.5 難以構成跳轉表的switch / 128
5.6 降低判定樹的高度 / 133
5.7 do/while/for的比較 / 137
5.8 編譯器對循環結構的最佳化 / 143
5.9 本章小結 / 148
第6章 函式的工作原理 / 149
6.1 棧幀的形成和關閉 / 149
6.2 各種調用方式的考察 / 152
6.3 使用ebp或esp定址 / 155
6.4 函式的參數 / 158
6.5 函式的返回值 / 160
6.6 回顧 / 163
6.7 本章小結 / 165
第7章 變數在記憶體中的位置和訪問方式 / 166
7.1 全局變數和局部變數的區別 / 166
7.2 局部靜態變數的工作方式 / 169
7.3 堆變數 / 173
7.4 本章小結 / 177
第8章 數組和指針的定址 / 178
8.1 數組在函式內 / 178
8.2 數組作為參數 / 181
8.3 數組作為返回值 / 185
8.4 下標定址和指針定址 / 189
8.5 多維數組 / 193
8.6 存放指針類型數據的數組 / 199
8.7 指向數組的指針變數 / 201
8.8 函式指針 / 204
8.9 本章小結 / 206
第9章 結構體和類 / 207
9.1 對象的記憶體布局 / 207
9.2 this指針 / 212
9.3 靜態數據成員 / 217
9.4 對象作為函式參數 / 219
9.5 對象作為返回值 / 226
9.6 本章小結 / 231
第10章 關於構造函式和析構函式 / 233
10.1 構造函式的出現時機 / 233
10.2 每個對象都有默認的構造函式嗎 / 243
10.3 析構函式的出現時機 / 245
10.4 本章小結 / 254
第11章 關於虛函式 / 256
11.1 虛函式的機制 / 256
11.2 虛函式的識別 / 261
11.3 本章小結 / 268
第12章 從記憶體角度看繼承和多重繼承 / 269
12.1 識別類和類之間的關係 / 270
12.2 多重繼承 / 292
12.3 虛基類 / 298
12.4 菱形繼承 / 299
12.5 本章小結 / 307
第13章 異常處理 / 308
13.1 異常處理的相關知識 / 308
13.2 異常類型為基本數據類型的處理流程 / 314
13.3 異常類型為對象的處理流程 / 323
13.4 識別異常處理 / 329
13.5 本章小結 / 341
第三部分 逆向分析技術套用
第14章 PEiD的工作原理分析 / 344
14.1 開發環境的識別 / 344
14.2 開發環境的偽造 / 353
14.3 本章小結 / 356
第15章 “熊貓燒香”病毒逆向分析 / 357
15.1 調試環境配置 / 357
15.2 病毒程式初步分析 / 358
15.3 “熊貓燒香”的啟動過程分析 / 360
15.4 “熊貓燒香”的自我保護分析 / 366
15.5 “熊貓燒香”的感染過程分析 / 369
15.6 本章小結 / 379
第16章 調試器OllyDBG的工作原理分析 / 380
16.1 INT3斷點 / 380
16.2 記憶體斷點 / 385
16.3 硬體斷點 / 390
16.4 異常處理機制 / 396
16.5 載入調試程式 / 402
16.6 本章小結 / 406
第17章 反彙編代碼的重建與編譯 / 407
17.1 重建反彙編代碼 / 407
17.2 編譯重建後的反彙編代碼 / 410
17.3 本章小結 / 411
參考文獻 / 412