惡意程式碼分析實戰
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
安全技術大系
惡意程式碼分析實戰(最權威的惡意程式碼分析指南,理論實踐分析並重,業內人手一冊的寶典)
【美】Michael Sikorski(邁克爾.斯科爾斯基), Andrew Honig(安德魯.哈尼克)著
諸葛建偉 姜輝 張光凱 譯
ISBN 978-7-121-22468-3
2014年4月出版
定價:128.00元
732頁
16開
編輯推薦
不管你是否有惡意程式碼分析的背景和經驗,《惡意程式碼分析實戰》極其豐富的內容都將使你獲益匪淺。
《惡意程式碼分析實戰》教你如何、以及何時使用惡意程式碼分析技術,深入掌握惡意程式碼分析工具的核心功能,從而達到準確診斷、及時突破、快速響應的效果。
《惡意程式碼分析實戰》一經問世,便贏來業內好評如潮,被業內人士一致推薦為入門、晉級的權威讀本。
權威,詳盡,經典——每一位認真學習過《惡意程式碼分析實戰》的讀者,必將在惡意程式碼分析的專業技能上獲得巨大的提升。
內容提要
《惡意程式碼分析實戰》是一本內容全面的惡意程式碼分析技術指南,其內容兼顧理論,重在實踐,從不同方面為讀者講解惡意程式碼分析的實用技術方法。
《惡意程式碼分析實戰》分為21章,覆蓋惡意程式碼行為、惡意程式碼靜態分析方法、惡意程式碼動態分析方法、惡意程式碼對抗與反對抗方法等,幷包含了shellcode分析,C++惡意程式碼分析,以及64位惡意程式碼分析方法的介紹。本書多個章節後面都配有實驗並配有實驗的詳細講解與分析。通過每章的介紹及章後的實驗,本書一步一個臺階地幫助初學者從零開始建立起惡意程式碼分析的基本技能。
《惡意程式碼分析實戰》獲得業界的一致好評,IDA Pro的作者Ilfak Guilfanov這樣評價本書:“一本惡意程式碼分析的實踐入門指南,我把這本書推薦給所有希望解剖Windows惡意程式碼的讀者”。
《惡意程式碼分析實戰》的讀者群主要是網路與系統安全領域的技術愛好者與學生及惡意程式碼分析研究方面的安全從業人員。
目錄
第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.5 PE檔案格式 11
1.6 連結庫與函式 12
1.6.1 靜態連結、執行時連結與動態連結 12
1.6.2 使用Dependency Walker工具探索動態連結函式 13
1.6.3 匯入函式 14
1.6.4 匯出函式 15
1.7 靜態分析技術實踐 15
1.7.1 PotentialKeylogger.exe:一個未加殼的可執行檔案 15
1.7.2 PackedProgram.exe:窮途末路 18
1.8 PE檔案頭與分節 18
1.8.1 使用PEview來分析PE檔案 19
1.8.2 使用Resource Hacker工具來檢視資源節 22
1.8.3 使用其他的PE檔案工具 23
1.8.4 PE檔案頭概述 23
1.9 小結 24
1.10 實驗 24
第2章 在虛擬機器中分析惡意程式碼 27
2.1 虛擬機器的結構 27
2.2 建立惡意程式碼分析機 28
2.2.1 配置VMware 29
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 使用程序瀏覽器(Process Explorer)來檢視程序 43
3.4.1 程序瀏覽器的顯示 43
3.4.2 使用驗證選項 44
3.4.3 比較字串 45
3.4.4 使用依賴遍歷器(Dependency Walker) 45
3.4.5 分析惡意文件 46
3.5 使用Regshot來比較登錄檔快照 46
3.6 模擬網路 47
3.6.1 使用ApateDNS 47
3.6.2 使用Netcat進行監視 48
3.7 使用Wireshark進行資料包監聽 49
3.8 使用INetSim 51
3.9 基礎動態分析工具實踐 52
3.10 小結 55
3.11 實驗 56
第 2篇 靜態分析高階技術篇
第4章 x86反彙編速成班 60
4.1 抽象層次 60
4.2 逆向工程 62
4.3 x86體系結構 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.11 C語言主函式和偏移 76
4.3.12 更多資訊:Intel x86 Architecture Manual 77
4.4 小結 78
第5章 IDA Pro 79
5.1 載入一個可執行檔案 79
5.2 IDA Pro介面 81
5.2.1 反彙編視窗模式 81
5.2.2 對分析有用的視窗 83
5.2.3 返回到預設檢視 83
5.2.4 導航IDA Pro 83
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 用外掛擴充套件IDA 95
5.7.1 使用IDC指令碼 96
5.7.2 使用IDAPython 97
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 用IDA Pro圖形化分析函式 105
6.3.2 識別巢狀的if語句 106
6.4 識別迴圈 107
6.4.1 找到for迴圈 107
6.4.2 找到while迴圈 109
6.5 理解函式呼叫約定 110
6.5.1 cdecl 110
6.5.2 stdcall 111
6.5.3 fastcall 111
6.5.4 壓棧與移動 111
6.6 分析switch語句 112
6.6.1 If樣式 112
6.6.2 跳轉表 114
6.7 反彙編陣列 118
6.8 識別結構體 119
6.9 分析連結串列遍歷 121
6.10 小結 123
6.11 實驗 123
第7章 分析惡意Windows程式 126
7.1 Windows API 126
7.1.1 型別和匈牙利表達法 126
7.1.2 控制代碼 127
7.1.3 檔案系統函式 127
7.1.4 特殊檔案 128
7.2 Windows登錄檔 129
7.2.1 登錄檔根鍵 130
7.2.2 Regedit 131
7.2.3 自啟動程式 131
7.2.4 常用登錄檔函式 131
7.2.5 練習分析登錄檔操作程式碼 132
7.2.6 使用.reg檔案的登錄檔指令碼 133
7.3 網路API 133
7.3.1 伯克利相容套接字 134
7.3.2 網路的伺服器和客戶端 134
7.3.3 WinINet API 135
7.4 跟蹤惡意程式碼的執行 136
7.4.1 DLL 136
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 原生API 149
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章 OllyDbg 165
9.1 載入惡意程式碼 165
9.1.1 開啟一個可執行檔案 165
9.1.2 附加偵錯程式到一個執行程式 166
9.2 OllyDbg的介面 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 載入DLL 176
9.8 跟蹤 177
9.8.1 標準回溯跟蹤 177
9.8.2 堆疊呼叫跟蹤 178
9.8.3 執行跟蹤 178
9.8.4 跟蹤Poison Ivy 178
9.9 異常處理 179
9.10 修補 180
9.11 分析shellcode 181
9.12 協助功能 182
9.13 外掛 182
9.13.1 OllyDump 183
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 使用WinDbg 193
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.6 Rootkit 204
10.6.1 Rootkit分析實踐 205
10.6.2 中斷 208
10.7 載入驅動 209
10.8 Windows Vista、Windows 7 和x64版本的核心問題 209
10.9 小結 210
10.10 實驗 210
第 4篇 惡意程式碼功能篇
第11章 惡意程式碼行為 214
11.1 下載器和啟動器 214
11.2 後門(backdoor) 214
11.2.1 反向shell 215
11.2.2 遠端控制工具 216
11.2.3 僵屍網路 216
11.2.4 遠端控制工具與僵屍網路的比較 217
11.3 登入憑證竊密器 217
11.3.1 GINA攔截 217
11.3.2 口令雜湊轉儲 218
11.3.3 擊鍵記錄 221
11.4 存活機制 223
11.4.1 Windows登錄檔 223
11.4.2 特洛伊木馬化(Trojanized)系統二進位制檔案 225
11.4.3 DLL載入順序劫持 227
11.5 提權 228
11.5.1 使用SeDebugPrivilege 228
11.6 隱藏它的蹤跡——使用者態的Rootkit 229
11.6.1 IAT Hook 230
11.6.2 Inline Hook 231
11.7 小結 232
11.8 實驗 232
第12章 隱蔽的惡意程式碼啟動 234
12.1 啟動器(Launcher) 234
12.2 程序注入 234
12.2.1 DLL注入 235
12.2.2 直接注入 237
12.3 程序替換 238
12.4 鉤子(Hook)注入 240
12.4.1 本地和遠端鉤子(Hook) 240
12.4.2 使用鉤子的擊鍵記錄器 241
12.4.3 使用SetWindowsHookEx 241
12.4.4 目標執行緒 241
12.5 Detours 242
12.6 APC注入 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.2 XOR 249
13.2.3 其他一些簡單的加密策略 254
13.2.4 Base64 255
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.3 OPSEC=操作安全性 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 用IDA Pro對指令進行NOP替換 311
15.4 混淆控制流圖 312
15.4.1 函式指標問題 312
15.4.2 在IDA Pro中新增程式碼的交叉引用 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 使用Windows API 322
16.1.2 手動檢測資料結構 324
16.1.3 系統痕跡檢測 326
16.2 識別偵錯程式的行為 327
16.2.1 INT掃描 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.1 PE頭漏洞 334
16.4.2 OutputDebugString漏洞 336
16.5 小結 336
16.6 實驗 336
第17章 反虛擬機器技術 338
17.1 VMware 痕跡 338
17.1.1 繞過VMware痕跡的探測 340
17.1.2 探測記憶體痕跡 342
17.2 查詢漏洞指令 342
17.2.1 使用Red Pill反虛擬機器技術 343
17.2.2 使用No Pill技術 344
17.2.3 查詢I/O通訊埠 344
17.2.4 使用str指令 345
17.2.5 反虛擬機器的x86指令 346
17.2.6 在IDA Pro中高亮顯示反虛擬機器程式碼 347
17.2.7 使用ScoopyNG 347
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 查詢OEP 359
18.5.3 手動修復匯入表 363
18.6 常見殼的技巧與竅門 364
18.6.1 UPX 364
18.6.2 PECompact 365
18.6.3 ASPack 365
18.6.4 Petite 365
18.6.5 WinUpack 366
18.6.6 Themida 367
18.7 不完全脫殼情況下的分析 368
18.8 加殼DLL 368
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.dll 378
19.4.2 解析PE檔案匯出資料 380
19.4.3 使用雜湊過的匯出符號名 382
19.5 一個完整的Hello World例子 383
19.6 shellcode編碼 385
19.7 空指令雪橇 387
19.8 找到shellcode 387
19.9 小結 388
19.10 實驗 389
第20章 C++程式碼分析 391
20.1 面向物件的程式語言 391
20.1.1 this指標 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.2 x64架構上的差別 404
21.2.1 x64呼叫約定和棧使用上的差別 406
21.2.2 64位異常處理 408
21.3 在Windows 64位上的Windows32位 408
21.4 惡意程式碼功能上的64位提示 409
21.5 小結 410
21.6 實驗 410
附錄A 常見Windows函式列表 412
附錄B 流行的惡意程式碼分析工具列表 424
附錄C 實驗作業參考解答 435
附錄D 致青春,基礎軟體開發的中國故事 691
附錄E Syser操作入門 695
作者簡介
邁克爾·斯科爾斯基(Michael Sikorski)是在Mandiant公司任職的電腦保安顧問。他對惡意程式碼進行逆向分析,支援公司安全事件響應調查,併為公司的聯邦政府部門客戶提供專業研究與開發的安全解決方案。邁克建立了一套惡意程式碼分析的系列課程,並對不同的受眾進行培訓,包括聯邦調查局和Black Hat黑客大會參會者。在加入Mandiant公司之前,他在麻省理工學院林肯實驗室工作,在那裡他對被動網路對映技術和滲透測試進行研究。邁克也是美國國家安全域性為期三年的系統和網路跨學科研究生專案的畢業生。在美國國家安全域性期間,他為逆向工程方面的研究做出了貢獻,並獲得在網路分析方面的多項發明獎項。
安德魯·哈尼克(Andrew Honig)是美國國防部的一位資訊保障專家。他在國家密碼學院(National Cryptologic School)教授軟體分析、逆向工程和Windows系統程式設計的課程,並是一位CISSP安全認證專家。安德魯是VMware虛擬化產品幾個零日漏洞的發現者,並開發了一些可以檢測新型惡意程式碼(包括核心套件)的創新工具。作為一位精於惡意程式碼與良性軟體分析技術的專家,他已經擁有超過10年的電腦保安業界分析師的經驗。
媒體評論
一本優秀的惡意程式碼速成教程。
Dino DaiZovi,自由安全諮詢師
一本最為全面的惡意程式碼分析技術指南,覆蓋了所有惡意程式碼分析所需的關鍵技術,幫助你理解最新惡意程式碼帶來的技術挑戰。
Chris Eagle,美國海軍研究生院,計算機科學系高階講師
一本惡意程式碼分析的實踐入門指南,我把這本書推薦給所有希望解剖Windows惡意程式碼的讀者。
— IlfakGuilfanov,IDA PRO創始人
一本惡意程式碼分析的優秀指南,所有章節都包含有詳細的技術解釋和動手實踐案例教程,讓你能夠立即面對真實的惡意程式碼。
— SebastianPorst,Google軟體工程師
本書為各個技術層次上的讀者帶來逆向工程方法,提供了一大堆覆蓋各種技術並且容易訪問的實踐案例,將帶領你更加深入地理解逆向工程的藝術與科學。我強烈推薦本書,無論是新手還是領域專家。
— DannyQuist,博士,OFFENSIVECOMPUTING創始人
如果你只要讀一本惡意程式碼的書籍,或是希望進入到惡意程式碼分析師的世界,就來看這本書吧!
— PatrickEngbretson,達科他州立大學教授,TheBasics of Hacking and Pen Testing一書的作者
為軟體安全或入侵檢測系統等研究生級別高階課程提供很好的課程資料,實踐案例對學生學習逆向工程方法、惡意程式碼分析和理解等方面具有特殊的價值。
— Sal Stolfo,哥倫比亞大學教授
前言
電話鈴聲急促響起,網路管理員告訴你說公司網站被黑了,網站上的客戶敏感資訊被盜了。於是你立馬開始調查分析,首先檢查了日誌記錄,來確定事件涉及的主機。你用防毒軟體對這些主機進行了掃描,檢查是否感染了惡意程式碼。你的運氣還算不錯,防毒軟體檢測到一個木馬程式,名為TROJ.snapAK。你刪除這個檔案,並清理了現場,同時你還部署了一個入侵檢測系統,來確認沒有其他主機被感染。最後你修補了一個你認為是被攻擊者利用來入侵主機的安全漏洞,來確保這種攻擊事件不會再次發生。
不幸的是,幾天之後網路管理員再次打電話過來,告訴你說敏感資訊又被竊取了。這看起來似乎是相同的攻擊,但你卻不知道該做什麼。很顯然,你部署的入侵檢測系統特徵庫失效了。因為更多的主機被感染了,而你的防毒軟體並沒有提供足夠的保護來隔離攻擊威脅。現在,公司高層管理人員要求你解釋發生了什麼,而你可以告訴他們的只是一個名為TROJ.snapAK的惡意程式碼。你沒有針對最重要問題的答案,這讓他們認為你是一位不稱職的安全工程師。
你該如何確定TROJ.snapAK惡意程式碼在做什麼,從而可以讓你消除這個威脅?你如何才能寫出一個更有效的網路檢測特徵?你怎樣才能找出其他感染了這個惡意程式碼的主機呢?你該如何確保你刪除了整個惡意程式碼程式包,而不只是其中的一部分呢?你該如何回答管理層關於這個惡意程式碼幹了些什麼的問題呢?
如果你所有能做的,只是告訴你的老闆,說你需要聘請昂貴的外部諮詢顧問,因為你不能保護自己的網路,這真的不是確保工作飯碗的好辦法。
幸運的是,你有著足夠的智慧,馬上啃起了這本《惡意程式碼分析實戰》,從這本書中你將學到的技能,可以教你如何來回答這些困難的問題,併為你展示保護網路免受惡意程式碼侵害的方法。
什麼是惡意程式碼分析
惡意程式碼,也稱為惡意軟體,在大多數計算機入侵事件中都扮演了重要角色。任何以某種方式來對使用者、計算機或網路造成破壞的軟體,都可以被認為是惡意程式碼,包括計算機病毒、木馬、蠕蟲、核心套件、勒索軟體、間諜軟體,等等。儘管各種不同的惡意程式碼型別會做一些完全不同的事情(你將會在本書中看到),作為惡意程式碼分析師,我們擁有一組核心的工具和技術,用來解剖分析各式各樣的惡意程式碼。
惡意程式碼分析是一種解剖惡意程式碼的藝術,瞭解惡意程式碼是如何工作的、如何識別它,以及如何戰勝或消除它。你並不是需要成為一名超級黑客,才能進行惡意程式碼分析。
網路上每天有著數以百萬計,甚至更多的惡意程式碼,惡意程式碼分析成為了任何一位從事電腦保安事件響應安全工程師的必需技能。此外,由於惡意程式碼分析專業人才的短缺,熟練的惡意程式碼分析師正處於強烈的人才需求之中。
這麼說吧,這不是一本關於如何找到惡意程式碼的書籍。我們的重點是在如何分析已經找到的惡意程式碼。我們專注於Windows作業系統上發現的惡意程式碼——因為到目前為止,Windows作業系統還是最為常用的作業系統。但你所學到的技能可以為你在任何作業系統上分析惡意程式碼提供支援。我們還將專注在可執行檔案上,因為它們是最常見的,也是你所遇到的最難以分析的一些檔案。與此同時,我們選擇不討論如惡意JavaScript指令碼、Java程式等其他型別的惡意程式碼,相反的是,我們選擇對方法進行深入討論,用於分析更加高階的威脅,比如後門、隱蔽性惡意程式碼和核心套件。
先決條件
不管你是否有惡意程式碼分析的背景或經驗,你都會從本書中受益。
第1~3章將討論基礎的惡意程式碼分析技術,即使你沒有安全或程式設計經驗,也可以用這些技術來進行惡意程式碼分析。第4~14章則覆蓋中等級別的內容,可以讓你武裝上一些用來分析大多數惡意程式的主流工具與技能。這些章節都需要一些關於程式語言的基本知識。第15~19章,則提供最先進的技術材料,即使對資深的惡意程式碼分析師來說都是有用的,因為這部分內容涵蓋了惡意程式碼分析的一些戰術和技巧,在分析最為複雜的惡意程式碼樣本時都用得上,比如那些應用了對抗反彙編、反除錯技術或加殼技術的惡意程式碼。
本書將教你如何以及何時使用各種惡意程式碼分析技術。瞭解何時應該使用特定的技術與掌握技術本身一樣重要,因為在某個特定狀況下使用了錯誤的技術,可能會是在令人沮喪地浪費時間。我們不會涵蓋每一個工具,因為工具會隨時改變,而它的核心功能才是最重要的。此外,我們將在整本書中使用切合實際的惡意程式碼樣本(你可以從http://www.practicalmalwareanalysis.com/或http://www.nostarch.com/malware.htm下載),來為你揭示在分析真實世界中惡意程式碼時會遇到的各種狀況。
實踐動手學習
我們有著逆向工程和惡意程式碼分析專業課程的豐富教學經驗,這些經驗已經告訴我們,學生只有通過使用所學習的技能進行動手實踐練習時,才能真正掌握和學到這些技能。我們也發現了實驗作業的質量與講授的課程內容同等重要,如果沒有一個實驗作業部分,要學會如何分析惡意程式碼是幾乎不可能的。
從始至終,本書中絕大多數章節最後都會給出一些實驗作業,讓你來練習這一章中所講授的技術。這些實驗作業為你提供了真實惡意程式碼樣本的挑戰,旨在展示你將在真實世界中遭遇到惡意程式碼中最為普遍的型別和行為。這些實驗作業旨在加強每章中所介紹的基本概念,而不會用一些無關資訊來讓你無所適從。每個實驗都包括一個或多個惡意檔案(可以從http://www.practicalmalware analysis.com/,或者http://www.nostarch.com/malware.htm下載),以及一些特意設計來引導你完成實驗的問題,此外也給出了對這些問題的簡短答案,以及對惡意程式碼樣本的詳細分析過程。
這些實驗都模擬了真實的惡意程式碼分析場景。比如,它們都以通用化的檔名字進行命名,而不會提供任何能夠洞察到惡意程式碼功能的資訊。對於真正環境中的惡意程式碼,你也同樣在開始分析時不會有任何資訊,而你需要用你所學到的技能,來收集線索,並找出惡意程式碼在做些什麼。
每個實驗所需的時間將取決於你的經驗。你可以嘗試自己來完成實驗,或者沿著詳細分析過程,來了解如何在實踐中使用各種技術。
大多數章節都包含了三個實驗作業。第一個實驗通常是最簡單的,絕大多數讀者都應該能夠完成它。第二個實驗是中等難度的,大多數讀者會需要解答中的一些援助來完成。而第三個實驗是最困難的,如果沒有從參考答案取得提示,只有最勤奮和技術大拿的讀者們才能夠完成它們。
本書內容預覽
《惡意程式碼分析實戰》以使用簡單的方法,從相對而言不那麼複雜的惡意程式碼中獲取資訊開始,然後逐步提升難度,講解可以用來對抗最為先進惡意程式的複雜技術。以下是本書每章的內容預覽:
第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核心偵錯程式的入門指南。
我們整本書的目標就是為你武裝能夠擊敗各種型別惡意程式碼的分析技術。正如你看到的,我們涵蓋了大量的技術材料,以及能夠加強這些技術材料的實驗作業。當你讀完本書時,應該學到了用來分析任何惡意程式碼的技能,包括快速分析常規惡意程式碼樣本的基礎技術,以及解剖那些甚至是“來自外星”的神祕惡意程式碼樣本所需的高超技術。
那麼,讓我們開始吧!
給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow
你好! 這是你第一次使用 **Markdown編輯器** 所展示的歡迎頁。如果你想學習如何使用Markdown編輯器, 可以仔細閱讀這篇文章,瞭解一下Markdown的基本語法知識。新的改變
我們對Markdown編輯器進行了一些功能拓展與語法支援,除了標準的Markdown編輯器功能,我們增加了如下幾點新功能,幫助你用它寫部落格:
- 全新的介面設計 ,將會帶來全新的寫作體驗;
- 在創作中心設定你喜愛的程式碼高亮樣式,Markdown 將程式碼片顯示選擇的高亮樣式 進行展示;
- 增加了 圖片拖拽 功能,你可以將本地的圖片直接拖拽到編輯區域直接展示;
- 全新的 KaTeX數學公式 語法;
- 增加了支援甘特圖的mermaid語法1 功能;
- 增加了 多螢幕編輯 Markdown文章功能;
- 增加了 焦點寫作模式、預覽模式、簡潔寫作模式、左右區域同步滾輪設定 等功能,功能按鈕位於編輯區域與預覽區域中間;
- 增加了 檢查列表 功能。
功能快捷鍵
撤銷:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜體:Ctrl/Command + I
標題:Ctrl/Command + Shift + H
無序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
檢查列表:Ctrl/Command + Shift + C
插入程式碼:Ctrl/Command + Shift + K
插入連結:Ctrl/Command + Shift + L
插入圖片:Ctrl/Command + Shift + G
合理的建立標題,有助於目錄的生成
直接輸入1次#,並按下space後,將生成1級標題。
輸入2次#,並按下space後,將生成2級標題。
以此類推,我們支援6級標題。有助於使用TOC
語法後生成一個完美的目錄。
如何改變文字的樣式
強調文字 強調文字
加粗文字 加粗文字
標記文字
刪除文字
引用文字
H2O is是液體。
210 運算結果是 1024.
插入連結與圖片
連結: link.
圖片:
帶尺寸的圖片:
當然,我們為了讓使用者更加便捷,我們增加了圖片拖拽功能。
如何插入一段漂亮的程式碼片
去部落格設定頁面,選擇一款你喜歡的程式碼片高亮樣式,下面展示同樣高亮的 程式碼片
.
// An highlighted block var foo = 'bar';
生成一個適合你的列表
- 專案
- 專案
- 專案
- 專案
- 專案1
- 專案2
- 專案3
- 計劃任務
- 完成任務
建立一個表格
一個簡單的表格是這麼建立的:
專案 | Value |
---|---|
電腦 | $1600 |
手機 | $12 |
導管 | $1 |
設定內容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文字居中 | 第二列文字居右 | 第三列文字居左 |
SmartyPants
SmartyPants將ASCII標點字元轉換為“智慧”印刷標點HTML實體。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
建立一個自定義列表
- Markdown
- Text-to- HTML conversion tool
- Authors
- John
- Luke
如何建立一個註腳
一個具有註腳的文字。2
註釋也是必不可少的
Markdown將文字轉換為 HTML。
KaTeX數學公式
您可以使用渲染LaTeX數學表示式 KaTeX:
Gamma公式展示 是通過尤拉積分
你可以找到更多關於的資訊 LaTeX 數學表示式here.
新的甘特圖功能,豐富你的文章
gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
section 現有任務
已完成 :done, des1, 2014-01-06,2014-01-08
進行中 :active, des2, 2014-01-09, 3d
計劃一 : des3, after des2, 5d
計劃二 : des4, after des3, 5d
- 關於 甘特圖 語法,參考 這兒,
UML 圖表
可以使用UML圖表進行渲染。 Mermaid. 例如下面產生的一個序列圖::
這將產生一個流程圖。:
- 關於 Mermaid 語法,參考 這兒,
FLowchart流程圖
我們依舊會支援flowchart的流程圖:
- 關於 Flowchart流程圖 語法,參考 這兒.
匯出與匯入
匯出
如果你想嘗試使用此編輯器, 你可以在此篇文章任意編輯。當你完成了一篇文章的寫作, 在上方工具欄找到 文章匯出 ,生成一個.md檔案或者.html檔案進行本地儲存。
匯入
如果你想載入一篇你寫過的.md檔案或者.html檔案,在上方工具欄可以選擇匯入功能進行對應副檔名的檔案匯入,
繼續你的創作。
註腳的解釋 ↩︎