黑客編程和逆向分析是計算機安全從業(yè)者需要掌握的兩項基本功,隨著各大企業(yè)對安全技術(shù)的日益重視,工程師在這方面的學(xué)習(xí)需求也在持續(xù)增長。
本書共11章,既包括黑客編程的內(nèi)容,如數(shù)據(jù)的存儲及表示形式、匯編語言入門;又包括逆向分析的知識,如熟悉調(diào)試工具OD、PE工具詳解、PE文件格式實例(包括加殼與脫殼工具的使用)、十六進制編輯器與反編譯工具、IDA與逆向、逆向工具的原理及實現(xiàn)、安卓逆向分析。此外,本書還介紹了計算機安全的新技術(shù),如DEX文件格式解析和Dalvik指令解析等。
本書既可以作為網(wǎng)絡(luò)編程人員、安全技術(shù)研究人員和安全技術(shù)愛好者的參考書,又可以作為大專院校計算機相關(guān)專業(yè)的教學(xué)用書或相關(guān)培訓(xùn)機構(gòu)的教材。
書中詳細介紹了逆向工程的知識(反匯編的閱讀、PE結(jié)構(gòu)等)和逆向工程的具體應(yīng)用(緩沖區(qū)溢出、軟件保護、反病毒等)
本書以逆向工具的使用來展開,逐步深入到逆向工具的原理、逆向技術(shù)及操作系統(tǒng)的知識。
本書的目的是幫助相關(guān)從業(yè)者及愛好者快速熟悉逆向工程方面的相關(guān)知識和逆向軟件工具的使用。
冀云,安全技術(shù)工程師,熱愛分享,擅長安全技術(shù)!禖++ 黑客編程揭秘與防范》作者。
目錄
第 1章 數(shù)據(jù)的存儲及表示形式 1
1.1 進制及進制的轉(zhuǎn)換 1
1.1.1 現(xiàn)實生活中的進制與計算機中的二進制 1
1.1.2 進制的定義 2
1.1.3 進制的轉(zhuǎn)換 2
1.2 數(shù)據(jù)寬度、字節(jié)序和ASCII 4
1.2.1 數(shù)據(jù)的寬度 4
1.2.2 數(shù)值的表示范圍 4
1.2.3 字節(jié)序 5
1.2.4 ASCII 6
1.3 在OllyDbg中查看數(shù)據(jù) 6
1.4 編程判斷主機字節(jié)序 11
1.4.1 字節(jié)序相關(guān)函數(shù) 11
1.4.2 編程判斷主機字節(jié)序 11
1.5 總結(jié) 12
第 2章 匯編語言入門 13
2.1 x86匯編語言介紹 13
2.1.1 寄存器 13
2.1.2 在OD中認識寄存器 17
2.2 常用匯編指令集 19
2.2.1 指令介紹 19
2.2.2 常用指令介紹 20
2.3 尋址方式 35
2.4 總結(jié) 36
第3章 熟悉調(diào)試工具OD 37
3.1 認識OD調(diào)試環(huán)境 37
3.1.1 啟動調(diào)試 37
3.1.2 熟悉OD窗口 39
3.2 OD中的斷點及跟蹤功能 44
3.2.1 OD中設(shè)置斷點的方法 44
3.2.2 OD中跟蹤代碼的方法 50
3.3 OD中的查找功能和編輯功能 51
3.3.1 OD中的查找功能 51
3.3.2 OD中的修改和保存功能 52
3.4 OD中的插件功能 53
3.4.1 OD的常用插件介紹 53
3.4.2 OD插件腳本編寫 55
3.4.3 OD插件的開發(fā) 56
3.5 總結(jié) 61
第4章 PE工具詳解 62
4.1 常用PE工具介紹 62
4.1.1 PE工具 62
4.1.2 Stud_PE工具 63
4.1.3 PEiD工具 64
4.1.4 LordPE工具 64
4.2 PE文件格式詳解 65
4.2.1 PE文件格式概述 66
4.2.2 詳解PE文件格式 68
4.2.3 PE文件格式的3種地址 82
4.3 數(shù)據(jù)目錄相關(guān)結(jié)構(gòu)詳解 88
4.3.1 導(dǎo)入表 88
4.3.2 導(dǎo)出表 101
4.3.3 重定位表 107
4.4 總結(jié) 115
第5章 PE文件格式實例 116
5.1 手寫PE文件 116
5.1.1 手寫PE文件的準備工作 116
5.1.2 用十六進制字節(jié)完成PE文件 117
5.2 手動壓縮PE文件 129
5.2.1 修改壓縮節(jié)區(qū) 129
5.2.2 節(jié)表合并 132
5.2.3 結(jié)構(gòu)重疊 137
5.3 PE文件格式相關(guān)工具 145
5.3.1 增加節(jié)區(qū) 145
5.3.2 資源編輯 146
5.4 加殼與脫殼工具 151
5.4.1 什么是殼 151
5.4.2 簡單殼的原理 151
5.4.3 加殼工具與脫殼工具的使用 162
5.5 PE32+簡介 175
5.5.1 文件頭 175
5.5.2 可選頭 175
5.6 總結(jié) 177
第6章 十六進制編輯器與反編譯工具 178
6.1 C32Asm 178
6.1.1 文件的打開方式 178
6.1.2 反匯編模式 180
6.1.3 十六進制模式 184
6.2 WinHex 188
6.2.1 內(nèi)存搜索功能 188
6.2.2 使用模板解析數(shù)據(jù) 191
6.2.3 完成一個簡單的模板 193
6.3 其他十六進制編輯器 194
6.3.1 UltraEdit簡介 195
6.3.2 010 Editor簡介 195
6.4 反編譯工具介紹 196
6.4.1 DeDe反編譯工具 197
6.4.2 VB反編譯工具 200
6.4.3 .NET反編譯工具 202
6.4.4 Java反編譯工具 204
6.5 總結(jié) 205
第7章 IDA與逆向 206
7.1 IDA工具介紹 206
7.1.1 IDA的啟動與關(guān)閉 206
7.1.2 IDA常用界面介紹 209
7.1.3 IDA的腳本功能 221
7.2 C語言代碼逆向基礎(chǔ) 224
7.2.1 函數(shù)的識別 224
7.2.2 if…else…結(jié)構(gòu)分析 234
7.2.3 switch…case…default結(jié)構(gòu)分析 237
7.2.4 循環(huán)結(jié)構(gòu)分析 239
7.3 總結(jié) 243
第8章 逆向工具的原理及實現(xiàn) 244
8.1 PE工具的開發(fā) 244
8.1.1 GetProcAddress函數(shù)的使用 244
8.1.2 GetProcAddress函數(shù)的實現(xiàn) 245
8.2 調(diào)試工具的開發(fā) 249
8.2.1 常見的3種斷點 249
8.2.2 調(diào)試API函數(shù)及相關(guān)結(jié)構(gòu)體 253
8.2.3 打造一個密碼顯示器 263
8.3 總結(jié) 267
第9章 安卓逆向分析 268
9.1 安卓開發(fā)環(huán)境的搭建 268
9.1.1 JDK的安裝 268
9.1.2 Android Studio的安裝 269
9.1.3 Android虛擬設(shè)備的創(chuàng)建 270
9.2 創(chuàng)建第 一個Android App 272
9.2.1 創(chuàng)建一個HelloWorld程序 273
9.2.2 Android項目結(jié)構(gòu)簡介 275
9.2.3 為Android程序添加簡單的功能 275
9.3 簡單逆向安卓程序 280
9.3.1 Android Killer工具 280
9.3.2 修改app-release文件 281
9.4 Android Studio調(diào)試Smali代碼 285
9.4.1 Smalidea插件的安裝 285
9.4.2 調(diào)試Smali代碼 286
9.5 Android App其他逆向工具簡介 288
9.5.1 JEB工具 289
9.5.2 jadx工具 291
9.5.3 Android逆向助手 292
9.6 總結(jié) 293
第 10章 DEX文件格式解析 294
10.1 DEX文件解析 294
10.1.1 準備一個待解析的DEX文件 294
10.1.2 DEX文件格式詳解 297
10.2 實現(xiàn)DEX文件格式解析工具 324
10.2.1 解析工具所需的結(jié)構(gòu)體 324
10.2.2 解析DEX文件 325
10.3 小結(jié) 341
第 11章 Dalvik指令解析 342
11.1 Smali文件結(jié)構(gòu) 342
11.1.1 文件結(jié)構(gòu) 342
11.1.2 數(shù)據(jù)類型 345
11.1.3 函數(shù)定義 346
11.2 Smali指令介紹 346
11.2.1 Smali格式介紹 346
11.2.2 常用指令分類 348
11.2.3 代碼閱讀 350
11.3 完成DEX文件格式最后部分的解析 355
11.3.1 DexCode結(jié)構(gòu)體的回顧 355
11.3.2 字節(jié)碼轉(zhuǎn)Smali指令 356
11.3.3 反匯編功能的實現(xiàn) 360
11.4 總結(jié) 371
參考文獻 372