-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

惡意代碼分析實戰

( 簡體 字)
作者:諸葛建偉,姜輝,張光凱類別:1. -> 安全 -> 網路安全 -> 駭客攻擊與入侵
譯者:
出版社:電子工業出版社惡意代碼分析實戰 3dWoo書號: 38158
詢問書籍請說出此書號!

缺書
NT售價: 890

出版日:10/1/2020
頁數:732
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121224683
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

好評襲來
一本優秀的惡意代碼速成教程。
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,哥倫比亞大學教授


警 告
這是一本關于惡意代碼的書籍,本書中描述的所有鏈接和軟件都可能是惡意的。在執行任何未知代碼和訪問不可信URL時請務必保持極度的小心。
請參考第2章,以創建用于惡意代碼分析的安全虛擬環境。
不要犯傻,保護你的計算環境安全。

關于作者
邁克爾·斯科爾斯基(Michael Sikorski)是在Mandiant公司任職的計算機安全顧問。他對惡意代碼進行逆向分析,支持公司安全事件響應調查,并為公司的聯邦政府部門客戶提供專業研究與開發的安全解決方案。邁克創建了一套惡意代碼分析的系列課程,并對不同的受眾進行培訓,包括聯邦調查局和Black Hat黑客大會參會者。在加入Mandiant公司之前,他在麻省理工學院林肯實驗室工作,在那里他對被動網絡映射技術和滲透測試進行研究。邁克也是美國國家安全局為期三年的系統和網絡跨學科研究生項目的畢業生。在美國國家安全局期間,他為逆向工程方面的研究做出了貢獻,并獲得在網絡分析方面的多項發明獎項。
安德魯·哈尼格(Andrew Honig)是美國國防部的一位信息保障專家。他在國家密碼學院
(National Cryptologic School)教授軟件分析、逆向工程和Windows系統編程的課程,并是一位CISSP安全認證專家。安德魯是VMware虛擬化產品幾個零日漏洞的發現者,并開發了一些可以檢測新型惡意代碼(包括內核套件)的創新工具。作為一位精于惡意代碼與良性軟件分析技術的專家,他已經擁有超過10年的計算機安全業界分析師的經驗。
技術編輯
斯蒂芬·勞勒(Stephen Lawler)是一家小型計算機軟件和安全咨詢公司的創始人和總裁。斯蒂芬一直在信息安全領域活躍工作了超過七年時間。主要涉及逆向工程、惡意代碼分析和安全漏洞研究。他是Mandiant惡意代碼分析團隊的一位成員,協助調查分析了影響福布斯全球100強企業的幾個高價值計算機入侵事件。在此之前,他曾在ManTech國際公司的安全與任務保證部門(SMA)工作,在那里,作為軟件確保工作的職責內容,他發現了許多零日安全漏洞和軟件利用技術。而在之前,他的生活與計算機安全沒有關聯,曾是美國海軍SMMTT計劃中聲納模擬部件的首席軟件開發工程師。
貢獻作者
尼克·哈波爾(Nick Harbour)是Mandiant公司的一位惡意代碼分析師和逆向工程業務經驗豐富的老將。他在信息安全領域有著13年的職業生涯,首先是作為國防部計算機取證實驗室的一位計算惡意代碼分析實踐機取證分析師和研究員,在過去6年中,尼克都任職于Mandiant公司,主要工作內容都集中在惡意代碼分析上。他是反逆向工程技術領域的一線研究員,編寫了好幾個加殼和代碼混淆工具,如PE-Scrambler等。他已經在Black Hat和Defcon黑客大會做過多次關于反逆向工程與反取證技術的演講。他也是Black Hat黑客大會高級惡意代碼分析課程的主要開發者與培訓師。
林賽·萊克(Lindsey Lack)是Mandiant公司一位有著超過12年信息安全工作經驗的技術總監,精于惡意代碼逆向工程、網絡防御和安全運營等技術。他曾幫助創建和運營了一個安全操作中心(SOC),并領導網絡防御方面的研究工作,開發了安全托管解決方案。他曾在國家信息安全保障研究實驗室、總統執行辦公室、Cable and Wireless公司,以及美國軍隊中任職。除了斯坦福大學計算機科學學士學位之外,林賽也獲得了美國海軍研究生院信息安全保障專業方向的碩士學位。
杰羅爾德·“杰”·史密斯(Jerrold “Jay” Smith)是Mandiant公司的首席顧問,他擅長惡意代碼逆向工程與取證分析。在這個角色上,他已經在來自于福布斯500強企業許多客戶的入侵響應事件中做出了貢獻。在加盟Mandiant公司之前,杰曾經在美國國家安全局作,但他不被允許談論這段經歷。杰持有加州大學伯克利分校的電子工程與計算機科學學士學位,以及約翰·霍普金斯大學
(JHU)的計算機科學碩士學位。


推 薦 序
沒有幾個數字安全的領域,像本書討論的惡意代碼方向這么不對稱。
2011年夏天,我參加了在內華達州拉斯維加斯召開的黑客大會,聆聽了Peiter(麥基)Zatko的主題演講。麥基在他的演講中,引入了現代軟件中本質存在的不對稱性。他解釋了他如何分析了9 000個惡意代碼的二進制文件樣本,而他的樣本集平均源代碼行數為125行(LOC)。
你可能認為麥基的樣本集中只包含了那些“簡單”或是“尋常”的惡意代碼。你也許會問,那些真正的“武器”會有多大規模呢?比如說(能夠讓你屏住呼吸的)——Stuxnet病毒?根據Larry L.Constantine的說法1,Stuxnet病毒包含了約15 000行源代碼,因此是樣本集平均125行代碼的120倍。
Stuxnet病毒是一個高度專業性和目標性的“戰爭武器”,大概可以理解為其代碼行數高于平均大小的原因。
我們稍微離開一會兒惡意代碼的世界,來看看我所使用的文本編輯器(gedit,GNOME中的文本編輯器),其中包含了295行源代碼的gedit.c,而gedit.c僅僅是其中128個源文件(以及其他3個目標)中的1個源文件。2GNOME GIT源代碼庫經過統計之后,總共有128個文件和3個目錄,共計70 484行源代碼。合法程序的源代碼數量與惡意代碼的比值超過了500?1。與一個如文本編輯器這樣相當簡單的工具相比,惡意代碼樣本從平均源碼行數上看起來似乎非常高效!麥基的惡意代碼樣本集平均125行源代碼對我來說似乎有點低,因為不同類型“惡意代碼”定義的存在。很多惡意應用程序是一類“套件”,擁有許多功能和基礎設施元素。為了看看這類惡意代碼的大致規模,我統計了Zeus網銀木馬中你應該認為是合理的“源代碼”部分(.cpp、.obj、.h等)的代碼行數,結果是253 774行。將一個像是Zeus網銀木馬這樣的惡意程序與麥基的惡意代碼樣本集平均大小相比,我們現在看到了一個新的比值,超過了2 000?1。然后麥基將惡意代碼源代碼行數與用來檢測和查殺惡意代碼的安全產品源代碼行數進行比較,他估計現在主流的安全防御產品源代碼行數大概是1000萬行左右。為了讓算術變得簡單一些,來想象一樣存在有至少1250萬行源代碼的安全防護產品,這樣就使得防御性軟件代碼與進攻性軟件代碼的比值進入了100 000?1的級別。換句話說,對于每1行源代碼的進攻火力,防御者需要寫出10萬行作為防御堡壘的源代碼。
1 http://www.informit.com/articles/article.aspx?p=1686289
2 http://git.gnome.org/browse/gedit/tree/gedit?id=3.3.1
麥基也將惡意代碼源代碼行數與惡意代碼試圖顛覆的操作系統源代碼行數進行了比較。分析師估計Windows XP操作系統的源代碼行數為4 500萬行。而沒人知道Windows 7有多少行源代碼。麥基認為一個現代操作系統大概會有15 000萬行源代碼,想必他指的是Windows的最新版本。同樣讓我們保守估計到12 500萬行,以簡化我們的計算,這樣我們就得出了一個100萬比1的比值,來估計目標操作系統的大小規模與濫用操作系統的惡意武器大小規模之間的比例。
讓我們停下來,概括一下我們已經獲得的源代碼行數計數分析結果。
● 120:1:Stuxnet病毒與平均惡意代碼大小規模的比值。
● 500:1:簡單的文本編輯器與平均惡意代碼大小規模的比值。
● 2 000:1:惡意代碼套件與平均惡意代碼大小規模的比值。
● 100 000:1:防守工具軟件與平均惡意代碼大小規模的比值。
● 1 000 000:1:目標操作系統與平均惡意代碼大小規模的比值。
從一位防御者的角度來看,防御性工具和目標操作系統和平均惡意代碼大小規模的比值,是多么地讓人心情沮喪。甚至將平均惡意代碼大小規模換成惡意代碼套件的大小規模,也不會很好地改善防御者所面臨的境遇!它看起來像是我們的防御者(以及他們的供應商)花費了很多努力生產出成千上萬的源代碼,而最終只能看到它們被裝備著少得多源代碼的入侵者們無情戲弄。
那防御者應該怎么做呢?答案就是不要被那些火力強大的領跑者牽著鼻子走,而將一個“障礙”重新定義為“機會”!忘記安全防御工具和目標操作系統的大小規模——那可不是你可以左右的東西。回到你可以歡呼雀躍的事實上來,因為惡意代碼樣本的規模還是比較小的(相對來說)。想象一下如果你試圖去了解安全防御工具在源代碼級別上是如何工作的,那里便有1 250萬行源代碼等著你來分析,這無疑將是一項非常艱巨的任務,盡管一些研究人員也將這種不可思議的項目分配給自己。作為一個令人難以置信的例子,請閱讀由Tavis Ormandy 撰寫的“Sophail:對Sophos反病毒軟件的批判性分析”3,同樣也在2011年的Black Hat拉斯維加斯黑客大會上進行了展示。這種龐大規模的分析是一種另類,而并不是常人可以選擇的準則。不要試圖去擔心數以百萬行計的源代碼(或者是成千上萬行),關注那些大概一千行甚至更少的源代碼——這也是目前世界上大多數惡意代碼主要的組成部分。作為一名防御者,你對惡意代碼進行分析的主要目標是:確定它做了什么、它在你的環境中是如何表現的,以及我們應該如何處理它。當處理這些合理規模的樣本,并積累合適的技能之后,你便有機會來回答這些問題,從而降低企業的安全風險。
如果說惡意代碼編寫者隨時會向你提供此類規模的樣本,而你正在閱讀的這本書會為你提供所需要的技能。《惡意代碼分析實戰》是一本我認為每一個惡意代碼分析師都應該作為指導手冊而珍藏的書籍。如果你是一個初學者,你需要仔細研讀技術介紹,以及動手實踐每個實驗作業,來進入到逆向工程的世界。而如果你是一位中等水平的分析師,本書會帶著你提升到一個新的水平。如果你是一個資深的安全工程師,你也會發現那些額外的寶石,來推動你達到更高的級別——你就能夠在被你所指導的一些新手問到問題時,告訴他們說:“去讀讀這本優秀的指南”。
本書實際上是一本二合一的書籍——首先,它是一本教材,指導讀者如何分析現代的惡意代碼。
你可能只是以這個理由購買了本書,并已經從本書的技術指導中受益匪淺。然而,作者們又加倍努力,基本上是又寫了一本書,其中包含了大量的實驗練習、簡短答案,以及詳細分析過程,呈現在書籍中每章的后面與附錄C中。作者們同時編寫了所有用作例子的惡意代碼樣本,確保了一個既豐富又安全的學習環境。
因此,當你作為數字領域防御者,面對明顯的不對稱局面時,請不要絕望,相反的,你應該對惡意代碼目前采用的技術形式表達出樂觀態度。有了像《惡意代碼分析實戰》這樣優秀的指導書籍之后,你就可以擁有所需的技能,來更好地檢測與應對你的企業或者客戶所面對的入侵事件。作者們都是這個領域內的技術專家,你會發現很多從工作一線提取的建議,而不是從一個孤立研究實驗室中得到的一些理論。接下來你可以沉浸在本書的閱讀中,獲得關于惡意代碼每一個細節的知識,
并提升你的逆向工程技巧,通過將攻擊者的黑暗藝術曝光在知識的陽光下,讓他們嘗到失敗,付出代價。
Richard·Bejtlich(@ taosecurity)
Mandiant公司首席安全官,TaoSecurity創始人
馬納薩斯公園,弗吉尼亞州
2012年1月2日
3 http://dl.packetstormsecurity.net/papers/virus/Sophail.pdf

致 謝
感謝林賽·萊克(Lindsey Lack)、尼克·哈波爾(Nick Harbour)、杰羅爾德·“杰”·史密斯(Jerrold “Jay” Smith)在他們各自專業特長領域為本書貢獻的章節。
感謝我們的技術編輯——斯蒂芬·勞勒(Stephen Lawler),他單槍匹馬地回顧了超過50個實驗,以及我們撰寫的所有章節。
謝謝Seth Summersett、William Ballenthin和Stephen Davis為本書貢獻的代碼。
特別要感謝在No Starch出版社工作的每個人為本書做出的努力。艾利森(Alison)、比爾(Bill)、特拉維斯(Travis)和泰勒(Tyler):我們很高興與你們以及No Starch出版社的其他人一起工作。
個人致謝
邁克爾:我將本書獻給Rebecca—如果沒有這位在我生命中這么支持我的愛人,我不可能取得現在的成就。
安迪魯:我想感謝Molly、Claire、Eloise,你們和我一起組成了最好的家庭。


前 言
電話鈴聲急促響起,網絡管理員告訴你說公司網站被黑了,網站上的客戶敏感信息被盜了。于是你立馬開始調查分析,首先檢查了日志記錄,來確定事件涉及的主機。你用殺毒軟件對這些主機進行了掃描,檢查是否感染了惡意代碼。你的運氣還算不錯,殺毒軟件檢測到一個木馬程序,名為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.practicalmalwareanalysis.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內核調試器的入門指南。
我們整本書的目標就是為你武裝能夠擊敗各種類型惡意代碼的分析技術。正如你看到的,我們涵蓋了大量的技術材料,以及能夠加強這些技術材料的實驗作業。當你讀完本書時,應該學到了用來分析任何惡意代碼的技能,包括快速分析常規惡意代碼樣本的基礎技術,以及解剖那些甚至是“來自外星”的神秘惡意代碼樣本所需的高超技術。
那么,讓我們開始吧!
內容簡介:

本書是一本內容全面的惡意代碼分析技術指南,其內容兼顧理論,重在實踐,從不同方面為讀者講解惡意代碼分析的實用技術方法。
本書分為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 配置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 使用進程瀏覽器(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 使用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.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 Manual77
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 用插件擴展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 用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 cdecl110
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 API126
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 Regedit131
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.3 WinINet API 135
7.4 跟蹤惡意代碼的運行136
7.4.1 DLL136
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 章 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 加載DLL176
9.8 跟蹤177
9.8.1 標準回溯跟蹤177
9.8.2 堆棧調用跟蹤178
9.8.3 運行跟蹤178
9.8.4 跟蹤Poison Ivy178
9.9 異常處理179
9.10 修補180
9.11 分析shellcode181
9.12 協助功能182
9.13 插件182
9.13.1 OllyDump183
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.6 Rootkit204
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 反向shell215
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 使用SeDebugPrivilege228
11.6 隱藏它的蹤跡——用戶態的Rootkit229
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 XOR249
13.2.3 其他一些簡單的加密策略254
13.2.4 Base64255
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 API322
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 使用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.1 UPX 364
18.6.2 PECompact 365
18.6.3 ASPack365
18.6.4 Petite 365
18.6.5 WinUpack 366
18.6.6 Themida367
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.dll378
19.4.2 解析PE 文件導出數據380
19.4.3 使用散列過的導出符號名382
19.5 一個完整的Hello World 例子383
19.6 shellcode 編碼385
19.7 空指令雪橇387
19.8 找到shellcode387
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 位上的Windows 32 位408
21.4 惡意代碼功能上的64位提示409
21.5 小結410
21.6 實驗410
附錄A 常見Windows 函數列表 412
附錄B 流行的惡意代碼分析工具列表424
附錄C 實驗作業參考解答435
附錄D 致青春,基礎軟件開發的中國故事 691
附錄E Syser 操作入門 695
序: