黑客編程和逆向分析是計(jì)算機(jī)安全從業(yè)者需要掌握的兩項(xiàng)基本功,隨著各大企業(yè)對(duì)安全技術(shù)的日益重視,工程師在這方面的學(xué)習(xí)需求也在持續(xù)增長(zhǎng)。
本書(shū)共11章,既包括黑客編程的內(nèi)容,如數(shù)據(jù)的存儲(chǔ)及表示形式、匯編語(yǔ)言入門(mén);又包括逆向分析的知識(shí),如熟悉調(diào)試工具OD、PE工具詳解、PE文件格式實(shí)例(包括加殼與脫殼工具的使用)、十六進(jìn)制編輯器與反編譯工具、IDA與逆向、逆向工具的原理及實(shí)現(xiàn)、安卓逆向分析。此外,本書(shū)還介紹了計(jì)算機(jī)安全的新技術(shù),如DEX文件格式解析和Dalvik指令解析等。
本書(shū)既可以作為網(wǎng)絡(luò)編程人員、安全技術(shù)研究人員和安全技術(shù)愛(ài)好者的參考書(shū),又可以作為大專(zhuān)院校計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的教學(xué)用書(shū)或相關(guān)培訓(xùn)機(jī)構(gòu)的教材。
書(shū)中詳細(xì)介紹了逆向工程的知識(shí)(反匯編的閱讀、PE結(jié)構(gòu)等)和逆向工程的具體應(yīng)用(緩沖區(qū)溢出、軟件保護(hù)、反病毒等)
本書(shū)以逆向工具的使用來(lái)展開(kāi),逐步深入到逆向工具的原理、逆向技術(shù)及操作系統(tǒng)的知識(shí)。
本書(shū)的目的是幫助相關(guān)從業(yè)者及愛(ài)好者快速熟悉逆向工程方面的相關(guān)知識(shí)和逆向軟件工具的使用。
冀云,安全技術(shù)工程師,熱愛(ài)分享,擅長(zhǎng)安全技術(shù)!禖++ 黑客編程揭秘與防范》作者。
目錄
第 1章 數(shù)據(jù)的存儲(chǔ)及表示形式 1
1.1 進(jìn)制及進(jìn)制的轉(zhuǎn)換 1
1.1.1 現(xiàn)實(shí)生活中的進(jìn)制與計(jì)算機(jī)中的二進(jìn)制 1
1.1.2 進(jìn)制的定義 2
1.1.3 進(jìn)制的轉(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 編程判斷主機(jī)字節(jié)序 11
1.4.1 字節(jié)序相關(guān)函數(shù) 11
1.4.2 編程判斷主機(jī)字節(jié)序 11
1.5 總結(jié) 12
第 2章 匯編語(yǔ)言入門(mén) 13
2.1 x86匯編語(yǔ)言介紹 13
2.1.1 寄存器 13
2.1.2 在OD中認(rèn)識(shí)寄存器 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 認(rèn)識(shí)OD調(diào)試環(huán)境 37
3.1.1 啟動(dòng)調(diào)試 37
3.1.2 熟悉OD窗口 39
3.2 OD中的斷點(diǎn)及跟蹤功能 44
3.2.1 OD中設(shè)置斷點(diǎn)的方法 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插件腳本編寫(xiě) 55
3.4.3 OD插件的開(kāi)發(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文件格式實(shí)例 116
5.1 手寫(xiě)PE文件 116
5.1.1 手寫(xiě)PE文件的準(zhǔn)備工作 116
5.1.2 用十六進(jìn)制字節(jié)完成PE文件 117
5.2 手動(dòng)壓縮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 簡(jiǎn)單殼的原理 151
5.4.3 加殼工具與脫殼工具的使用 162
5.5 PE32+簡(jiǎn)介 175
5.5.1 文件頭 175
5.5.2 可選頭 175
5.6 總結(jié) 177
第6章 十六進(jìn)制編輯器與反編譯工具 178
6.1 C32Asm 178
6.1.1 文件的打開(kāi)方式 178
6.1.2 反匯編模式 180
6.1.3 十六進(jìn)制模式 184
6.2 WinHex 188
6.2.1 內(nèi)存搜索功能 188
6.2.2 使用模板解析數(shù)據(jù) 191
6.2.3 完成一個(gè)簡(jiǎn)單的模板 193
6.3 其他十六進(jìn)制編輯器 194
6.3.1 UltraEdit簡(jiǎn)介 195
6.3.2 010 Editor簡(jiǎn)介 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的啟動(dòng)與關(guān)閉 206
7.1.2 IDA常用界面介紹 209
7.1.3 IDA的腳本功能 221
7.2 C語(yǔ)言代碼逆向基礎(chǔ) 224
7.2.1 函數(shù)的識(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章 逆向工具的原理及實(shí)現(xiàn) 244
8.1 PE工具的開(kāi)發(fā) 244
8.1.1 GetProcAddress函數(shù)的使用 244
8.1.2 GetProcAddress函數(shù)的實(shí)現(xiàn) 245
8.2 調(diào)試工具的開(kāi)發(fā) 249
8.2.1 常見(jiàn)的3種斷點(diǎn) 249
8.2.2 調(diào)試API函數(shù)及相關(guān)結(jié)構(gòu)體 253
8.2.3 打造一個(gè)密碼顯示器 263
8.3 總結(jié) 267
第9章 安卓逆向分析 268
9.1 安卓開(kāi)發(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)建第 一個(gè)Android App 272
9.2.1 創(chuàng)建一個(gè)HelloWorld程序 273
9.2.2 Android項(xiàng)目結(jié)構(gòu)簡(jiǎn)介 275
9.2.3 為Android程序添加簡(jiǎn)單的功能 275
9.3 簡(jiǎn)單逆向安卓程序 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其他逆向工具簡(jiǎn)介 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 準(zhǔn)備一個(gè)待解析的DEX文件 294
10.1.2 DEX文件格式詳解 297
10.2 實(shí)現(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ù)類(lèi)型 345
11.1.3 函數(shù)定義 346
11.2 Smali指令介紹 346
11.2.1 Smali格式介紹 346
11.2.2 常用指令分類(lèi) 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 反匯編功能的實(shí)現(xiàn) 360
11.4 總結(jié) 371
參考文獻(xiàn) 372