關于我們
書單推薦
新書推薦
|
惡意代碼分析實戰(zhàn)
《惡意代碼分析實戰(zhàn)》是一本內容全面的惡意代碼分析技術指南,其內容兼顧理論,重在實踐,從不同方面為讀者講解惡意代碼分析的實用技術方法。
《惡意代碼分析實戰(zhàn)》分為21章,覆蓋惡意代碼行為、惡意代碼靜態(tài)分析方法、惡意代碼動態(tài)分析方法、惡意代碼對抗與反對抗方法等,并包含了shellcode分析,C++惡意代碼分析,以及64位惡意代碼分析方法的介紹。本書多個章節(jié)后面都配有實驗并配有實驗的詳細講解與分析。通過每章的介紹及章后的實驗,本書一步一個臺階地幫助初學者從零開始建立起惡意代碼分析的基本技能。 《惡意代碼分析實戰(zhàn)》獲得業(yè)界的一致好評,IDA Pro的作者Ilfak Guilfanov這樣評價本書:“一本惡意代碼分析的實踐入門指南,我把這本書推薦給所有希望解剖Windows惡意代碼的讀者”。 《惡意代碼分析實戰(zhàn)》的讀者群主要是網(wǎng)絡與系統(tǒng)安全領域的技術愛好者與學生及惡意代碼分析研究方面的安全從業(yè)人員。
不管你是否有惡意代碼分析的背景和經(jīng)驗,《惡意代碼分析實戰(zhàn)》極其豐富的內容都將使你獲益匪淺。 《惡意代碼分析實戰(zhàn)》教你如何、以及何時使用惡意代碼分析技術,深入掌握惡意代碼分析工具的核心功能,從而達到準確診斷、及時突破、快速響應的效果。 《惡意代碼分析實戰(zhàn)》一經(jīng)問世,便贏來業(yè)內好評如潮,被業(yè)內人士一致推薦為入門、晉級的權威讀本。 權威,詳盡,經(jīng)典——每一位認真學習過《惡意代碼分析實戰(zhàn)》的讀者,必將在惡意代碼分析的專業(yè)技能上獲得巨大的提升。
第0章 惡意代碼分析技術入門 1
0.1 惡意代碼分析目標 1 0.2 惡意代碼分析技術 2 0.2.1 靜態(tài)分析基礎技術 2 0.2.2 動態(tài)分析基礎技術 2 0.2.3 靜態(tài)分析高級技術 2 0.2.4 動態(tài)分析高級技術 2 0.3 惡意代碼類型 3 第0章 惡意代碼分析技術入門 1 0.1 惡意代碼分析目標 1 0.2 惡意代碼分析技術 2 0.2.1 靜態(tài)分析基礎技術 2 0.2.2 動態(tài)分析基礎技術 2 0.2.3 靜態(tài)分析高級技術 2 0.2.4 動態(tài)分析高級技術 2 0.3 惡意代碼類型 3 0.4 惡意代碼分析通用規(guī)則 4 第 1篇 靜態(tài)分析 第1章 靜態(tài)分析基礎技術 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 鏈接庫與函數(shù) 12 1.6.1 靜態(tài)鏈接、運行時鏈接與動態(tài)鏈接 12 1.6.2 使用DEPENDENCY WALKER工具探索動態(tài)鏈接函數(shù) 13 1.6.3 導入函數(shù) 14 1.6.4 導出函數(shù) 15 1.7 靜態(tài)分析技術實踐 15 1.7.1 POTENTIALKEYLOGGER.EXE:一個未加殼的可執(zhí)行文件 15 1.7.2 PACKEDPROGRAM.EXE:窮途末路 18 1.8 PE文件頭與分節(jié) 18 1.8.1 使用PEVIEW來分析PE文件 19 1.8.2 使用RESOURCE HACKER工具來查看資源節(jié) 22 1.8.3 使用其他的PE文件工具 23 1.8.4 PE文件頭概述 23 1.9 小結 24 1.10 實驗 24 第2章 在虛擬機中分析惡意代碼 27 2.1 虛擬機的結構 27 2.2 創(chuàng)建惡意代碼分析機 28 2.2.1 配置VMWARE 29 2.2.2 斷開網(wǎng)絡 30 2.2.3 創(chuàng)建主機模式網(wǎng)絡 30 2.2.4 使用多個虛擬機 30 2.3 使用惡意代碼分析機 31 2.3.1 讓惡意代碼連接互聯(lián)網(wǎng) 31 2.3.2 連接和斷開外圍設備 32 2.3.3 拍攝快照 32 2.3.4 從虛擬機傳輸文件 33 2.4 使用VMWARE進行惡意代碼分析的風險 34 2.5 記錄/重放:重復計算機運行軌跡 34 2.6 小結 35 第3章 動態(tài)分析基礎技術 36 3.1 沙箱:簡便但粗糙的方法 36 3.1.1 使用惡意代碼沙箱 36 3.1.2 沙箱的缺點 37 3.2 運行惡意代碼 38 3.3 進程監(jiān)視器 39 3.3.1 進程監(jiān)視器的顯示 40 3.3.2 進程監(jiān)視器中的過濾 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 模擬網(wǎng)絡 47 3.6.1 使用APATEDNS 47 3.6.2 使用NETCAT進行監(jiān)視 48 3.7 使用WIRESHARK進行數(shù)據(jù)包監(jiān)聽 49 3.8 使用INETSIM 51 3.9 基礎動態(tài)分析工具實踐 52 3.10 小結 55 3.11 實驗 56 第 2篇 靜態(tài)分析高級技術篇 第4章 X86反匯編速成班 60 4.1 抽象層次 60 4.2 逆向工程 62 4.3 X86體系結構 62 4.3.1 內存 63 4.3.2 指令 64 4.3.3 操作碼和字節(jié)序 64 4.3.4 操作數(shù) 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語言主函數(shù)和偏移 76 4.3.12 更多信息:INTEL X86 ARCHITECTURE MANUAL 77 4.4 小結 78 第5章 IDA PRO 79 5.1 加載一個可執(zhí)行文件 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 數(shù)據(jù)交叉引用 88 5.4 分析函數(shù) 88 5.5 使用圖形選項 89 5.6 增強反匯編 91 5.6.1 重命名位置 91 5.6.2 注釋 92 5.6.3 格式化操作數(shù) 92 5.6.4 使用命名的常量 93 5.6.5 重新定義代碼和數(shù)據(jù) 94 5.7 用插件擴展IDA 95 5.7.1 使用IDC腳本 96 5.7.2 使用IDAPYTHON 97 5.7.3 使用商業(yè)插件 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圖形化分析函數(shù) 105 6.3.2 識別嵌套的IF語句 106 6.4 識別循環(huán) 107 6.4.1 找到FOR循環(huán) 107 6.4.2 找到WHILE循環(huán) 109 6.5 理解函數(shù)調用約定 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 反匯編數(shù)組 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 文件系統(tǒng)函數(shù) 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 常用注冊表函數(shù) 131 7.2.5 練習分析注冊表操作代碼 132 7.2.6 使用.REG文件的注冊表腳本 133 7.3 網(wǎng)絡API 133 7.3.1 伯克利兼容套接字 134 7.3.2 網(wǎng)絡的服務器和客戶端 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 使用互斥量的進程間協(xié)作 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篇 動態(tài)分析高級技術篇 第8章 動態(tài)調試 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 用斷點暫停執(zhí)行 157 8.4 異常 161 8.4.1 首次和二次異常處理 162 8.4.2 常見異常 162 8.5 使用調試器修改可執(zhí)行文件 163 8.6 修改可執(zhí)行程序的實踐 163 8.7 小結 164 第9章 OLLYDBG 165 9.1 加載惡意代碼 165 9.1.1 打開一個可執(zhí)行文件 165 9.1.2 附加調試器到一個運行程序 166 9.2 OLLYDBG的接口 167 9.3 內存映射 168 9.3.1 基地址重定位 169 9.4 查看線程和堆棧 170 9.5 執(zhí)行代碼 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 協(xié)助功能 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 僵尸網(wǎng)絡 216 11.2.4 遠程控制工具與僵尸網(wǎng)絡的比較 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)系統(tǒng)二進制文件 225 11.4.3 DLL加載順序劫持 227 11.5 提權 228 11.5.1 使用SEDEBUGPRIVILEGE 228 11.6 隱藏它的蹤跡——用戶態(tài)的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章 數(shù)據(jù)加密 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 攻擊者使用自定義加密的優(yōu)勢 265 13.5 解密 265 13.5.1 自解密 265 13.5.2 手動執(zhí)行解密函數(shù) 266 13.5.3 使用通用的解密規(guī)范 267 13.6 小結 270 13.7 實驗 271 第14章 惡意代碼的網(wǎng)絡特征 273 14.1 網(wǎng)絡應對措施 273 14.1.1 在原始環(huán)境中觀察惡意代碼 273 14.1.2 惡意行為的痕跡 274 14.1.3 OPSEC=操作安全性 275 14.2 安全地調查在線攻擊者 275 14.2.1 間接性策略 275 14.2.2 獲取IP地址和域名信息 276 14.3 基于內容的網(wǎng)絡應對措施 278 14.3.1 使用SNORT進行入侵檢測 278 14.3.2 深入觀察 279 14.4 結合動態(tài)和靜態(tài)分析技術 282 14.4.1 過度分析的危險 283 14.4.2 在眾目睽睽下隱藏 283 14.4.3 理解周邊代碼 286 14.4.4 尋找網(wǎng)絡操作代碼 287 14.4.5 了解網(wǎng)絡內容的來源 288 14.4.6 硬編碼數(shù)據(jù) VS. 臨時數(shù)據(jù) 289 14.4.7 確定和利用編碼步驟 289 14.4.8 創(chuàng)建特征 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 函數(shù)指針問題 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 手動檢測數(shù)據(jù)結構 324 16.1.3 系統(tǒng)痕跡檢測 326 16.2 識別調試器的行為 327 16.2.1 INT掃描 327 16.2.2 執(zhí)行代碼校驗和檢查 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 加載可執(zhí)行文件 353 18.1.3 解析導入函數(shù)表 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 識別執(zhí)行位置 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文件導出數(shù)據(jù) 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)和函數(shù)重寫(OVERRIDING) 395 20.2 虛函數(shù)和非虛函數(shù) 396 20.2.1 虛函數(shù)表的使用 398 20.2.2 識別虛函數(shù)表 399 20.3 創(chuàng)建和銷毀對象 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位上的WINDOWS 32位 408 21.4 惡意代碼功能上的64位提示 409 21.5 小結 410 21.6 實驗 410 附錄A 常見WINDOWS函數(shù)列表 412 附錄B 流行的惡意代碼分析工具列表 424 附錄C 實驗作業(yè)參考解答 435 附錄D 致青春,基礎軟件開發(fā)的中國故事 691 附錄E SYSER操作入門 695
電話鈴聲急促響起,網(wǎng)絡管理員告訴你說公司網(wǎng)站被黑了,網(wǎng)站上的客戶敏感信息被盜了。于是你立馬開始調查分析,首先檢查了日志記錄,來確定事件涉及的主機。你用殺毒軟件對這些主機進行了掃描,檢查是否感染了惡意代碼。你的運氣還算不錯,殺毒軟件檢測到一個木馬程序,名為TROJ.snapAK。你刪除這個文件,并清理了現(xiàn)場,同時你還部署了一個入侵檢測系統(tǒng),來確認沒有其他主機被感染。最后你修補了一個你認為是被攻擊者利用來入侵主機的安全漏洞,來確保這種攻擊事件不會再次發(fā)生。
不幸的是,幾天之后網(wǎng)絡管理員再次打電話過來,告訴你說敏感信息又被竊取了。這看起來似乎是相同的攻擊,但你卻不知道該做什么。很顯然,你部署的入侵檢測系統(tǒng)特征庫失效了。因為更多的主機被感染了,而你的殺毒軟件并沒有提供足夠的保護來隔離攻擊威脅,F(xiàn)在,公司高層管理人員要求你解釋發(fā)生了什么,而你可以告訴他們的只是一個名為TROJ.snapAK的惡意代碼。你沒有針對最重要問題的答案,這讓他們認為你是一位不稱職的安全工程師。 你該如何確定TROJ.snapAK惡意代碼在做什么,從而可以讓你消除這個威脅?你如何才能寫出一個更有效的網(wǎng)絡檢測特征?你怎樣才能找出其他感染了這個惡意代碼的主機呢?你該如何確保你刪除了整個惡意代碼程序包,而不只是其中的一部分呢?你該如何回答管理層關于這個惡意代碼干了些什么的問題呢? 如果你所有能做的,只是告訴你的老板,說你需要聘請昂貴的外部咨詢顧問,因為你不能保護自己的網(wǎng)絡,這真的不是確保工作飯碗的好辦法。 幸運的是,你有著足夠的智慧,馬上啃起了這本《惡意代碼分析實戰(zhàn)》,從這本書中你將學到的技能,可以教你如何來回答這些困難的問題,并為你展示保護網(wǎng)絡免受惡意代碼侵害的方法。 什么是惡意代碼分析 惡意代碼,也稱為惡意軟件,在大多數(shù)計算機入侵事件中都扮演了重要角色。任何以某種方式來對用戶、計算機或網(wǎng)絡造成破壞的軟件,都可以被認為是惡意代碼,包括計算機病毒、木馬、蠕蟲、內核套件、勒索軟件、間諜軟件,等等。盡管各種不同的惡意代碼類型會做一些完全不同的事情(你將會在本書中看到),作為惡意代碼分析師,我們擁有一組核心的工具和技術,用來解剖分析各式各樣的惡意代碼。 惡意代碼分析是一種解剖惡意代碼的藝術,了解惡意代碼是如何工作的、如何識別它,以及如何戰(zhàn)勝或消除它。你并不是需要成為一名超級黑客,才能進行惡意代碼分析。 網(wǎng)絡上每天有著數(shù)以百萬計,甚至更多的惡意代碼,惡意代碼分析成為了任何一位從事計算機安全事件響應安全工程師的必需技能。此外,由于惡意代碼分析專業(yè)人才的短缺,熟練的惡意代碼分析師正處于強烈的人才需求之中。 這么說吧,這不是一本關于如何找到惡意代碼的書籍。我們的重點是在如何分析已經(jīng)找到的惡意代碼。我們專注于Windows操作系統(tǒng)上發(fā)現(xiàn)的惡意代碼——因為到目前為止,Windows操作系統(tǒng)還是最為常用的操作系統(tǒng)。但你所學到的技能可以為你在任何操作系統(tǒng)上分析惡意代碼提供支持。我們還將專注在可執(zhí)行文件上,因為它們是最常見的,也是你所遇到的最難以分析的一些文件。與此同時,我們選擇不討論如惡意JavaScript腳本、Java程序等其他類型的惡意代碼,相反的是,我們選擇對方法進行深入討論,用于分析更加高級的威脅,比如后門、隱蔽性惡意代碼和內核套件。 先決條件 不管你是否有惡意代碼分析的背景或經(jīng)驗,你都會從本書中受益。 第1~3章將討論基礎的惡意代碼分析技術,即使你沒有安全或編程經(jīng)驗,也可以用這些技術來進行惡意代碼分析。第4~14章則覆蓋中等級別的內容,可以讓你武裝上一些用來分析大多數(shù)惡意程序的主流工具與技能。這些章節(jié)都需要一些關于編程語言的基本知識。第15~19章,則提供最先進的技術材料,即使對資深的惡意代碼分析師來說都是有用的,因為這部分內容涵蓋了惡意代碼分析的一些戰(zhàn)術和技巧,在分析最為復雜的惡意代碼樣本時都用得上,比如那些應用了對抗反匯編、反調試技術或加殼技術的惡意代碼。 本書將教你如何以及何時使用各種惡意代碼分析技術。了解何時應該使用特定的技術與掌握技術本身一樣重要,因為在某個特定狀況下使用了錯誤的技術,可能會是在令人沮喪地浪費時間。我們不會涵蓋每一個工具,因為工具會隨時改變,而它的核心功能才是最重要的。此外,我們將在整本書中使用切合實際的惡意代碼樣本(你可以從http://www.practicalmalwareanalysis.com/或http://www.nostarch. com/malware.htm下載),來為你揭示在分析真實世界中惡意代碼時會遇到的各種狀況。 實踐動手學習 我們有著逆向工程和惡意代碼分析專業(yè)課程的豐富教學經(jīng)驗,這些經(jīng)驗已經(jīng)告訴我們,學生只有通過使用所學習的技能進行動手實踐練習時,才能真正掌握和學到這些技能。我們也發(fā)現(xiàn)了實驗作業(yè)的質量與講授的課程內容同等重要,如果沒有一個實驗作業(yè)部分,要學會如何分析惡意代碼是幾乎不可能的。 從始至終,本書中絕大多數(shù)章節(jié)最后都會給出一些實驗作業(yè),讓你來練習這一章中所講授的技術。這些實驗作業(yè)為你提供了真實惡意代碼樣本的挑戰(zhàn),旨在展示你將在真實世界中遭遇到惡意代碼中最為普遍的類型和行為。這些實驗作業(yè)旨在加強每章中所介紹的基本概念,而不會用一些無關信息來讓你無所適從。每個實驗都包括一個或多個惡意文件(可以從http://www.practicalmalware analysis.com/,或者http://www.nostarch.com/malware.htm下載),以及一些特意設計來引導你完成實驗的問題,此外也給出了對這些問題的簡短答案,以及對惡意代碼樣本的詳細分析過程。 這些實驗都模擬了真實的惡意代碼分析場景。比如,它們都以通用化的文件名字進行命名,而不會提供任何能夠洞察到惡意代碼功能的信息。對于真正環(huán)境中的惡意代碼,你也同樣在開始分析時不會有任何信息,而你需要用你所學到的技能,來收集線索,并找出惡意代碼在做些什么。 每個實驗所需的時間將取決于你的經(jīng)驗。你可以嘗試自己來完成實驗,或者沿著詳細分析過程,來了解如何在實踐中使用各種技術。 大多數(shù)章節(jié)都包含了三個實驗作業(yè)。第一個實驗通常是最簡單的,絕大多數(shù)讀者都應該能夠完成它。第二個實驗是中等難度的,大多數(shù)讀者會需要解答中的一些援助來完成。而第三個實驗是最困難的,如果沒有從參考答案取得提示,只有最勤奮和技術大拿的讀者們才能夠完成它們。 本書內容預覽 《惡意代碼分析實戰(zhàn)》以使用簡單的方法,從相對而言不那么復雜的惡意代碼中獲取信息開始,然后逐步提升難度,講解可以用來對抗最為先進惡意程序的復雜技術。以下是本書每章的內容預覽: 第0章,“惡意代碼分析技術入門”,建立起惡意代碼分析的整體過程和基礎方法學。 第1章,“靜態(tài)分析基礎技術”,傳授無須執(zhí)行就能從可執(zhí)行文件獲取信息的方法。 第2章,“在虛擬機中分析惡意代碼”,帶你一起設置虛擬機,用作運行惡意代碼的安全環(huán)境。 第3章,“動態(tài)分析基礎技術”,介紹一些通過執(zhí)行惡意程序進行分析、易于使用但非常高效的技術方法。 第4章,“x86反匯編速成班”,是對x86匯編語言的一個簡要介紹,這章為使用IDA Pro進行惡意代碼深入分析提供了基礎。 第5章,“IDA Pro”,為你顯示如何使用IDA Pro,一個最為重要的惡意代碼分析工具。我們將在全書的其余章節(jié)使用IDA Pro工具。 第6章,“識別匯編中的C代碼結構”,提供了一些C語言代碼的匯編語句案例,并教你如何理解匯編代碼的高層功能結構。 第7章,“分析惡意Windows程序”,覆蓋范圍廣泛的Windows程序特定概念,而這些是理解惡意Windows程序所必需的。 第8章,“動態(tài)調試”,解釋調試的基本知識,以及惡意代碼分析師該如何使用調試器。 第9章,“OllyDbg”,為你展示如何使用OllyDbg,惡意代碼分析師中最流行的一款調試器。 第10章,“使用WinDbg調試內核”,包括了如何使用WinDbg來分析內核模式惡意代碼和內核套件。 第11章,“惡意代碼行為”,介紹了常見的惡意代碼功能,并告訴你在分析惡意代碼時該如何識別惡意功能。 第12章,“隱蔽的惡意代碼啟動”,討論如何分析一類將自己的執(zhí)行隱藏至另一進程中的特殊惡意代碼。 第13章,“數(shù)據(jù)加密”,演示了惡意代碼如何加密數(shù)據(jù),使其更難在網(wǎng)絡流量或受害主機上被發(fā)現(xiàn)。 第14章,“惡意代碼的網(wǎng)絡特征”,教你如何通過惡意代碼分析來創(chuàng)建網(wǎng)絡檢測特征,并演示這類特征要優(yōu)于單獨從捕獲網(wǎng)絡流量中提取的特征。 第15章,“對抗反匯編”,解釋一些惡意代碼編寫者如何設計自己的惡意代碼,使得它們難以被反匯編,并說明如何識別和擊敗這些技術。 第16章,“反調試技術”,描述惡意代碼編寫者可以讓他們的代碼難以被調試的伎倆,以及克服這些障礙的方法。 第17章,“反虛擬機技術”,演示惡意代碼所使用的反虛擬機技術,這些技術會讓分析師在虛擬機中難以分析這些惡意代碼,并介紹繞過這些技術的方法。 第18章,“加殼與脫殼”,告訴讀者惡意代碼是如何使用加殼來隱藏自己真正目的的,然后提供一步一步的脫殼的技術方法。 第19章,“shellcode分析”,解釋了shellcode是什么,并展示分析惡意shellcode的一些技巧和竅門。 第20章,“C++代碼分析”,為你指明C++代碼在編譯之后存在什么樣的差異,并教授你如何對由C++編寫的惡意代碼進行分析。 第21章,“64位惡意代碼”,討論惡意代碼編寫者為何使用64位惡意代碼,以及你所需要了解的x86與x64之間的區(qū)別。 附錄A,“常見Windows函數(shù)列表”,簡要介紹了惡意代碼中普遍使用的Windows函數(shù)。 附錄B,“流行的惡意代碼分析工具列表”,列出了對于惡意代碼分析師們來說最有用的工具。 附錄C,“實驗作業(yè)參考解答”,對全書每個章節(jié)的實驗給出了參考解答。 附錄D,“致青春,基礎軟件開發(fā)的中國故事”,講述中國程序員開發(fā)Windows內核調試器Syser的幕后故事。 附錄E,“Syser操作入門”,提供Syser內核調試器的入門指南。 我們整本書的目標就是為你武裝能夠擊敗各種類型惡意代碼的分析技術。正如你看到的,我們涵蓋了大量的技術材料,以及能夠加強這些技術材料的實驗作業(yè)。當你讀完本書時,應該學到了用來分析任何惡意代碼的技能,包括快速分析常規(guī)惡意代碼樣本的基礎技術,以及解剖那些甚至是“來自外星”的神秘惡意代碼樣本所需的高超技術。 那么,讓我們開始吧!
你還可能感興趣
我要評論
|