注冊(cè) | 登錄讀書(shū)好,好讀書(shū),讀好書(shū)!
讀書(shū)網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書(shū)科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)軟件工程及軟件方法學(xué)逆向工程核心原理

逆向工程核心原理

逆向工程核心原理

定 價(jià):¥109.00

作 者: (韓)李承遠(yuǎn) 著,武傳海 譯
出版社: 人民郵電出版社
叢編項(xiàng):
標(biāo) 簽: 計(jì)算機(jī)/網(wǎng)絡(luò) 軟件工程/開(kāi)發(fā)項(xiàng)目管理

購(gòu)買這本書(shū)可以去


ISBN: 9787115350183 出版時(shí)間: 2014-04-01 包裝: 平裝
開(kāi)本: 16開(kāi) 頁(yè)數(shù): 679 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《逆向工程核心原理》十分詳盡地介紹了代碼逆向分析的核心原理。作者在Ahnlab 研究所工作多年,書(shū)中不僅包括其以此經(jīng)驗(yàn)為基礎(chǔ)親自編寫的大量代碼,還包含了逆向工程研究人員必須了解的各種技術(shù)和技巧。徹底理解并切實(shí)掌握逆向工程這門技術(shù),就能在眾多IT相關(guān)領(lǐng)域進(jìn)行拓展運(yùn)用,這本《逆向工程核心原理》就是通向逆向工程大門的捷徑。想成為逆向工程研究員的讀者或正在從事逆向開(kāi)發(fā)工作的開(kāi)發(fā)人員一定會(huì)通過(guò)《逆向工程核心原理》獲得很大幫助。同時(shí),想成為安全領(lǐng)域?qū)<业娜艘部蓮摹赌嫦蚬こ毯诵脑怼份p松起步。

作者簡(jiǎn)介

  李承遠(yuǎn),目前在Ahnlab研究所從事惡意代碼分析工作,并運(yùn)營(yíng)逆向工程的專門博客網(wǎng)站。 為把逆向工程技術(shù)廣泛傳播而不懈努力中并積極地參加各種領(lǐng)域的活動(dòng),樂(lè)于與讀者進(jìn)行知識(shí)共享。

圖書(shū)目錄

第一部分 代碼逆向技術(shù)基礎(chǔ)
第1章 關(guān)于逆向工程 2
1.1 逆向工程 2
1.2 代碼逆向工程 2
1.2.1 逆向分析法 2
1.2.2 源代碼、十六進(jìn)制代碼、匯編代碼 4
1.2.3 “打補(bǔ)丁”與“破解” 5
1.3 代碼逆向準(zhǔn)備 5
1.3.1 目標(biāo) 5
1.3.2 激情 6
1.3.3 谷歌 6
1.4 學(xué)習(xí)逆向分析技術(shù)的禁忌 6
1.4.1 貪心 6
1.4.2 急躁 7
1.5 逆向分析技術(shù)的樂(lè)趣 7
第2章 逆向分析Hello World!程序 8
2.1 Hello World!程序 8
2.2 調(diào)試HelloWorld.exe程序 9
2.2.1 調(diào)試目標(biāo) 9
2.2.2 開(kāi)始調(diào)試 9
2.2.3 入口點(diǎn) 10
2.2.4 跟蹤40270C函數(shù) 10
2.2.5 跟蹤40104F跳轉(zhuǎn)語(yǔ)句 12
2.2.6 查找main()函數(shù) 12
2.3 進(jìn)一步熟悉調(diào)試器 14
2.3.1 調(diào)試器指令 14
2.3.2 “大本營(yíng)” 15
2.3.3 設(shè)置“大本營(yíng)”的四種方法 15
2.4 快速查找指定代碼的四種方法 17
2.4.1 代碼執(zhí)行法 18
2.4.2 字符串檢索法 19
2.4.3 API檢索法(1):在調(diào)用代碼中設(shè)置斷點(diǎn) 20
2.4.4 API檢索法(2):在API代碼中設(shè)置斷點(diǎn) 21
2.5 使用“打補(bǔ)丁”方式修改“Hello World!”字符串 23
2.5.1 “打補(bǔ)丁” 23
2.5.2 修改字符串的兩種方法 24
2.6 小結(jié) 28
第3章 小端序標(biāo)記法 31
3.1 字節(jié)序 31
3.1.1 大端序與小端序 32
3.1.2 在OllyDbg中查看小端序 32
第4章 IA-32寄存器基本講解 34
4.1 什么是CPU寄存器 34
4.2 IA-32寄存器 34
4.3 小結(jié) 40
第5章 ?!?1
5.1 ?!?1
5.1.1 棧的特征 41
5.1.2 棧操作示例 41
第6章 分析abex’ crackme#1 44
6.1 abex’ crackme #1 44
6.1.1 開(kāi)始調(diào)試 45
6.1.2 分析代碼 45
6.2 破解 47
6.3 將參數(shù)壓入?!?7
6.4 小結(jié) 48
第7章 棧幀 49
7.1 棧幀 49
7.2 調(diào)試示例:stackframe.exe 49
7.2.1 StackFrame.cpp 50
7.2.2 開(kāi)始執(zhí)行main()函數(shù)&生成棧幀 51
7.2.3 設(shè)置局部變量 52
7.2.4 add()函數(shù)參數(shù)傳遞與調(diào)用 53
7.2.5 開(kāi)始執(zhí)行add()函數(shù)&生成棧幀 54
7.2.6 設(shè)置add()函數(shù)的局部變量(x, y) 55
7.2.7 ADD運(yùn)算 55
7.2.8 刪除函數(shù)add()的棧幀&函數(shù)執(zhí)行完畢(返回) 56
7.2.9 從棧中刪除函數(shù)add()的參數(shù)(整理?xiàng)? 57
7.2.10 調(diào)用printf()函數(shù) 58
7.2.11 設(shè)置返回值 58
7.2.12 刪除棧幀&main()函數(shù)終止 58
7.3 設(shè)置OllyDbg選項(xiàng) 59
7.3.1 Disasm選項(xiàng) 59
7.3.2 Analysis1選項(xiàng) 60
7.4 小結(jié) 61
第8章 abex’ crackme #2 62
8.1 運(yùn)行abex’ crackme #2 62
8.2 Visual Basic文件的特征 63
8.2.1 VB專用引擎 63
8.2.2 本地代碼和偽代碼 63
8.2.3 事件處理程序 63
8.2.4 未文檔化的結(jié)構(gòu)體 63
8.3 開(kāi)始調(diào)試 63
8.3.1 間接調(diào)用 64
8.3.2 RT_MainStruct結(jié)構(gòu)體 64
8.3.3 ThunRTMain()函數(shù) 65
8.4 分析crackme 65
8.4.1 檢索字符串 65
8.4.2 查找字符串地址 66
8.4.3 生成Serial的算法 68
8.4.4 預(yù)測(cè)代碼 69
8.4.5 讀取Name字符串的代碼 69
8.4.6 加密循環(huán) 70
8.4.7 加密方法 70
8.5 小結(jié) 72
第9章 Process Explorer——最優(yōu)秀的進(jìn)程管理工具 74
9.1 Process Explorer 74
9.2 具體有哪些優(yōu)點(diǎn)呢 75
9.3 sysinternals 75
第10章 函數(shù)調(diào)用約定 76
10.1 函數(shù)調(diào)用約定 76
10.1.1 cdecl 76
10.1.2 stdcall 77
10.1.3 fastcall 78
第11章 視頻講座 79
11.1 運(yùn)行 79
11.2 分析 79
11.2.1 目標(biāo)(1):去除消息框 79
11.2.2 打補(bǔ)丁(1):去除消息框 81
11.2.3 目標(biāo)(2):查找注冊(cè)碼 83
11.3 小結(jié) 85
第12章 究竟應(yīng)當(dāng)如何學(xué)習(xí)代碼逆向分析 86
12.1 逆向工程 86
12.1.1 任何學(xué)習(xí)都應(yīng)當(dāng)有目標(biāo) 86
12.1.2 擁有積極心態(tài) 86
12.1.3 要感受其中的樂(lè)趣 86
12.1.4 讓檢索成為日常生活的一部分 87
12.1.5 最重要的是實(shí)踐 87
12.1.6 請(qǐng)保持平和的心態(tài) 87
第二部分 PE文件格式
第13章 PE文件格式 90
13.1 介紹 90
13.2 PE文件格式 90
13.2.1 基本結(jié)構(gòu) 91
13.2.2 VA&RVA 92
13.3 PE頭 92
13.3.1 DOS頭 93
13.3.2 DOS存根 94
13.3.3 NT頭 94
13.3.4 NT頭:文件頭 95
13.3.5 NT頭:可選頭 97
13.3.6 節(jié)區(qū)頭 101
13.4 RVA to RAW 104
13.5 IAT 105
13.5.1 DLL 105
13.5.2 IMAGE_IMPORT_DESCRIPTOR 107
13.5.3 使用notepad.exe練習(xí) 108
13.6 EAT 112
13.6.1 IMAGE_EXPORT_DIRECTORY 113
13.6.2 使用kernel32.dll練習(xí) 114
13.7 高級(jí)PE 116
13.7.1 PEView.exe 116
13.7.2 Patched PE 117
13.8 小結(jié) 118
第14章 運(yùn)行時(shí)壓縮 121
14.1 數(shù)據(jù)壓縮 121
14.1.1 無(wú)損壓縮 121
14.1.2 有損壓縮 121
14.2 運(yùn)行時(shí)壓縮器 122
14.2.1 壓縮器 122
14.2.2 保護(hù)器 123
14.3 運(yùn)行時(shí)壓縮測(cè)試 123
第15章 調(diào)試UPX壓縮的notepad程序 127
15.1 notepad.exe的EP代碼 127
15.2 notepad_upx.exe的EP代碼 127
15.3 跟蹤UPX文件 129
15.3.1 OllyDbg的跟蹤命令 129
15.3.2 循環(huán) #1 129
15.3.3 循環(huán) #2 130
15.3.4 循環(huán) #3 131
15.3.5 循環(huán) #4 131
15.4 快速查找UPX OEP的方法 132
15.4.1 在POPAD指令后的JMP指令處設(shè)置斷點(diǎn) 132
15.4.2 在棧中設(shè)置硬件斷點(diǎn) 133
15.5 小結(jié) 133
第16章 基址重定位表 135
16.1 PE重定位 135
16.1.1 DLL/SYS 135
16.1.2 EXE 136
16.2 PE重定位時(shí)執(zhí)行的操作 136
16.3 PE重定位操作原理 138
16.3.1 基址重定位表 138
16.3.2 IMAGE_BASE_RELOCATION結(jié)構(gòu)體 139
16.3.3 基址重定位表的分析方法 139
16.3.4 練習(xí) 141
第17章 從可執(zhí)行文件中刪除.reloc節(jié)區(qū) 142
17.1?。畆eloc節(jié)區(qū) 142
17.2 reloc.exe 142
17.2.1 刪除.reloc節(jié)區(qū)頭 142
17.2.2 刪除.reloc節(jié)區(qū) 143
17.2.3 修改IMAGE_FILE_HEADER 143
17.2.4 修改IMAGE_OPTIONAL_HEADER 144
17.3 小結(jié) 145
第18章 UPack PE文件頭詳細(xì)分析 146
18.1 UPack說(shuō)明 146
18.2 使用UPack壓縮notepad.exe 146
18.3 使用Stud_PE工具 148
18.4 比較PE文件頭 148
18.4.1 原notepad.exe的PE文件頭 149
18.4.2 notepad_upack.exe運(yùn)行時(shí)壓縮的PE文件頭 149
18.5 分析UPack的PE文件頭 150
18.5.1 重疊文件頭 150
18.5.2 IMAGE_FILE_HEADER.SizeOfOptionalHeader 150
18.5.3 IMAGE_OPTIONAL_HEADER.NumberOf-RvaAndSizes 152
18.5.4 IMAGE_SECTION_HEADER 153
18.5.5 重疊節(jié)區(qū) 155
18.5.6 RVA to RAW 156
18.5.7 導(dǎo)入表(IMAGE_IMPORT_DESCRIPTOR array) 158
18.5.8 導(dǎo)入地址表 160
18.6 小結(jié) 161
第19章 UPack調(diào)試? 查找OEP 162
19.1 OllyDbg運(yùn)行錯(cuò)誤 162
19.2 解碼循環(huán) 163
19.3 設(shè)置IAT 165
19.4 小結(jié) 166
第20章 “內(nèi)嵌補(bǔ)丁”練習(xí) 167
20.1 內(nèi)嵌補(bǔ)丁 167
20.2 練習(xí):Patchme 168
20.3 調(diào)試:查看代碼流 168
20.4 代碼結(jié)構(gòu) 172
20.5 “內(nèi)嵌補(bǔ)丁”練習(xí) 173
20.5.1 補(bǔ)丁代碼要設(shè)置在何處呢 173
20.5.2 制作補(bǔ)丁代碼 175
20.5.3 執(zhí)行補(bǔ)丁代碼 176
20.5.4 結(jié)果確認(rèn) 177
第三部分 DLL注入
第21章 Windows消息鉤取 180
21.1 鉤子 180
21.2 消息鉤子 180
21.3 SetWindowsHookEx() 181
21.4 鍵盤消息鉤取練習(xí) 182
21.4.1 練習(xí)示例HookMain.exe 182
21.4.2 分析源代碼 185
21.5 調(diào)試練習(xí) 187
21.5.1 調(diào)試HookMain.exe 188
21.5.2 調(diào)試Notepad.exe進(jìn)程內(nèi)的KeyHook.dll 190
21.6 小結(jié) 192
第22章 惡意鍵盤記錄器 194
22.1 惡意鍵盤記錄器的目標(biāo) 194
22.1.1 在線游戲 194
22.1.2 網(wǎng)上銀行 194
22.1.3 商業(yè)機(jī)密泄露 194
22.2 鍵盤記錄器的種類與發(fā)展趨勢(shì) 195
22.3 防范惡意鍵盤記錄器 195
22.4 個(gè)人信息 195
第23章 DLL注入 197
23.1 DLL注入 197
23.2 DLL注入示例 198
23.2.1 改善功能與修復(fù)Bug 198
23.2.2 消息鉤取 198
23.2.3 API鉤取 198
23.2.4 其他應(yīng)用程序 199
23.2.5 惡意代碼 199
23.3 DLL注入的實(shí)現(xiàn)方法 199
23.4 CreateRemoteThread() 199
23.4.1 練習(xí)示例myhack.dll 199
23.4.2 分析示例源代碼 203
23.4.3 調(diào)試方法 208
23.5 AppInit_DLLs 210
23.5.1 分析示例源碼 211
23.5.2 練習(xí)示例myhack2.dll 212
23.6 SetWindowsHookEx() 214
23.7 小結(jié) 214
第24章 DLL卸載 216
24.1 DLL卸載的工作原理 216
24.2 實(shí)現(xiàn)DLL卸載 216
24.2.1 獲取進(jìn)程中加載的DLL信息 219
24.2.2 獲取目標(biāo)進(jìn)程的句柄 220
24.2.3 獲取FreeLibrary() API地址 220
24.2.4 在目標(biāo)進(jìn)程中運(yùn)行線程 220
24.3 DLL卸載練習(xí) 220
24.3.1 復(fù)制文件及運(yùn)行notepad.exe 220
24.3.2 注入myhack.dll 221
24.3.3 卸載myhack.dll 222
第25章 通過(guò)修改PE加載DLL 224
25.1 練習(xí)文件 224
25.1.1 TextView.exe 224
25.1.2 TextView_patched.exe 225
25.2 源代碼 - myhack3.cpp 227
25.2.1 DllMain() 227
25.2.2 DownloadURL() 228
25.2.3 DropFile() 229
25.2.4 dummy() 230
25.3 修改TextView.exe文件的準(zhǔn)備工作 231
25.3.1 修改思路 231
25.3.2 查看IDT是否有足夠空間 231
25.3.3 移動(dòng)IDT 233
25.4 修改TextView.exe 235
25.4.1 修改導(dǎo)入表的RVA值 235
25.4.2 刪除綁定導(dǎo)入表 235
25.4.3 創(chuàng)建新IDT 235
25.4.4 設(shè)置Name、INT、IAT 236
25.4.5 修改IAT節(jié)區(qū)的屬性值 238
25.5 檢測(cè)驗(yàn)證 240
25.6 小結(jié) 241
第26章 PE Tools 242
26.1 PE Tools 242
26.1.1 進(jìn)程內(nèi)存轉(zhuǎn)儲(chǔ) 243
26.1.2 PE編輯器 245
26.2 小結(jié) 245
第27章 代碼注入 247
27.1 代碼注入 247
27.2 DLL注入與代碼注入 247
27.3 練習(xí)示例 249
27.3.1 運(yùn)行notepad.exe 249
27.3.2 運(yùn)行CodeInjection.exe 249
27.3.3 彈出消息框 250
27.4 CodeInjection.cpp 250
27.4.1 main()函數(shù) 251
27.4.2 ThreadProc()函數(shù) 251
27.4.3 InjectCode()函數(shù) 254
27.5 代碼注入調(diào)試練習(xí) 256
27.5.1 調(diào)試notepad.exe 256
27.5.2 設(shè)置OllyDbg選項(xiàng) 256
27.5.3 運(yùn)行CodeInjection.exe 257
27.5.4 線程開(kāi)始代碼 258
27.6 小結(jié) 259
第28章 使用匯編語(yǔ)言編寫注入代碼 260
28.1 目標(biāo) 260
28.2 匯編編程 260
28.3 OllyDbg的匯編命令 260
28.3.1 編寫ThreadProc()函數(shù) 262
28.3.2 保存文件 265
28.4 編寫代碼注入程序 266
28.4.1 獲取ThreadProc()函數(shù)的二進(jìn)制代碼 266
28.4.2 CodeInjection2.cpp 267
28.5 調(diào)試練習(xí) 270
28.5.1 調(diào)試notepad.exe 270
28.5.2 設(shè)置OllyDbg選項(xiàng) 270
28.5.3 運(yùn)行CodeInjection2.exe 271
28.5.4 線程起始代碼 272
28.6 詳細(xì)分析 272
28.6.1 生成棧幀 272
28.6.2 THREAD_PARAM結(jié)構(gòu)體指針 273
28.6.3 “User32.dll”字符串 274
28.6.4 壓入“user32.dll”字符串參數(shù) 274
28.6.5 調(diào)用LoadLibraryA(“user32.dll”) 275
28.6.6 “MessageBoxA”字符串 276
28.6.7 調(diào)用GetProcAddress(hMod,“MessageBoxA”) 276
28.6.8 壓入MessageBoxA()函數(shù)的參數(shù) 1 -MB_OK 277
28.6.9 壓入MessageBoxA()函數(shù)的參數(shù) 2 -“ReverseCore” 277
28.6.10 壓入MessageBoxA()函數(shù)的參數(shù) 3 -“www.reversecore.com” 278
28.6.11 壓入MessageBoxA()函數(shù)的參數(shù) 4 -NULL 279
28.6.12 調(diào)用MessageBoxA() 279
28.6.13 設(shè)置ThreadProc()函數(shù)的返回值 280
28.6.14 刪除棧幀及函數(shù)返回 280
28.7 小結(jié) 280
第四部分 API鉤取
第29章 API鉤取:逆向分析之“花” 282
29.1 鉤取 282
29.2 API是什么 282
29.3 API鉤取 283
29.3.1 正常調(diào)用API 283
29.3.2 鉤取API調(diào)用 284
29.4 技術(shù)圖表 284
29.4.1 方法對(duì)象(是什么) 285
29.4.2 位置(何處) 285
29.4.3 技術(shù)(如何) 286
29.4.4 API 286
第30章 記事本W(wǎng)riteFile() API鉤取 288
30.1 技術(shù)圖表—調(diào)試技術(shù) 288
30.2 關(guān)于調(diào)試器的說(shuō)明 289
30.2.1 術(shù)語(yǔ) 289
30.2.2 調(diào)試器功能 289
30.2.3 調(diào)試器的工作原理 289
30.2.4 調(diào)試事件 289
30.3 調(diào)試技術(shù)流程 290
30.4 練習(xí) 291
30.5 工作原理 293
30.5.1 ?!?93
30.5.2 執(zhí)行流 295
30.5.3 “脫鉤”&“鉤子” 295
30.6 源代碼分析 295
30.6.1 main() 296
30.6.2 DebugLoop() 296
30.6.3 EXIT_PROCESS_DEBUG_EVENT 298
30.6.4 CREATE_PROCESS_DEBUG_EVENT-OnCreateProcess-DebugEvent() 298
30.6.5 EXCEPTION_DEBUG_EVENT-OnException-DebugEvent() 300
第31章 關(guān)于調(diào)試器 305
31.1 OllyDbg 305
31.2 IDA Pro 305
31.3 WinDbg 306
第32章 計(jì)算器顯示中文數(shù)字 308
32.1 技術(shù)圖表 308
32.2 選定目標(biāo)API 309
32.3 IAT鉤取工作原理 312
32.4 練習(xí)示例 314
32.5 源代碼分析 316
32.5.1 DllMain() 316
32.5.2 MySetWindowTextW() 317
32.5.3 hook_iat() 319
32.6 調(diào)試被注入的DLL文件 322
32.6.1 DllMain() 325
32.6.2 hook_iat() 325
32.6.3 MySetWindowTextW() 327
32.7 小結(jié) 328
第33章 隱藏進(jìn)程 329
33.1 技術(shù)圖表 329
33.2 API代碼修改技術(shù)的原理 329
33.2.1 鉤取之前 330
33.2.2 鉤取之后 330
33.3 進(jìn)程隱藏 332
33.3.1 進(jìn)程隱藏工作原理 332
33.3.2 相關(guān)API 332
33.3.3 隱藏技術(shù)的問(wèn)題 333
33.4 練習(xí) #1(HideProc.exe,stealth.dll) 333
33.4.1 運(yùn)行notepad.exe、procexp.exe、taskmgr.exe 334
33.4.2 運(yùn)行HideProc.exe 334
33.4.3 確認(rèn)stealth.dll注入成功 334
33.4.4 查看notepad.exe進(jìn)程是否隱藏成功 335
33.4.5 取消notepad.exe進(jìn)程隱藏 336
33.5 源代碼分析 336
33.5.1 HideProc.cpp 336
33.5.2 stealth.cpp 338
33.6 全局API鉤取 344
33.6.1 Kernel32.CreateProcess() API 344
33.6.2 Ntdll.ZwResumeThread() API 345
33.7 練習(xí)#2(HideProc2.exe,Stealth2.dll) 345
33.7.1 復(fù)制stealth2.dll文件到%SYSTEM%文件夾中 345
33.7.2 運(yùn)行HideProc2.exe -hide 346
33.7.3 運(yùn)行ProcExp.exe¬epad.exe 346
33.7.4 運(yùn)行HideProc2.exe -show 347
33.8 源代碼分析 348
33.8.1 HideProc2.cpp 348
33.8.2 stealth2.cpp 348
33.9 利用“熱補(bǔ)丁”技術(shù)鉤取API 350
33.9.1 API代碼修改技術(shù)的問(wèn)題 350
33.9.2 “熱補(bǔ)丁”(修改7個(gè)字節(jié)代碼) 350
33.10 練習(xí) #3:stealth3.dll 353
33.11 源代碼分析 353
33.12 使用“熱補(bǔ)丁”API鉤取技術(shù)時(shí)需要考慮的問(wèn)題 356
33.13 小結(jié) 357
第34章 高級(jí)全局API鉤?。篒E連接控制 359
34.1 目標(biāo)API 359
34.2 IE進(jìn)程結(jié)構(gòu) 361
34.3 關(guān)于全局API鉤取的概念 362
34.3.1 常規(guī)API鉤取 363
34.3.2 全局API鉤取 363
34.4 ntdll!ZwResumeThread() API 364
34.5 練習(xí)示例:控制IE網(wǎng)絡(luò)連接 368
34.5.1 運(yùn)行IE 368
34.5.2 注入DLL 369
34.5.3 創(chuàng)建新選項(xiàng)卡 369
34.5.4 嘗試連接網(wǎng)站 370
34.5.5 卸載DLL 371
34.5.6 課外練習(xí) 372
34.6 示例源代碼 372
34.6.1 DllMain() 372
34.6.2 NewInternetConnectW() 373
34.6.3 NewZwResumeThread() 374
34.7 小結(jié) 375
第35章 優(yōu)秀分析工具的五種標(biāo)準(zhǔn) 376
35.1 工具 376
35.2 代碼逆向分析工程師 376
35.3 優(yōu)秀分析工具的五種標(biāo)準(zhǔn) 376
35.3.1 精簡(jiǎn)工具數(shù)量 377
35.3.2 工具功能簡(jiǎn)單、使用方便 377
35.3.3 完全掌握各種功能 377
35.3.4 不斷升級(jí)更新 377
35.3.5 理解工具的核心工作原理 377
35.4 熟練程度的重要性 377
第五部分 64位&Windows內(nèi)核6
第36章 64位計(jì)算 380
36.1 64位計(jì)算環(huán)境 380
36.1.1 64位CPU 380
36.1.2 64位OS 381
36.1.3 Win32 API 381
36.1.4 WOW64 381
36.1.5 練習(xí):WOW64Test 384
36.2 編譯64位文件 385
36.2.1 Microsoft Windows SDK(Software Development Kit) 386
36.2.2 設(shè)置Visual C++ 2010 Express環(huán)境 386
第37章 x64處理器 389
37.1 x64中新增或變更的項(xiàng)目 389
37.1.1 64位 389
37.1.2 內(nèi)存 389
37.1.3 通用寄存器 389
37.1.4 CALL/JMP指令 390
37.1.5 函數(shù)調(diào)用約定 391
37.1.6 棧 & 棧幀 392
37.2 練習(xí):Stack32.exe & Stack64.exe 392
37.2.1 Stack32.exe 392
37.2.2 Stack64.exe 394
37.3 小結(jié) 397
第38章 PE32+ 398
38.1 PE32+(PE+、PE64) 398
38.1.1 IMAGE_NT_HEADERS 398
38.1.2 IMAGE_FILE_HEADER 398
38.1.3 IMAGE_OPTIONAL_HEADER 399
38.1.4 IMAGE_THUNK_DATA 401
38.1.5 IMAGE_TLS_DIRECTORY 403
第39章 WinDbg 405
39.1 WinDbg 405
39.1.1 WinDbg的特征 405
39.1.2 運(yùn)行WinDbg 406
39.1.3 內(nèi)核調(diào)試 407
39.1.4 WinDbg基本指令 409
第40章 64位調(diào)試 411
40.1 x64環(huán)境下的調(diào)試器 411
40.2 64位調(diào)試 411
40.3 PE32:WOW64Test_x86.exe 413
40.3.1 EP代碼 414
40.3.2 Startup代碼 414
40.3.3 main()函數(shù) 415
40.4 PE32+:WOW64Test_x64.exe 416
40.4.1 系統(tǒng)斷點(diǎn) 416
40.4.2 EP代碼 417
40.4.3 Startup代碼 418
40.4.4 main()函數(shù) 420
40.5 小結(jié) 423
第41章 ASLR 424
41.1 Windows內(nèi)核版本 424
41.2 ASLR 424
41.3 Visual C++ 424
41.4 ASLR.exe 425
41.4.1 節(jié)區(qū)信息 426
41.4.2 IMAGE_FILE_HEADER\Characteristics 427
41.4.3 IMAGE_OPTIONAL_HEADER\DLL Characteristics 428
41.5 練習(xí):刪除ASLR功能 428
第42章 內(nèi)核6中的會(huì)話 430
42.1 會(huì)話 430
42.2 會(huì)話0隔離機(jī)制 432
42.3 增強(qiáng)安全性 432
第43章 內(nèi)核6中的DLL注入 433
43.1 再現(xiàn)DLL注入失敗 433
43.1.1 源代碼 433
43.1.2 注入測(cè)試 435
43.2 原因分析 436
43.2.1 調(diào)試 #1 436
43.2.2 調(diào)試 #2 438
43.3 練習(xí):使CreateRemoteThread()正常工作 440
43.3.1 方法 #1:修改CreateSuspended參數(shù)值 440
43.3.2 方法 #2:操縱條件分支 441
43.4 稍作整理 443
43.5 InjectDll_new.exe 443
43.5.1 InjectDll_new.cpp 443
43.5.2 注入練習(xí) 446
第44章 InjDll.exe:DLL注入專用工具 448
44.1 InjDll.exe 448
44.1.1 使用方法 448
44.1.2 使用示例 449
44.1.3 注意事項(xiàng) 450
第六部分 高級(jí)逆向分析技術(shù)
第45章 TLS回調(diào)函數(shù) 452
45.1 練習(xí) #1:HelloTls.exe 452
45.2 TLS 453
45.2.1 IMAGE_DATA_DIRECTORY[9] 453
45.2.2 IMAGE_TLS_DIRECTORY 454
45.2.3 回調(diào)函數(shù)地址數(shù)組 454
45.3 TLS回調(diào)函數(shù) 455
45.4 練習(xí) #2:TlsTest.exe 456
45.4.1 DLL_PROCESS_ATTACH 457
45.4.2 DLL_THREAD_ATTACH 457
45.4.3 DLL_THREAD_DETACH 457
45.4.4 DLL_PROCESS_DETACH 457
45.5 調(diào)試TLS回調(diào)函數(shù) 458
45.6 手工添加TLS回調(diào)函數(shù) 459
45.6.1 修改前的原程序 460
45.6.2 設(shè)計(jì)規(guī)劃 460
45.6.3 編輯PE文件頭 461
45.6.4 設(shè)置IMAGE_TLS_DIRECTORY結(jié)構(gòu)體 463
45.6.5 編寫TLS回調(diào)函數(shù) 464
45.6.6 最終完成 464
45.7 小結(jié) 465
第46章 TEB 466
46.1 TEB 466
46.1.1 TEB結(jié)構(gòu)體的定義 466
46.1.2 TEB結(jié)構(gòu)體成員 466
46.1.3 重要成員 469
46.2 TEB訪問(wèn)方法 470
46.2.1 Ntdll.NtCurrentTeb() 470
46.2.2 FS段寄存器 471
46.3 小結(jié) 472
第47章 PEB 473
47.1 PEB 473
47.1.1 PEB訪問(wèn)方法 473
47.1.2 PEB結(jié)構(gòu)體的定義 474
47.1.3 PEB結(jié)構(gòu)體的成員 475
47.2 PEB的重要成員 477
47.2.1 PEB.BeingDebugged 478
47.2.2 PEB.ImageBaseAddress 478
47.2.3 PEB.Ldr 479
47.2.4 PEB.ProcessHeap & PEB.NtGlobalFlag 480
47.3 小結(jié) 480
第48章 SEH 481
48.1 SEH 481
48.2 SEH練習(xí)示例 #1 481
48.2.1 正常運(yùn)行 481
48.2.2 調(diào)試運(yùn)行 482
48.3 OS的異常處理方法 484
48.3.1 正常運(yùn)行時(shí)的異常處理方法 484
48.3.2 調(diào)試運(yùn)行時(shí)的異常處理方法 484
48.4 異?!?85
48.4.1 EXCEPTION_ACCESS_VIOLATION(C0000005) 486
48.4.2 EXCEPTION_BREAKPOINT(80000003) 486
48.4.3 EXCEPTION_ILLEGAL_INSTRUCTION(C000001D) 488
48.4.4 EXCEPTION_INT_DIVIDE_BY_ZERO(C0000094) 488
48.4.5 EXCEPTION_SINGLE_STEP(80000004) 489
48.5 SEH詳細(xì)說(shuō)明 489
48.5.1 SEH鏈 489
48.5.2 異常處理函數(shù)的定義 489
48.5.3 TEB.NtTib.ExceptionList 491
48.5.4 SEH安裝方法 492
48.6 SEH練習(xí)示例 #2(seh.exe) 492
48.6.1 查看SEH鏈 493
48.6.2 添加SEH 493
48.6.3 發(fā)生異常 494
48.6.4 查看異常處理器參數(shù) 494
48.6.5 調(diào)試異常處理器 496
48.6.6 刪除SEH 498
48.7 設(shè)置OllyDbg選項(xiàng) 499
48.7.1 忽略KERNEL32中發(fā)生的內(nèi)存非法訪問(wèn)異?!?00
48.7.2 向被調(diào)試者派送異常 500
48.7.3 其他異常處理 500
48.7.4 簡(jiǎn)單練習(xí) 500
48.8 小結(jié) 501
第49章 IA-32指令 502
49.1 IA-32指令 502
49.2 常用術(shù)語(yǔ) 502
49.2.1 反匯編器 503
49.2.2 反編譯器 504
49.2.3 反編譯簡(jiǎn)介 504
49.3 IA-32指令格式 506
49.3.1 指令前綴 507
49.3.2 操作碼 507
49.3.3 ModR/M 507
49.3.4 SIB 508
49.3.5 位移 508
49.3.6 立即數(shù) 509
49.4 指令解析手冊(cè) 509
49.4.1 下載IA-32用戶手冊(cè) 509
49.4.2 打印指令解析手冊(cè) 509
49.5 指令解析練習(xí) 510
49.5.1 操作碼映射 510
49.5.2 操作數(shù) 511
49.5.3 ModR/M 512
49.5.4 Group 514
49.5.5 前綴 516
49.5.6 雙字節(jié)操作碼 518
49.5.7 移位值&立即數(shù) 519
49.5.8 SIB 520
49.6 指令解析課外練習(xí) 524
49.7 小結(jié) 524
第七部分 反調(diào)試技術(shù)
第50章 反調(diào)試技術(shù) 526
50.1 反調(diào)試技術(shù) 526
50.1.1 依賴性 526
50.1.2 多種反調(diào)試技術(shù) 526
50.2 反調(diào)試破解技術(shù) 526
50.3 反調(diào)試技術(shù)的分類 527
50.3.1 靜態(tài)反調(diào)試技術(shù) 528
50.3.2 動(dòng)態(tài)反調(diào)試技術(shù) 528
第51章 靜態(tài)反調(diào)試技術(shù) 529
51.1 靜態(tài)反調(diào)試的目的 529
51.2 PEB 529
51.2.1 BeingDebugged(+0x2) 531
51.2.2 Ldr(+0xC) 531
51.2.3 Process Heap(+0x18) 532
51.2.4 NtGlobalFlag(+0x68) 533
51.2.5 練習(xí):?StaAD_PEB.exe 534
51.2.6 破解之法 534
51.3 NtQueryInformationProcess() 537
51.3.1 ProcessDebugPort(0x7) 538
51.3.2 ProcessDebugObjectHandle(0x1E) 539
51.3.3 ProcessDebugFlags(0x1F) 539
51.3.4 練習(xí):StaAD_NtQIP.exe 540
51.3.5 破解之法 540
51.4 NtQuerySystemInformation() 542
51.4.1 SystemKernelDebugger-Information(0x23) 544
51.4.2 練習(xí):StaAD_NtQSI.exe 545
51.4.3 破解之法 545
51.5 NtQueryObject() 545
51.6 ZwSetInformationThread() 549
51.6.1 練習(xí):StaAD_ZwSIT.exe 549
51.6.2 破解之法 550
51.7 TLS回調(diào)函數(shù) 550
51.8 ETC 551
51.8.1 練習(xí):StaAD_FindWindow.exe 551
51.8.2 破解之法 551
51.9 小結(jié) 553
第52章 動(dòng)態(tài)反調(diào)試技術(shù) 554
52.1 動(dòng)態(tài)反調(diào)試技術(shù)的目的 554
52.2 異?!?54
52.2.1 SEH 554
52.2.2 SetUnhandledException-Filter() 558
52.3 Timing Check 562
52.3.1 時(shí)間間隔測(cè)量法 562
52.3.2 RDTSC 563
52.4 陷阱標(biāo)志 565
52.4.1 單步執(zhí)行 566
52.4.2 INT 2D 569
52.5 0xCC探測(cè) 572
52.5.1 API斷點(diǎn) 573
52.5.2 比較校驗(yàn)和 575
第53章 高級(jí)反調(diào)試技術(shù) 577
53.1 高級(jí)反調(diào)試技術(shù) 577
53.2 垃圾代碼 577
53.3 擾亂代碼對(duì)齊 578
53.4 加密/解密 581
53.4.1 簡(jiǎn)單的解碼示例 581
53.4.2 復(fù)雜的解碼示例 582
53.4.3 特殊情況:代碼重組 584
53.5 Stolen Bytes(Remove OEP) 584
53.6 API重定向 587
53.6.1 原代碼 588
53.6.2 API重定向示例 #1 588
53.6.3 API重定向示例#2 589
53.7 Debug Blocker(Self Debugging) 593
53.8 小結(jié) 595
第八部分 調(diào)試練習(xí)
第54章 調(diào)試練習(xí)1:服務(wù) 598
54.1 服務(wù)進(jìn)程的工作原理 598
54.1.1 服務(wù)控制器 598
54.1.2 服務(wù)啟動(dòng)過(guò)程 599
54.2 DebugMe1.exe示例講解 600
54.2.1 安裝服務(wù) 600
54.2.2 啟動(dòng)服務(wù) 602
54.2.3 源代碼 604
54.3 服務(wù)進(jìn)程的調(diào)試 606
54.3.1 問(wèn)題在于SCM 606
54.3.2 調(diào)試器無(wú)所不能 606
54.3.3 常用方法 606
54.4 服務(wù)調(diào)試練習(xí) 606
54.4.1 直接調(diào)試:強(qiáng)制設(shè)置EIP 606
54.4.2 服務(wù)調(diào)試的常用方法:“附加”方式 609
54.5 小結(jié) 615
第55章 調(diào)試練習(xí)2:自我創(chuàng)建 616
55.1 自我創(chuàng)建 616
55.2 工作原理 617
55.2.1 創(chuàng)建子進(jìn)程(掛起模式) 617
55.2.2 更改EIP 618
55.2.3 恢復(fù)主線程 618
55.3 示例程序源代碼 618
55.4 調(diào)試練習(xí) 620
55.4.1 需要考慮的事項(xiàng) 620
55.4.2 JIT調(diào)試 621
55.4.3 DebugMe2.exe 622
55.5 小結(jié) 626
第56章 調(diào)試練習(xí)3:PE映像切換 627
56.1 PE映像 627
56.2 PE映像切換 628
56.3 示例程序:Fake.exe、Real.exe、DebugMe3.exe 628
56.4 調(diào)試1 631
56.4.1 Open? 輸入運(yùn)行參數(shù) 631
56.4.2 main()函數(shù) 632
56.4.3 SubFunc_1() 634
56.4.4 CreateProcess(“fake.exe”,CREATE_SUSPENDED) 635
56.4.5 SubFunc_2() 635
56.4.6 SubFunc_3() 641
56.4.7 ResumeThread() 644
56.5 調(diào)試2 644
56.5.1 思考 645
56.5.2 向EP設(shè)置無(wú)限循環(huán) 645
56.6 小結(jié) 647
第57章 調(diào)試練習(xí)4:Debug Blocker 648
57.1 Debug Blocker 648
57.2 反調(diào)試特征 648
57.2.1 父與子的關(guān)系 649
57.2.2 被調(diào)試進(jìn)程不能再被其他調(diào)試器調(diào)試 649
57.2.3 終止調(diào)試進(jìn)程的同時(shí)也終止被調(diào)試進(jìn)程 649
57.2.4 調(diào)試器操作被調(diào)試者的代碼 649
57.2.5 調(diào)試器處理被調(diào)試進(jìn)程中發(fā)生的異?!?49
57.3 調(diào)試練習(xí):DebugMe4.exe 650
57.4 第一次調(diào)試 650
57.4.1 選定調(diào)試的起始位置 650
57.4.2 main() 650
57.5 第二次調(diào)試 651
57.6 第三次調(diào)試 653
57.7 第四次調(diào)試 656
57.8 第五次調(diào)試 658
57.8.1 系統(tǒng)斷點(diǎn) 658
57.8.2 EXCEPTION_ILLEGAL_INSTRUCTION(1) 659
57.8.3 EXCEPTION_ILLEGAL_INSTRUCTION(2) 660
57.9 第六次調(diào)試 661
57.9.1 40121D(第一個(gè)異常) 661
57.9.2 401299(第二個(gè)異常) 665
57.10 第七次調(diào)試 667
57.10.1 靜態(tài)方法 668
57.10.2 動(dòng)態(tài)方法 669
57.11 小結(jié) 673
結(jié)束語(yǔ) 674
索引 676

本目錄推薦

掃描二維碼
Copyright ? 讀書(shū)網(wǎng) m.ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)