基本介紹
內容簡介
不管你是否有惡意代碼分析的背景和經驗,《惡意代碼分析實戰》極其豐富的內容都將使你獲益匪淺。
《惡意代碼分析實戰》教你如何、以及何時使用惡意代碼分析技術,深入掌握惡意代碼分析工具的核心功能,從而達到準確診斷、及時突破、快速回響的效果。
《惡意代碼分析實戰》一經問世,便贏來業內好評如潮,被業內人士一致推薦為入門、晉級的權威讀本。
權威,詳盡,經典——每一位認真學習過《惡意代碼分析實戰》的讀者,必將在惡意代碼分析的專業技能上獲得巨大的提升。
《惡意代碼分析實戰》是業內公認的迄今為止最權威的一本惡意代碼分析指南,《惡意代碼分析實戰》也是每一位惡意代碼分析師都必須作為指導手冊珍藏的案頭必備。《惡意代碼分析實戰》既是一本教材,也是一本動手實踐的指南。不僅教會你如何分析惡意代碼(技術指導),而且配了大量的實驗練習、案例、答案以及詳細的分析過程,同時還包含了所有用作案例的惡意代碼樣本,提供了豐富、安全的學習環境。針對初學者:本書的技術內容、實驗作業可以幫你漸入佳境;針對中級讀者:本書大量的分析實踐會直接帶你進入更高的級別,臻入化境。
作者簡介
麥可·斯科爾斯基(Michael Sikorski)是在Mandiant公司任職的計算機安全顧問。他對惡意代碼進行逆向分析,支持公司安全事件回響調查,並為公司的聯邦政府部門客戶提供專業研究與開發的安全解決方案。邁克創建了一套惡意代碼分析的系列課程,並對不同的客群進行培訓,包括聯邦調查局和Black Hat黑客大會參會者。在加入Mandiant公司之前,他在麻省理工學院林肯實驗室工作,在那裡他對被動網路映射技術和滲透測試進行研究。邁克也是美國國家安全局為期三年的系統和網路跨學科研究生項目的畢業生。在美國國家安全局期間,他為逆向工程方面的研究做出了貢獻,並獲得在網路分析方面的多項發明獎項。
安德魯·哈尼克(Andrew Honig)是美國國防部的一位信息保障專家。他在國家密碼學院(National Cryptologic School)教授軟體分析、逆向工程和Windows系統編程的課程,並是一位CISSP安全認證專家。安德魯是VMware虛擬化產品幾個零日漏洞的發現者,並開發了一些可以檢測新型惡意代碼(包括核心套件)的創新工具。作為一位精於惡意代碼與良性軟體分析技術的專家,他已經擁有超過10年的計算機安全業界分析師的經驗。
媒體推薦
一本優秀的惡意代碼速成教程。
Dino Dai Zovi,自由安全諮詢師
一本最為全面的惡意代碼分析技術指南,覆蓋了所有惡意代碼分析所需的關鍵技術,幫助你理解最新惡意代碼帶來的技術挑戰。
Chris Eagle,美國海軍研究生院,計算機科學系高級講師
一本惡意代碼分析的實踐入門指南,我把這本書推薦給所有希望解剖Windows惡意代碼的讀者。
— Ilfak Guilfanov,IDA PRO創始人
一本惡意代碼分析的優秀指南,所有章節都包含有詳細的技術解釋和動手實踐案例教程,讓你能夠立即面對真實的惡意代碼。
— Sebastian Porst,Google軟體工程師
本書為各個技術層次上的讀者帶來逆向工程方法,提供了一大堆覆蓋各種技術並且容易訪問的實踐案例,將帶領你更加深入地理解逆向工程的藝術與科學。我強烈推薦本書,無論是新手還是領域專家。
— Danny Quist,博士,OFFENSIVE COMPUTING創始人
如果你只要讀一本惡意代碼的書籍,或是希望進入到惡意代碼分析師的世界,就來看這本書吧!
— Patrick Engbretson,達科他州立大學教授,The Basics of Hacking and Pen Testing一書的作者
為軟體安全或入侵檢測系統等研究生級別高級課程提供很好的課程資料,實踐案例對學生學習逆向工程方法、惡意代碼分析和理解等方面具有特殊的價值。
— Sal Stolfo,哥倫比亞大學教授
圖書目錄
第0章惡意代碼分析技術入門1
0.1惡意代碼分析目標1
0.2惡意代碼分析技術2
0.2.1靜態分析基礎技術2
0.2.2動態分析基礎技術2
0.2.3靜態分析高級技術2
0.2.4動態分析高級技術2
0.3惡意代碼類型3
0.4惡意代碼分析通用規則4
第1篇靜態分析
第1章靜態分析基礎技術6
1.1反病毒引擎掃描:實用的第一步6
1.2哈希值:惡意代碼的指紋7
1.3查找字元串7
1.4加殼與混淆惡意代碼9
1.4.1檔案加殼10
1.4.2使用PEiD檢測加殼10
1.5PE檔案格式11
1.6程式庫與函式12
1.6.1靜態連結、運行時連結與動態連結12
1.6.2使用DependencyWalker工具探索動態連結函式13
1.6.3導入函式14
1.6.4導出函式15
1.7靜態分析技術實踐15
1.7.1PotentialKeylogger.exe:一個未加殼的執行檔15
1.7.2PackedProgram.exe:窮途末路18
1.8PE檔案頭與分節18
1.8.1使用PEview來分析PE檔案19
1.8.2使用ResourceHacker工具來查看資源節22
1.8.3使用其他的PE檔案工具23
1.8.4PE檔案頭概述23
1.9小結24
1.10實驗24
第2章在虛擬機中分析惡意代碼27
2.1虛擬機的結構27
2.2創建惡意代碼分析機28
2.2.1配置VMware29
2.2.2斷開網路30
2.2.3創建主機模式網路30
2.2.4使用多個虛擬機30
2.3使用惡意代碼分析機31
2.3.1讓惡意代碼連線網際網路31
2.3.2連線和斷開外圍設備32
2.3.3拍攝快照32
2.3.4從虛擬機傳輸檔案33
2.4使用VMware進行惡意代碼分析的風險34
2.5記錄/重放:重複計算機運行軌跡34
2.6小結35
第3章動態分析基礎技術36
3.1沙箱:簡便但粗糙的方法36
3.1.1使用惡意代碼沙箱36
3.1.2沙箱的缺點37
3.2運行惡意代碼38
3.3進程監視器39
3.3.1進程監視器的顯示40
3.3.2進程監視器中的過濾41
3.4使用進程瀏覽器(ProcessExplorer)來查看進程43
3.4.1進程瀏覽器的顯示43
3.4.2使用驗證選項44
3.4.3比較字元串45
3.4.4使用依賴遍歷器(DependencyWalker)45
3.4.5分析惡意文檔46
3.5使用Regshot來比較註冊錶快照46
3.6模擬網路47
3.6.1使用ApateDNS47
3.6.2使用Netcat進行監視48
3.7使用Wireshark進行數據包監聽49
3.8使用INetSim51
3.9基礎動態分析工具實踐52
3.10小結55
3.11實驗56
第2篇靜態分析高級技術篇
第4章x86反彙編速成班60
4.1抽象層次60
4.2逆向工程62
4.3x86體系結構62
4.3.1記憶體63
4.3.2指令64
4.3.3操作碼和位元組序64
4.3.4運算元65
4.3.5暫存器65
4.3.6簡單指令67
4.3.7棧70
4.3.8條件指令73
4.3.9分支指令73
4.3.10重複指令74
4.3.11C語言主函式和偏移76
4.3.12更多信息:Intelx86ArchitectureManual77
4.4小結78
第5章IDAPro79
5.1載入一個執行檔79
5.2IDAPro接口81
5.2.1反彙編視窗模式81
5.2.2對分析有用的視窗83
5.2.3返回到默認視圖83
5.2.4導航IDAPro83
5.2.5搜尋85
5.3使用交叉引用86
5.3.1代碼交叉引用87
5.3.2數據交叉引用88
5.4分析函式88
5.5使用圖形選項89
5.6增強反彙編91
5.6.1重命名位置91
5.6.2注釋92
5.6.3格式化運算元92
5.6.4使用命名的常量93
5.6.5重新定義代碼和數據94
5.7用外掛程式擴展IDA95
5.7.1使用IDC腳本96
5.7.2使用IDAPython97
5.7.3使用商業外掛程式97
5.8小結98
5.9實驗98
第6章識別彙編中的C代碼結構100
6.1全局與局部變數101
6.2反彙編算術操作102
6.3識別if語句104
6.3.1用IDAPro圖形化分析函式105
6.3.2識別嵌套的if語句106
6.4識別循環107
6.4.1找到for循環107
6.4.2找到while循環109
6.5理解函式調用約定110
6.5.1cdecl110
6.5.2stdcall111
6.5.3fastcall111
6.5.4壓棧與移動111
6.6分析switch語句112
6.6.1If樣式112
6.6.2跳轉表114
6.7反彙編數組118
6.8識別結構體119
6.9分析鍊表遍歷121
6.10小結123
6.11實驗123
第7章分析惡意Windows程式126
7.1WindowsAPI126
7.1.1類型和匈牙利表達法126
7.1.2句柄127
7.1.3檔案系統函式127
7.1.4特殊檔案128
7.2Windows註冊表129
7.2.1註冊表根鍵130
7.2.2Regedit131
7.2.3自啟動程式131
7.2.4常用註冊表函式131
7.2.5練習分析註冊表操作代碼132
7.2.6使用.reg檔案的註冊表腳本133
7.3網路API133
7.3.1伯克利兼容套接字134
7.3.2網路的伺服器和客戶端134
7.3.3WinINetAPI135
7.4跟蹤惡意代碼的運行136
7.4.1DLL136
7.4.2進程137
7.4.3執行緒139
7.4.4使用互斥量的進程間協作142
7.4.5服務143
7.4.6組件對象模型145
7.4.7異常:當事情出錯時147
7.5核心與用戶模式148
7.6原生API149
7.7小結151
7.8實驗151
第3篇動態分析高級技術篇
第8章動態調試154
8.1原始碼級與彙編級的調試器154
8.2核心模式與用戶模式調試155
8.3使用調試器155
8.3.1單步調試155
8.3.2單步跳過(Stepping—Over)和單步跳入(Stepping—Into)156
8.3.3用斷點暫停執行157
8.4異常161
8.4.1首次和二次異常處理162
8.4.2常見異常162
8.5使用調試器修改執行檔163
8.6修改可執行程式的實踐163
8.7小結164
第9章OllyDbg165
9.1載入惡意代碼165
9.1.1打開一個執行檔165
9.1.2附加調試器到一個運行程式166
9.2OllyDbg的接口167
9.3記憶體映射168
9.3.1基地址重定位169
9.4查看執行緒和堆疊170
9.5執行代碼171
9.6斷點172
9.6.1軟體斷點173
9.6.2條件斷點174
9.6.3硬體斷點175
9.6.4記憶體斷點175
9.7載入DLL176
9.8跟蹤177
9.8.1標準回溯跟蹤177
9.8.2堆疊調用跟蹤178
9.8.3運行跟蹤178
9.8.4跟蹤PoisonIvy178
9.9異常處理179
9.10修補180
9.11分析shellcode181
9.12協助功能182
9.13外掛程式182
9.13.1OllyDump183
9.13.2調試器隱藏外掛程式183
9.13.3命令行184
9.13.4書籤185
9.14腳本調試185
9.15小結186
9.16實驗187
第10章使用WinDbg調試核心189
10.1驅動與核心代碼189
10.2安裝核心調試191
10.3使用WinDbg193
10.3.1從記憶體中讀取194
10.3.2使用算術操作符194
10.3.3設定斷點194
10.3.4列舉模組195
10.4微軟符號表195
10.4.1搜尋符號195
10.4.2查看結構信息196
10.4.3配置Windows符號表198
10.5核心調試實踐198
10.5.1用戶空間的代碼198
10.5.2核心模式的代碼200
10.5.3查找驅動對象203
10.6Rootkit204
10.6.1Rootkit分析實踐205
10.6.2中斷208
10.7載入驅動209
10.8WindowsVista、Windows7和x64版本的核心問題209
10.9小結210
10.10實驗210
第4篇惡意代碼功能篇
第11章惡意代碼行為214
11.1下載器和啟動器214
11.2後門(backdoor)214
11.2.1反向shell215
11.2.2遠程控制工具216
11.2.3殭屍網路216
11.2.4遠程控制工具與殭屍網路的比較217
11.3登錄憑證竊密器217
11.3.1GINA攔截217
11.3.2口令哈希轉儲218
11.3.3擊鍵記錄221
11.4存活機制223
11.4.1Windows註冊表223
11.4.2特洛伊木馬化(Trojanized)系統二進制檔案225
11.4.3DLL載入順序劫持227
11.5提權228
11.5.1使用SeDebugPrivilege228
11.6隱藏它的蹤跡——用戶態的Rootkit229
11.6.1IATHook230
11.6.2InlineHook231
11.7小結232
11.8實驗232
第12章隱蔽的惡意代碼啟動234
12.1啟動器(Launcher)234
12.2進程注入234
12.2.1DLL注入235
12.2.2直接注入237
12.3進程替換238
12.4鉤子(Hook)注入240
12.4.1本地和遠程鉤子(Hook)240
12.4.2使用鉤子的擊鍵記錄器241
12.4.3使用SetWindowsHookEx241
12.4.4目標執行緒241
12.5Detours242
12.6APC注入243
12.6.1用戶模式下APC注入244
12.6.2核心模式的APC注入245
12.7小結246
12.8實驗246
第13章數據加密248
13.1分析加密算法的目的248
13.2簡單的加密算法248
13.2.1凱撒密碼249
13.2.2XOR249
13.2.3其他一些簡單的加密策略254
13.2.4Base64255
13.3常見的加密算法258
13.3.1識別字元串和導入259
13.3.2查找加密常量259
13.3.3查找高熵值內容261
13.4自定義加密262
13.4.1識別自定義加密263
13.4.2攻擊者使用自定義加密的優勢265
13.5解密265
13.5.1自解密265
13.5.2手動執行解密函式266
13.5.3使用通用的解密規範267
13.6小結270
13.7實驗271
第14章惡意代碼的網路特徵273
14.1網路應對措施273
14.1.1在原始環境中觀察惡意代碼273
14.1.2惡意行為的痕跡274
14.1.3OPSEC=操作安全性275
14.2安全地調查線上攻擊者275
14.2.1間接性策略275
14.2.2獲取IP位址和域名信息276
14.3基於內容的網路應對措施278
14.3.1使用Snort進行入侵檢測278
14.3.2深入觀察279
14.4結合動態和靜態分析技術282
14.4.1過度分析的危險283
14.4.2在眾目睽睽下隱藏283
14.4.3理解周邊代碼286
14.4.4尋找網路操作代碼287
14.4.5了解網路內容的來源288
14.4.6硬編碼數據vs.臨時數據289
14.4.7確定和利用編碼步驟289
14.4.8創建特徵291
14.4.9分析解析例程292
14.4.10針對多個元素294
14.5了解攻擊者的意圖295
14.6小結296
14.7實驗296
第5篇逆向工程
第15章對抗反彙編300
15.1何謂對抗反彙編技術300
15.2挫敗反彙編算法301
15.2.1線性反彙編302
15.2.2面向代碼流的反彙編303
15.3對抗反彙編技術306
15.3.1相同目標的跳轉指令306
15.3.2固定條件的跳轉指令307
15.3.3無效的反彙編指令308
15.3.4用IDAPro對指令進行NOP替換311
15.4混淆控制流圖312
15.4.1函式指針問題312
15.4.2在IDAPro中添加代碼的交叉引用313
15.4.3濫用返回指針313
15.4.4濫用結構化異常處理315
15.5挫敗棧幀分析317
15.6小結320
15.7實驗320
第16章反調試技術322
16.1探測Windows調試器322
16.1.1使用WindowsAPI322
16.1.2手動檢測數據結構324
16.1.3系統痕跡檢測326
16.2識別調試器的行為327
16.2.1INT掃描327
16.2.2執行代碼校驗和檢查328
16.2.3時鐘檢測328
16.3干擾調試器的功能330
16.3.1使用TLS回調330
16.3.2使用異常332
16.3.3插入中斷333
16.4調試器漏洞334
16.4.1PE頭漏洞334
16.4.2OutputDebugString漏洞336
16.5小結336
16.6實驗336
第17章反虛擬機技術338
17.1VMware痕跡338
17.1.1繞過VMware痕跡的探測340
17.1.2探測記憶體痕跡342
17.2查找漏洞指令342
17.2.1使用RedPill反虛擬機技術343
17.2.2使用NoPill技術344
17.2.3查詢I/O通信連線埠344
17.2.4使用str指令345
17.2.5反虛擬機的x86指令346
17.2.6在IDAPro中高亮顯示反虛擬機代碼347
17.2.7使用ScoopyNG347
17.3調整設定348
17.4虛擬機逃逸349
17.5小結349
17.6實驗349
第18章加殼與脫殼352
18.1剖析加殼352
18.1.1脫殼存根353
18.1.2載入執行檔353
18.1.3解析導入函式表353
18.1.4尾部跳轉354
18.1.5圖示脫殼過程354
18.2識別加殼程式355
18.2.1加殼程式的標識355
18.2.2熵計算356
18.3脫殼選項356
18.4自動脫殼356
18.5手動脫殼357
18.5.1使用導入重構器重構導入表358
18.5.2查找OEP359
18.5.3手動修復導入表363
18.6常見殼的技巧與竅門364
18.6.1UPX364
18.6.2PECompact365
18.6.3ASPack365
18.6.4Petite365
18.6.5WinUpack366
18.6.6Themida367
18.7不完全脫殼情況下的分析368
18.8加殼DLL368
18.9小結369
18.10實驗369
第6篇高級專題
第19章shellcode分析372
19.1載入shellcode進行分析372
19.2位置無關代碼373
19.3識別執行位置373
19.3.1使用call/pop指令374
19.3.2使用fnstenv指令376
19.4手動符號解析377
19.4.1在記憶體中找到kernel32.dll378
19.4.2解析PE檔案導出數據380
19.4.3使用散列過的導出符號名382
19.5一個完整的HelloWorld例子383
19.6shellcode編碼385
19.7空指令雪橇387
19.8找到shellcode387
19.9小結388
19.10實驗389
第20章C++代碼分析391
20.1面向對象的程式語言391
20.1.1this指針392
20.1.2重載與修飾394
20.1.3繼承(Inheritance)和函式重寫(Overriding)395
20.2虛函式和非虛函式396
20.2.1虛函式表的使用398
20.2.2識別虛函式表399
20.3創建和銷毀對象400
20.4小結401
20.5實驗401
第21章64位惡意代碼403
21.1為什麼需要64位惡意代碼403
21.2x64架構上的差別404
21.2.1x64調用約定和棧使用上的差別406
21.2.264位異常處理408
21.3在Windows64位上的Windows32位408
21.4惡意代碼功能上的64位提示409
21.5小結410
21.6實驗410
附錄A常見Windows函式列表412
附錄B流行的惡意代碼分析工具列表424
附錄C實驗作業參考解答435
附錄D致青春,基礎軟體開發的中國故事691
附錄ESyser操作入門695
序言
電話鈴聲急促響起,網路管理員告訴你說公司網站被黑了,網站上的客戶敏感信息被盜了。於是你立馬開始調查分析,首先檢查了日誌記錄,來確定事件涉及的主機。你用防毒軟體對這些主機進行了掃描,檢查是否感染了惡意代碼。你的運氣還算不錯,防毒軟體檢測到一個木馬程式,名為TROJ.snapAK。你刪除這個檔案,並清理了現場,同時你還部署了一個入侵檢測系統,來確認沒有其他主機被感染。最後你修補了一個你認為是被攻擊者利用來入侵主機的安全漏洞,來確保這種攻擊事件不會再次發生。
不幸的是,幾天之後網路管理員再次打電話過來,告訴你說敏感信息又被竊取了。這看起來似乎是相同的攻擊,但你卻不知道該做什麼。很顯然,你部署的入侵檢測系統特徵庫失效了。因為更多的主機被感染了,而你的防毒軟體並沒有提供足夠的保護來隔離攻擊威脅。現在,公司高層管理人員要求你解釋發生了什麼,而你可以告訴他們的只是一個名為TROJ.snapAK的惡意代碼。你沒有針對最重要問題的答案,這讓他們認為你是一位不稱職的安全工程師。
你該如何確定TROJ.snapAK惡意代碼在做什麼,從而可以讓你消除這個威脅?你如何才能寫出一個更有效的網路檢測特徵?你怎樣才能找出其他感染了這個惡意代碼的主機呢?你該如何確保你刪除了整個惡意代碼程式包,而不只是其中的一部分呢?你該如何回答管理層關於這個惡意代碼幹了些什麼的問題呢?
如果你所有能做的,只是告訴你的老闆,說你需要聘請昂貴的外部諮詢顧問,因為你不能保護自己的網路,這真的不是確保工作飯碗的好辦法。
幸運的是,你有著足夠的智慧,馬上啃起了這本《惡意代碼分析實戰》,從這本書中你將學到的技能,可以教你如何來回答這些困難的問題,並為你展示保護網路免受惡意代碼侵害的方法。
什麼是惡意代碼分析
惡意代碼,也稱為惡意軟體,在大多數計算機入侵事件中都扮演了重要角色。任何以某種方式來對用戶、計算機或網路造成破壞的軟體,都可以被認為是惡意代碼,包括計算機病毒、木馬、蠕蟲、核心套件、勒索軟體、間諜軟體,等等。儘管各種不同的惡意代碼類型會做一些完全不同的事情(你將會在本書中看到),作為惡意代碼分析師,我們擁有一組核心的工具和技術,用來解剖分析各式各樣的惡意代碼。
惡意代碼分析是一種解剖惡意代碼的藝術,了解惡意代碼是如何工作的、如何識別它,以及如何戰勝或消除它。你並不是需要成為一名超級黑客,才能進行惡意代碼分析。
網路上每天有著數以百萬計,甚至更多的惡意代碼,惡意代碼分析成為了任何一位從事計算機安全事件回響安全工程師的必需技能。此外,由於惡意代碼分析專業人才的短缺,熟練的惡意代碼分析師正處於強烈的人才需求之中。
這么說吧,這不是一本關於如何找到惡意代碼的書籍。我們的重點是在如何分析已經找到的惡意代碼。我們專注於Windows作業系統上發現的惡意代碼——因為到目前為止,Windows作業系統還是最為常用的作業系統。但你所學到的技能可以為你在任何作業系統上分析惡意代碼提供支持。我們還將專注在執行檔上,因為它們是最常見的,也是你所遇到的最難以分析的一些檔案。與此同時,我們選擇不討論如惡意JavaScript腳本、Java程式等其他類型的惡意代碼,相反的是,我們選擇對方法進行深入討論,用於分析更加高級的威脅,比如後門、隱蔽性惡意代碼和核心套件。
先決條件
不管你是否有惡意代碼分析的背景或經驗,你都會從本書中受益。
第1~3章將討論基礎的惡意代碼分析技術,即使你沒有安全或編程經驗,也可以用這些技術來進行惡意代碼分析。第4~14章則覆蓋中等級別的內容,可以讓你武裝上一些用來分析大多數惡意程式的主流工具與技能。這些章節都需要一些關於程式語言的基本知識。第15~19章,則提供最先進的技術材料,即使對資深的惡意代碼分析師來說都是有用的,因為這部分內容涵蓋了惡意代碼分析的一些戰術和技巧,在分析最為複雜的惡意代碼樣本時都用得上,比如那些套用了對抗反彙編、反調試技術或加殼技術的惡意代碼。
本書將教你如何以及何時使用各種惡意代碼分析技術。了解何時應該使用特定的技術與掌握技術本身一樣重要,因為在某個特定狀況下使用了錯誤的技術,可能會是在令人沮喪地浪費時間。我們不會涵蓋每一個工具,因為工具會隨時改變,而它的核心功能才是最重要的。此外,我們將在整本書中使用切合實際的惡意代碼樣本。
實踐動手學習
我們有著逆向工程和惡意代碼分析專業課程的豐富教學經驗,這些經驗已經告訴我們,學生只有通過使用所學習的技能進行動手實踐練習時,才能真正掌握和學到這些技能。我們也發現了實驗作業的質量與講授的課程內容同等重要,如果沒有一個實驗作業部分,要學會如何分析惡意代碼是幾乎不可能的。
從始至終,本書中絕大多數章節最後都會給出一些實驗作業,讓你來練習這一章中所講授的技術。這些實驗作業為你提供了真實惡意代碼樣本的挑戰,旨在展示你將在真實世界中遭遇到惡意代碼中最為普遍的類型和行為。這些實驗作業旨在加強每章中所介紹的基本概念,而不會用一些無關信息來讓你無所適從。每個實驗都包括一個或多個惡意檔案,以及一些特意設計來引導你完成實驗的問題,此外也給出了對這些問題的簡短答案,以及對惡意代碼樣本的詳細分析過程。
這些實驗都模擬了真實的惡意代碼分析場景。比如,它們都以通用化的檔案名稱字進行命名,而不會提供任何能夠洞察到惡意代碼功能的信息。對於真正環境中的惡意代碼,你也同樣在開始分析時不會有任何信息,而你需要用你所學到的技能,來收集線索,並找出惡意代碼在做些什麼。
每個實驗所需的時間將取決於你的經驗。你可以嘗試自己來完成實驗,或者沿著詳細分析過程,來了解如何在實踐中使用各種技術。
大多數章節都包含了三個實驗作業。第一個實驗通常是最簡單的,絕大多數讀者都應該能夠完成它。第二個實驗是中等難度的,大多數讀者會需要解答中的一些援助來完成。而第三個實驗是最困難的,如果沒有從參考答案取得提示,只有最勤奮和技術大拿的讀者們才能夠完成它們。
本書內容預覽
《惡意代碼分析實戰》以使用簡單的方法,從相對而言不那么複雜的惡意代碼中獲取信息開始,然後逐步提升難度,講解可以用來對抗最為先進惡意程式的複雜技術。以下是本書每章的內容預覽:
第0章,“惡意代碼分析技術入門”,建立起惡意代碼分析的整體過程和基礎方法學。
第1章,“靜態分析基礎技術”,傳授無須執行就能從執行檔獲取信息的方法。
第2章,“在虛擬機中分析惡意代碼”,帶你一起設定虛擬機,用作運行惡意代碼的安全環境。
第3章,“動態分析基礎技術”,介紹一些通過執行惡意程式進行分析、易於使用但非常高效的技術方法。
第4章,“x86反彙編速成班”,是對x86彙編語言的一個簡要介紹,這章為使用IDA Pro進行惡意代碼深入分析提供了基礎。
第5章,“IDA Pro”,為你顯示如何使用IDA Pro,一個最為重要的惡意代碼分析工具。我們將在全書的其餘章節使用IDA Pro工具。
第6章,“識別彙編中的C代碼結構”,提供了一些C語言代碼的彙編語句案例,並教你如何理解彙編代碼的高層功能結構。
第7章,“分析惡意Windows程式”,覆蓋範圍廣泛的Windows程式特定概念,而這些是理解惡意Windows程式所必需的。
第8章,“動態調試”,解釋調試的基本知識,以及惡意代碼分析師該如何使用調試器。
第9章,“OllyDbg”,為你展示如何使用OllyDbg,惡意代碼分析師中最流行的一款調試器。
第10章,“使用WinDbg調試核心”,包括了如何使用WinDbg來分析核心模式惡意代碼和核心套件。
第11章,“惡意代碼行為”,介紹了常見的惡意代碼功能,並告訴你在分析惡意代碼時該如何識別惡意功能。
第12章,“隱蔽的惡意代碼啟動”,討論如何分析一類將自己的執行隱藏至另一進程中的特殊惡意代碼。
第13章,“數據加密”,演示了惡意代碼如何加密數據,使其更難在網路流量或受害主機上被發現。
第14章,“惡意代碼的網路特徵”,教你如何通過惡意代碼分析來創建網路檢測特徵,並演示這類特徵要優於單獨從捕獲網路流量中提取的特徵。
第15章,“對抗反彙編”,解釋一些惡意代碼編寫者如何設計自己的惡意代碼,使得它們難以被反彙編,並說明如何識別和擊敗這些技術。
第16章,“反調試技術”,描述惡意代碼編寫者可以讓他們的代碼難以被調試的伎倆,以及克服這些障礙的方法。
第17章,“反虛擬機技術”,演示惡意代碼所使用的反虛擬機技術,這些技術會讓分析師在虛擬機中難以分析這些惡意代碼,並介紹繞過這些技術的方法。
第18章,“加殼與脫殼”,告訴讀者惡意代碼是如何使用加殼來隱藏自己真正目的的,然後提供一步一步的脫殼的技術方法。
第19章,“shellcode分析”,解釋了shellcode是什麼,並展示分析惡意shellcode的一些技巧和竅門。
第20章,“C++代碼分析”,為你指明C++代碼在編譯之後存在什麼樣的差異,並教授你如何對由C++編寫的惡意代碼進行分析。
第21章,“64位惡意代碼”,討論惡意代碼編寫者為何使用64位惡意代碼,以及你所需要了解的x86與x64之間的區別。
附錄A,“常見Windows函式列表”,簡要介紹了惡意代碼中普遍使用的Windows函式。
附錄B,“流行的惡意代碼分析工具列表”,列出了對於惡意代碼分析師們來說最有用的工具。
附錄C,“實驗作業參考解答”,對全書每個章節的實驗給出了參考解答。
附錄D,“致青春,基礎軟體開發的中國故事”,講述中國程式設計師開發Windows核心調試器Syser的幕後故事。
附錄E,“Syser操作入門”,提供Syser核心調試器的入門指南。
我們整本書的目標就是為你武裝能夠擊敗各種類型惡意代碼的分析技術。正如你看到的,我們涵蓋了大量的技術材料,以及能夠加強這些技術材料的實驗作業。當你讀完本書時,應該學到了用來分析任何惡意代碼的技能,包括快速分析常規惡意代碼樣本的基礎技術,以及解剖那些甚至是“來自外星”的神秘惡意代碼樣本所需的高超技術。
那么,讓我們開始吧!