黑客編程和逆向分析是計算機安全從業(yè)者需要掌握的兩項基本功,隨著各大企業(yè)對安全技術的日益重視,工程師在這方面的學習需求也在持續(xù)增長。
本書共11章,既包括黑客編程的內容,如數(shù)據(jù)的存儲及表示形式、匯編語言入門;又包括逆向分析的知識,如熟悉調試工具OD、PE工具詳解、PE文件格式實例(包括加殼與脫殼工具的使用)、十六進制編輯器與反編譯工具、IDA與逆向、逆向工具的原理及實現(xiàn)、安卓逆向分析。此外,本書還介紹了計算機安全的新技術,如DEX文件格式解析和Dalvik指令解析等。
本書既可以作為網絡編程人員、安全技術研究人員和安全技術愛好者的參考書,又可以作為大專院校計算機相關專業(yè)的教學用書或相關培訓機構的教材。
書中詳細介紹了逆向工程的知識(反匯編的閱讀、PE結構等)和逆向工程的具體應用(緩沖區(qū)溢出、軟件保護、反病毒等)
本書以逆向工具的使用來展開,逐步深入到逆向工具的原理、逆向技術及操作系統(tǒng)的知識。
本書的目的是幫助相關從業(yè)者及愛好者快速熟悉逆向工程方面的相關知識和逆向軟件工具的使用。
冀云,安全技術工程師,熱愛分享,擅長安全技術!禖++ 黑客編程揭秘與防范》作者。
目錄
第 1章 數(shù)據(jù)的存儲及表示形式 1
1.1 進制及進制的轉換 1
1.1.1 現(xiàn)實生活中的進制與計算機中的二進制 1
1.1.2 進制的定義 2
1.1.3 進制的轉換 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é)序相關函數(shù) 11
1.4.2 編程判斷主機字節(jié)序 11
1.5 總結 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 總結 36
第3章 熟悉調試工具OD 37
3.1 認識OD調試環(huán)境 37
3.1.1 啟動調試 37
3.1.2 熟悉OD窗口 39
3.2 OD中的斷點及跟蹤功能 44
3.2.1 OD中設置斷點的方法 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 總結 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ù)目錄相關結構詳解 88
4.3.1 導入表 88
4.3.2 導出表 101
4.3.3 重定位表 107
4.4 總結 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 結構重疊 137
5.3 PE文件格式相關工具 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 總結 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 內存搜索功能 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 總結 205
第7章 IDA與逆向 206
7.1 IDA工具介紹 206
7.1.1 IDA的啟動與關閉 206
7.1.2 IDA常用界面介紹 209
7.1.3 IDA的腳本功能 221
7.2 C語言代碼逆向基礎 224
7.2.1 函數(shù)的識別 224
7.2.2 if…else…結構分析 234
7.2.3 switch…case…default結構分析 237
7.2.4 循環(huán)結構分析 239
7.3 總結 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 調試工具的開發(fā) 249
8.2.1 常見的3種斷點 249
8.2.2 調試API函數(shù)及相關結構體 253
8.2.3 打造一個密碼顯示器 263
8.3 總結 267
第9章 安卓逆向分析 268
9.1 安卓開發(fā)環(huán)境的搭建 268
9.1.1 JDK的安裝 268
9.1.2 Android Studio的安裝 269
9.1.3 Android虛擬設備的創(chuàng)建 270
9.2 創(chuàng)建第 一個Android App 272
9.2.1 創(chuàng)建一個HelloWorld程序 273
9.2.2 Android項目結構簡介 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調試Smali代碼 285
9.4.1 Smalidea插件的安裝 285
9.4.2 調試Smali代碼 286
9.5 Android App其他逆向工具簡介 288
9.5.1 JEB工具 289
9.5.2 jadx工具 291
9.5.3 Android逆向助手 292
9.6 總結 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 解析工具所需的結構體 324
10.2.2 解析DEX文件 325
10.3 小結 341
第 11章 Dalvik指令解析 342
11.1 Smali文件結構 342
11.1.1 文件結構 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結構體的回顧 355
11.3.2 字節(jié)碼轉Smali指令 356
11.3.3 反匯編功能的實現(xiàn) 360
11.4 總結 371
參考文獻 372