




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Win32平臺(tái)下的PE文件病毒的研究及實(shí)現(xiàn)摘要在計(jì)算機(jī)病毒技術(shù)與反病毒技術(shù)激烈斗爭(zhēng)的今天,病毒技術(shù)的復(fù)雜多變,發(fā)展迅速給計(jì)算機(jī)用戶(hù)同時(shí)也給反病毒技術(shù)帶了巨大的挑戰(zhàn)。本文詳細(xì)剖析了時(shí)下較流行的Windows 32位操作系統(tǒng)平臺(tái)下最為常見(jiàn)的PE病毒機(jī)制,配合以代碼實(shí)現(xiàn)的方式,從一個(gè)病毒編寫(xiě)者的角度展示病毒基本原理,并以此為契機(jī)從而做到更好的防范病毒。第一部分分別介紹了Windows病毒的基本原理、分類(lèi),并著重介紹PE病毒基本原理,基本機(jī)制;第二部分則根據(jù)PE病毒原理用編寫(xiě)實(shí)際代碼的方式實(shí)現(xiàn)一個(gè)感染正常EXE文件(如WinRAR.exe)、關(guān)機(jī)并通過(guò)U盤(pán)傳播等功能的病毒程序;第三部分則通過(guò)功能測(cè)試(
2、白盒測(cè)試)、殺毒軟件測(cè)試,總結(jié)并展望病毒技術(shù);最后通過(guò)此次課題的研究成果,結(jié)合當(dāng)今主流反病毒技術(shù),總結(jié)Windows PE病毒防范技術(shù)。關(guān)鍵字:Windows病毒;PE病毒;反病毒技術(shù);PE文件格式;PE病毒實(shí)現(xiàn)The Research and Implementation of PE Documentary Virus based on Win32 PlatformAbstractNowadays, computer virus technology is growing rapidly as fast as development speed of anti-virus technolog
3、y. Computer virus technology is becoming complex and changing rapidly. It brings enormous challenges to anti-virus technology. This paper analyzes the most common PE virus mechanism base on Win32 platform that is explained by the way of code realization. The article also demonstrates the basic mecha
4、nism of virus from the perspective of the virus creator and gives the suggestion to achieve a better anti-virus result. At the beginning, the article introduces the basic knowledge of Windows virus and classification. This part highlights the basic tenets of PE virus and basic mechanism. The second
5、part compiles the code realization according to the principles. It can infect an EXE program (e.g. WinRAR.exe) and spread by u disk. The third part shows the result of passing the test (white box testing) and makes the summary and forecast. The last part summarizes the Windows PE anti-virus technolo
6、gy through the research on this topic with mainstream anti-virus technology.Key Words: Windows virus; PE virus; anti-virus technology; PE format; implementation of PE virus program目錄 論文總頁(yè)數(shù)32頁(yè)1引言12計(jì)算機(jī)病毒概述12.1計(jì)算機(jī)病毒的定義12.2計(jì)算機(jī)病毒的基本性質(zhì)與本質(zhì)23 Windows病毒43.1Windows病毒分類(lèi)43.1.1PE病毒43.1.2腳本病毒43.1.3宏病毒43.2 PE病毒原理4
7、3.2.1 PE文件格式43.2.2檢驗(yàn)PE文件的有效性73.2.3病毒重定位83.2.4獲取API函數(shù)地址93.2.5文件操作124 Windows PE文件病毒的研究及實(shí)現(xiàn)144.1病毒程序?qū)崿F(xiàn)144.1.1病毒程序編寫(xiě)背景144.1.2病毒程序基本功能介紹154.1.3病毒程序編寫(xiě)環(huán)境154.1.4病毒程序簡(jiǎn)要流程框圖154.1.5病毒程序主模塊-JERRY.ASM164.1.6病毒程序搜索API函數(shù)模塊-SearchAPI.ASM164.1.7病毒程序感染EXE文件模塊-Modify_PE.ASM174.1.8病毒程序感染及U盤(pán)傳播模塊-EffectU.ASM204.1.9病毒程序發(fā)作
8、模塊-Burst.ASM214.2病毒程序測(cè)試224.2.1病毒程序測(cè)試環(huán)境224.2.2病毒程序測(cè)試過(guò)程234.2.2病毒程序測(cè)試結(jié)果244.3病毒程序總結(jié)分析284.3.1病毒傳播能力分析284.3.2病毒潛伏能力分析284.3.3病毒破壞能力分析284.3.4病毒程序自我總結(jié)284.3.5病毒程序完善方向29結(jié) 論29參考文獻(xiàn)29致 謝30聲 明311引言隨著計(jì)算機(jī)和互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,計(jì)算機(jī)正走進(jìn)社會(huì)的各個(gè)領(lǐng)域,走進(jìn)千家萬(wàn)戶(hù),計(jì)算機(jī)系統(tǒng)已經(jīng)能夠?qū)崿F(xiàn)生活、管理、辦公的自動(dòng)化,成為人類(lèi)社會(huì)不可或缺的一部分。然而,計(jì)算機(jī)系統(tǒng)并不安全,其不安的因素有計(jì)算機(jī)系統(tǒng)自身的、自然不可抗拒的,也有人為
9、的。計(jì)算機(jī)病毒就是最不安全因素之一。計(jì)算機(jī)病毒是計(jì)算機(jī)技術(shù)和以計(jì)算機(jī)為核心的社會(huì)信息化進(jìn)程發(fā)展到一定階段的必然產(chǎn)物,是計(jì)算機(jī)犯罪的一種的新的衍化形式。自從第一例計(jì)算機(jī)病毒出現(xiàn)以來(lái),隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,計(jì)算機(jī)病毒也日益猖獗,成為了計(jì)算機(jī)網(wǎng)絡(luò)安全、信息安全最大公害。各種計(jì)算機(jī)病毒的產(chǎn)生和蔓延,已經(jīng)給計(jì)算機(jī)系統(tǒng)安全造成了巨大的威脅和損害,其造成的計(jì)算機(jī)資源的損失和破壞,不但會(huì)造成資源和財(cái)富的巨大浪費(fèi),而且有可能造成社會(huì)性的災(zāi)難,正因?yàn)槿绱?,我們就?yīng)堅(jiān)決地走到反病毒的行列中來(lái)。我們研究病毒,最終目的是為了消滅病毒。大多數(shù)計(jì)算機(jī)用戶(hù)對(duì)病毒不了解才會(huì)造成病毒的橫行,對(duì)于精通病毒原理的人來(lái)說(shuō)
10、,病毒是毫無(wú)攻擊力的。我們要做到徹底地消滅病毒,那么就不能全依靠少數(shù)編寫(xiě)殺毒軟件的人,而是要做到了解病毒基本原理,了解病毒只是為了認(rèn)識(shí)病毒,消除對(duì)病毒的恐懼心理,最終達(dá)到能夠防毒、清除病毒的目的。所以對(duì)于病毒基本原理的學(xué)習(xí),對(duì)計(jì)算機(jī)病毒編寫(xiě)的學(xué)習(xí)是非常有意義的。Windows PE病毒是所有病毒中數(shù)量極多、破壞性極大的、技巧性最強(qiáng)的一類(lèi)病毒。譬如CIH、FunLove、中國(guó)黑客等。本文就以此類(lèi)病毒為突破口,從基本原理到病毒代碼的編寫(xiě)測(cè)試,完成一個(gè)基本的Windows PE病毒模型,從而更加了解PE病毒,更好的防治病毒。本文第一部分介紹計(jì)算機(jī)基本知識(shí);第二部分著重介紹計(jì)算機(jī)病毒中的Windows
11、病毒,從內(nèi)核級(jí)學(xué)習(xí)PE文件格式,PE病毒原理;第三部分結(jié)合第二部分的準(zhǔn)備知識(shí),分別介紹每個(gè)代碼模塊功能及實(shí)現(xiàn);第四部分則介紹了針對(duì)PE病毒的一些解決方案;最后一部分對(duì)計(jì)算機(jī)的防治做了展望。2計(jì)算機(jī)病毒概述2.1計(jì)算機(jī)病毒的定義計(jì)算機(jī)病毒(Computer Virus)是一種人為的制造的、能夠進(jìn)行自我復(fù)制的、具有對(duì)計(jì)算機(jī)資源破壞作用的一組程序或指令的集合。這是計(jì)算機(jī)病毒的廣義定義。類(lèi)似生物病毒,它能把自身附著在各種類(lèi)型的文件上或寄生在存儲(chǔ)媒介中,能對(duì)付計(jì)算機(jī)系統(tǒng)和網(wǎng)絡(luò)進(jìn)行各種破壞,同時(shí)有獨(dú)特的復(fù)制能力和傳染性,能夠自我復(fù)制主動(dòng)傳染;另一方面,當(dāng)文件被復(fù)制或在網(wǎng)絡(luò)中從一個(gè)用戶(hù)送到另一個(gè)用戶(hù)時(shí)被動(dòng)傳
12、染,他們就隨同文件一起蔓延開(kāi)來(lái)。在1994年2月18日公布的中華人民共和國(guó)計(jì)算機(jī)信息系統(tǒng)安全保護(hù)條例中,計(jì)算機(jī)病毒被定義為:“計(jì)算機(jī)病毒是指編制或者在計(jì)算機(jī)程序中插入的破壞計(jì)算機(jī)功能或者破壞數(shù)據(jù),影響計(jì)算機(jī)使用并且能夠字我復(fù)制的一組計(jì)算機(jī)指令或者程序代碼”。這一定義具有一定的法律性和權(quán)威性。是對(duì)計(jì)算機(jī)病毒的狹義定義。2.2計(jì)算機(jī)病毒的基本性質(zhì)與本質(zhì)計(jì)算機(jī)病毒種類(lèi)繁多,特征各異,其中主要的有:自我復(fù)制能力;很強(qiáng)的感染性;一定的潛伏性;特定的觸發(fā)性;很大的破壞性。1計(jì)算機(jī)病毒的可執(zhí)行性(程序性)程序性是計(jì)算機(jī)病毒的基本特征,也是計(jì)算機(jī)病毒最基本的一種表現(xiàn)形式。程序性也就決定了計(jì)算機(jī)病毒的可防治性、
13、可清除性。計(jì)算機(jī)病毒程序與其他合法程序一樣,是一段可執(zhí)行的程序,但他不是一個(gè)完整的程序,而是寄生在其他可執(zhí)行程序上的一段程序,因此他享有一切可執(zhí)行程序所能得到的權(quán)力。計(jì)算機(jī)的控制權(quán)是關(guān)鍵問(wèn)題。反病毒技術(shù)就是要提前取得計(jì)算機(jī)系統(tǒng)的控制權(quán),識(shí)別出計(jì)算機(jī)病毒的代碼和行為,阻止起取得系統(tǒng)控制權(quán),并及時(shí)將其清除。2計(jì)算機(jī)病毒的傳染性病毒一次源于生物學(xué),傳染也相應(yīng)成了計(jì)算機(jī)病毒最基本的特性。計(jì)算機(jī)病毒的傳染性是指病毒具有把自身復(fù)制到其他程序的能力。在生物界,病毒通過(guò)傳染從一個(gè)生物體擴(kuò)散到另一個(gè)生物體。在適當(dāng)?shù)臈l件下,他可得到大量的繁殖,并使被感染的生物體表現(xiàn)出病癥甚至死亡。同樣,計(jì)算機(jī)病毒也會(huì)通過(guò)各種渠道
14、通過(guò)已被感染的計(jì)算機(jī)擴(kuò)散到未被感染的計(jì)算機(jī),在某些情況下造成被感染的計(jì)算機(jī)工作失常甚至癱瘓。是否具有傳染性,是判斷一個(gè)程序是否為計(jì)算機(jī)病毒的首要條件。傳染性也決定了計(jì)算機(jī)病毒的可判斷性。3計(jì)算機(jī)病毒的非授權(quán)性計(jì)算機(jī)病毒未經(jīng)授權(quán)而執(zhí)行。正常的程序是由用戶(hù)調(diào)用,再由系統(tǒng)分配資源,完成用戶(hù)交給的任務(wù),其目的對(duì)用戶(hù)是可見(jiàn)的、透明的。而病毒隱藏在正常程序中,竊取正常程序的系統(tǒng)控制權(quán),其目的對(duì)用戶(hù)是未知的,是未經(jīng)用戶(hù)允許的。4計(jì)算機(jī)病毒的隱蔽性計(jì)算機(jī)病毒通常附在正常程序中或磁盤(pán)較隱蔽的地方,也有個(gè)別的以隱含文件的形式出現(xiàn),目的是不讓用戶(hù)發(fā)現(xiàn)他的存在。如果不經(jīng)過(guò)代碼分析,病毒程序與正常程序是不容易區(qū)分開(kāi)來(lái)的
15、,而一旦病毒發(fā)作表現(xiàn)出來(lái),往往已經(jīng)給計(jì)算機(jī)系統(tǒng)造成了不同程度破壞。正是由于隱蔽性,計(jì)算機(jī)病毒得以在用戶(hù)沒(méi)有察覺(jué)的情況下擴(kuò)散并游離與世界上的百萬(wàn)臺(tái)計(jì)算機(jī)中。計(jì)算機(jī)病毒的隱蔽性通常表現(xiàn)在以下兩個(gè)方面: 傳染的隱蔽性。大多數(shù)病毒的代碼設(shè)計(jì)得非常精巧而又短小,一般只有幾百字節(jié)到幾K,而PC對(duì)文件的存取速度非???,所以病毒會(huì)在轉(zhuǎn)瞬之間便可將這些病毒程序附著在正常文件之上,一般不具有外部表象,不易被人發(fā)現(xiàn)。 病毒程序存在的隱蔽性。病毒程序通常以隱蔽的方式存在,且被病毒感染的計(jì)算機(jī)在多數(shù)情況下仍能維持起部分功能,不回因?yàn)楦腥旧喜《径拐_(tái)計(jì)算機(jī)不能使用。計(jì)算機(jī)病毒設(shè)計(jì)的精巧之處也在這里。5計(jì)算機(jī)病毒的潛伏性
16、一個(gè)編制精巧的計(jì)算機(jī)病毒程序,進(jìn)入系統(tǒng)之后一般不會(huì)馬上發(fā)作。潛伏性越好,其在系統(tǒng)中的存在時(shí)間就會(huì)越長(zhǎng),病毒的傳染范圍就會(huì)越大。潛伏性通常表現(xiàn)以下兩個(gè)方面: 病毒程序不用專(zhuān)門(mén)的檢測(cè)程序是檢查不出來(lái)的,一旦得到運(yùn)行機(jī)會(huì)就繁殖、擴(kuò)散,繼續(xù)為害。 計(jì)算機(jī)病毒中往往有一種觸發(fā)機(jī)制,不滿(mǎn)足觸發(fā)條件時(shí),計(jì)算機(jī)病毒除了傳染外不做其他的破壞,只有當(dāng)觸發(fā)條件滿(mǎn)足時(shí),才會(huì)激活病毒的發(fā)作模塊而出現(xiàn)中毒的癥狀。6計(jì)算機(jī)病毒的可觸發(fā)性計(jì)算機(jī)病毒因某個(gè)事件或數(shù)值的出現(xiàn),誘使病毒實(shí)施感染或進(jìn)行攻擊的特性,稱(chēng)為可觸發(fā)性。為了隱蔽自己,病毒必須潛伏,少做動(dòng)作。如果完全不做動(dòng)作,病毒既不能感染也不能進(jìn)行破壞,失去殺傷力。病毒既要隱
17、蔽又要維持殺傷力,就必須具有可觸發(fā)性。病毒的觸發(fā)機(jī)制是用來(lái)控制感染和破壞動(dòng)作的頻率的。病毒的觸發(fā)機(jī)制越多,則傳染性越強(qiáng)。7計(jì)算機(jī)病毒的破壞性所有的計(jì)算機(jī)病毒都是一種可執(zhí)行的程序,而這一可執(zhí)行程序又必然要運(yùn)行,因此,所有的計(jì)算機(jī)病毒都對(duì)計(jì)算機(jī)系統(tǒng)造成不同程度的影響,輕這降低計(jì)算機(jī)系統(tǒng)工作效率、占用系統(tǒng)資源,重者導(dǎo)致數(shù)據(jù)丟失、系統(tǒng)崩潰。計(jì)算機(jī)病毒的破壞性,決定了病毒的危害性。8計(jì)算機(jī)病毒的寄生性病毒程序嵌入到宿主程序中,依賴(lài)與宿主程序的執(zhí)行而生存,這就是計(jì)算機(jī)病毒的寄生性。病毒程序在侵入到宿主程序中后,一般對(duì)宿主程序進(jìn)行一定的修改,宿主程序一旦執(zhí)行,病毒程序就被激活,從而可以進(jìn)行自我復(fù)制和繁衍。9
18、、計(jì)算機(jī)病毒的誘惑欺騙性某些病毒常以某種特殊的表現(xiàn)方式,引誘、欺騙用戶(hù)不自覺(jué)的觸發(fā)、激活病毒,從而實(shí)施起感染、破壞功能。如情書(shū)變種病毒之一VBS.LoveLetter.F,傳播自身的電子郵件附件名為“Virus Warning.jpg.vbs”,主題為“Dangerous virus warning”,其內(nèi)容是“There is a dangerous virus circulating.Please click attached picture to view it and learn to avoid it”。3 Windows病毒3.1Windows病毒分類(lèi)3.1.1PE病毒W(wǎng)in32可
19、執(zhí)行文件,如*.exe、*.dll、*.ocx等,都是PE格式文件。感染PE格式文件的Win32病毒,簡(jiǎn)稱(chēng)PE病毒。在絕大多數(shù)病毒愛(ài)好者中,真正的病毒技術(shù)在PE病毒中才會(huì)得到真正的體現(xiàn)。PE病毒同時(shí)也是所有病毒中數(shù)量極多、破壞性極大、技巧性最強(qiáng)的一類(lèi)病毒。3.1.2腳本病毒腳本(Script)病毒是以腳本程序語(yǔ)言(如VB Script、JavaScript、PHP)編寫(xiě)而成的病毒。腳本病毒編寫(xiě)比較簡(jiǎn)單,并且編寫(xiě)的病毒具有傳播快、破壞力大等特點(diǎn)。例如,愛(ài)蟲(chóng)病毒、新歡樂(lè)時(shí)光病毒等。就都是用VBS(VB Script)編寫(xiě)的,被稱(chēng)做VBS腳本病毒。但腳本病毒必須透過(guò)Microsoft的WSH(Win
20、dows Scripting Host)才能夠啟動(dòng)執(zhí)行以及感染其他文件。3.1.3宏病毒宏病毒是單獨(dú)的一類(lèi)病毒,因?yàn)樗c傳統(tǒng)的病毒有很大的不同,他不感染.EXE、.COM等可執(zhí)行文件,而是將病毒代碼以“宏”的形式潛伏在Microsoft Office文檔中,當(dāng)采用Office軟件打開(kāi)這些染毒文件時(shí),這些代碼就會(huì)被執(zhí)行并產(chǎn)生破壞作用。由于“宏”是使用VBA(Visual Basic For Application)這樣的高級(jí)代碼寫(xiě)的,因此其編寫(xiě)過(guò)程相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,而功能又十分強(qiáng)大。宏病毒的產(chǎn)生標(biāo)志著制造病毒不再是專(zhuān)業(yè)程序員的專(zhuān)利,任何人只要掌握一些基本的“宏”編寫(xiě)技巧即可編寫(xiě)出破壞力極大的宏病
21、毒。隨著微軟Office軟件在全世界的不斷普及,宏病毒成為傳播最廣泛、危害最大的一類(lèi)病毒。3.2 PE病毒原理3.2.1 PE文件格式目前主流的操作系統(tǒng)是Windows操作系統(tǒng),病毒要在Windows操作系統(tǒng)上進(jìn)行傳播和破壞,其病毒文件也必須遵循PE文件的格式結(jié)構(gòu),。目前流行的計(jì)算機(jī)病毒以蠕蟲(chóng)、木馬等類(lèi)型病毒為住,這一類(lèi)的病毒文件也大都是PE格式的文件,因此,我們?cè)谶@一節(jié)會(huì)詳細(xì)介紹PE格式文件,這是分析病毒程序的基礎(chǔ)。什么是PE文件格式PE即Portable Executable,可移植、可執(zhí)行,他是Win32可執(zhí)行文件的標(biāo)準(zhǔn)格式。他的一些特性繼承自UNIX的Coff(Commo
22、n object file format)文件格式。Portable Executable就意味著此文件是跨Win32平臺(tái)的,即使Windows運(yùn)行在非Intel的CPU上,任何Win32平臺(tái)的PE裝載器都能識(shí)別和使用該文件格式。因而,研究學(xué)習(xí)PE文件格式,除了有助于了解病毒的傳染原理之外,還給我們提供了洞悉Windows結(jié)構(gòu)的良機(jī)。PE文件格式詳細(xì)剖析PE文件的構(gòu)成如下:表1 PE文件格式PE文件結(jié)構(gòu)的總體層次分布DOS MZ HeaderDOS StubPE HeaderSection TableSection 1Section 2Section n1DOS小程序PE文件以一
23、個(gè)簡(jiǎn)單的DOS MZ header開(kāi)始。有了它,一旦程序在DOS下執(zhí)行時(shí),就能被DOS識(shí)別出這是否是有效的執(zhí)行體,然后緊隨MZ Header之后的是DOS Stub(DOS 插樁程序)實(shí)際上就是一個(gè)在DOS環(huán)境下簡(jiǎn)單調(diào)用21h中斷顯示“This program can not be run in DOS mode”或者“This program must be run under Win32”之類(lèi)信息的小程序。2NT映像頭緊接著DOS Stub的是PE Header。PE Header是PE相關(guān)結(jié)構(gòu)IMAGE_NI_HEADERS(NT映像頭)的簡(jiǎn)稱(chēng),他存放了PE整個(gè)文件信息分布的重要字段。N
24、T映像頭包含了許多PE裝載器用到的重要域。NT映像頭的結(jié)構(gòu)定義如下:IMAGE_NT_HEADER STRUCTSignature dd ?FileHeader IMAGE_FILE_HEADER <>OptionalHeader IMAGE_OPTIONAL_HEADER32 <>IMAGE_NT_HEADER ENDS而這三部分分別有著各自的數(shù)據(jù)結(jié)構(gòu)(參見(jiàn)Windows.inc文件)。 Signature dd ?字串“50450000”標(biāo)志著NT映像頭的開(kāi)始,也是PE文件中與Windows有關(guān)內(nèi)容的開(kāi)始。他的位置是在DOS程序頭中的偏移3CH處的4個(gè)字節(jié)給出的。
25、FileHeader IMAGE_FILE_HEADER STRUCT00H Machine 機(jī)器類(lèi)型02H NumberOfSection 文件中節(jié)的個(gè)數(shù)04H TimeDataStamp 生成該文件的時(shí)間08HPointerToSymbolTable COFF符號(hào)表的偏移0CH NumberOfSymbols 符號(hào)數(shù)目10H SizeOfOptionalHeader 可選頭的大小12H Characteristics 標(biāo)記(exe或dll)IMAGE_FILE_HEADER ENDS其中第2項(xiàng) NumberOfSection 和第6項(xiàng)SizeOfOptionalHeader對(duì)于學(xué)習(xí)病毒是需
26、要重點(diǎn)關(guān)注的。 OptionalHeader 由于OptionalHeader數(shù)據(jù)定義較多,現(xiàn)只列出與學(xué)習(xí)病毒較重要的一些域。IMAGE_OPTIONAL_HEADER32 STRUCT04H SizeOfCode 代碼段的總尺寸10H AddressOfEntryPoint 程序開(kāi)始執(zhí)行位置14H BaseOfCode 代碼節(jié)開(kāi)始的位置1CH ImageBase 可執(zhí)行文件的默認(rèn)裝入的內(nèi)存地址20H SectionAlignment 可執(zhí)行文件裝入內(nèi)存時(shí)節(jié)的對(duì)齊數(shù)字24H FileAlignment 文件中節(jié)的對(duì)齊數(shù)字,一般是一個(gè)扇區(qū)38H SizeOfImage 裝入內(nèi)存后映像的總尺寸3C
27、HSizeOfHeaders NT映像頭+節(jié)表的大小40HCheckSum 校驗(yàn)和44HSubsystem 可執(zhí)行文件的子系統(tǒng)5CH NumberRvaAndSize 數(shù)據(jù)目錄的項(xiàng)數(shù),一般是1660HDataDirectory 數(shù)據(jù)目錄IMAGE_OPTIONAL_HEADER32 ENDS3節(jié)表緊接著NT映像頭之后的是節(jié)表。節(jié)表實(shí)際上是一個(gè)結(jié)構(gòu)數(shù)組,其中每個(gè)結(jié)構(gòu)包含了該節(jié)的具體信息(每個(gè)結(jié)構(gòu)占用28H)。該成員的數(shù)目由映像文件頭(IMAGE_FILE_HEADER)結(jié)構(gòu)中NumberOfSection域決定的。節(jié)表的結(jié)構(gòu)定義如下:IMAGE_SECTION_HEADER STRUCT00HN
28、ame 節(jié)名08HPhyscicalAddress OBJ文件用做表示本節(jié)的物理地址VirtualSize EXE文件中表示節(jié)的實(shí)際字節(jié)數(shù)0CHVirtualAddress 本節(jié)的相對(duì)虛擬地址10HSizeOfRawData 本節(jié)的經(jīng)過(guò)文件對(duì)齊后的尺寸14HPointerToRawData 本節(jié)原始數(shù)據(jù)在文件中的位置18HPointerToRelocation OBJ中表示該節(jié)重定位信息的偏移1CHPointerToLinenumbers 行號(hào)偏移20HNumberOfRelocations 本節(jié)要重定位的數(shù)目22HNumberOfLinenumbers 本節(jié)在行號(hào)中的行號(hào)數(shù)目24HChara
29、cteristics 節(jié)屬性IMAGE_SECTION_HEADER ENDS其中第2項(xiàng) VirtualSize 、第3項(xiàng)VirtualAddress、第4項(xiàng)SizeOfRawData、第5項(xiàng)PointerToRawData、第10項(xiàng)Characteristics需要重點(diǎn)關(guān)注的。3.2.2檢驗(yàn)PE文件的有效性檢驗(yàn)PE文件的有效性對(duì)于有效地感染文件起著非常大的作用,因?yàn)橹挥性谇宄诵枰桓腥镜牟《疚募怯行У腜E文件時(shí),才可以感染并且達(dá)到效果。如何才能校驗(yàn)指定文件是否為一有效PE文件呢? 這個(gè)問(wèn)題很難回答,完全取決于想要的精準(zhǔn)程度。可以檢驗(yàn)PE文件格式里的各個(gè)數(shù)據(jù)結(jié)構(gòu),或者僅校驗(yàn)一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)
30、。大多數(shù)情況下,沒(méi)有必要校驗(yàn)文件里的每一個(gè)數(shù)據(jù)結(jié)構(gòu),只要一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有效,我們就認(rèn)為是有效的PE文件了。1校驗(yàn)程序流程 首先檢驗(yàn)文件頭部第一個(gè)字的值是否等于 IMAGE_DOS_SIGNATURE (5A4Dh,即MZ),是則 DOS MZ Header 有效。 一旦證明文件的 DOS MZ Header 有效后,就可用e_lfanew(3CH處來(lái))來(lái)定位 PE Header 了。 比較 PE header 的第一個(gè)字的值是否等于 IMAGE_NT_HEADER (4550h,即PE)。如果前后兩個(gè)值都匹配,那我們就認(rèn)為該文件是一個(gè)有效的PE文件。2校驗(yàn)程序核心部分代碼的實(shí)現(xiàn)如下: edi
31、已經(jīng)指向IMAGE_DOS_HEADER結(jié)構(gòu)。然后比較DOS MZ Header的首字是否等于字符串"MZ",這里利用了Windows.inc中定義的IMAGE_DOS_SIGNATURE常量。若比較成功,則轉(zhuǎn)到判斷PE Header,否則設(shè)ValidPE 值為FALSE,意味著文件不是有效PE文件。mov edi, pMapping assume edi:ptr IMAGE_DOS_HEADER .if edi.e_magic=IMAGE_DOS_SIGNATURE 。 已定位到PE header,需要讀取DOS MZ Header中的e_lfanew域值。該域含有PE
32、Header在文件中相對(duì)文件首部的偏移量。edi加上該值正好定位到PE Header的首字節(jié)。比較它是否是字符串"PE"。這里在此用到了常量IMAGE_NT_SIGNATURE,相等則認(rèn)為是有效的PE文件。add edi, edi.e_lfanew assume edi:ptr IMAGE_NT_HEADERS .if edi.Signature=IMAGE_NT_SIGNATURE mov ValidPE, TRUE .else mov ValidPE, FALSE .endif3.2.3病毒重定位為什么要重定位病毒首先第一步就需要重定位,那到底為什么要重定
33、位呢?我們?cè)趯?xiě)正常程序的時(shí)候根本不用去關(guān)心變量(常量)的位置,因?yàn)樵闯绦蛟诰幾g的時(shí)候它的內(nèi)存中的位置都被計(jì)算好了。程序裝入內(nèi)存時(shí),系統(tǒng)不會(huì)為它重定位。編程時(shí)我們需要用到變量(常量)的時(shí)候直接用變量名訪(fǎng)問(wèn)(編譯后就是通過(guò)偏移地址訪(fǎng)問(wèn))就行了。同時(shí),病毒不可避免也要用到變量(常量),當(dāng)病毒感染HOST程序后,由于其依附到HOST程序中的位置各有不同,病毒隨著HOST載入內(nèi)存后,病毒中的各個(gè)變量(常量)在內(nèi)存中的位置自然也會(huì)隨著發(fā)生變化。假如病毒在編譯后,其中一變量Var的地址(004010xxh)就已經(jīng)以二進(jìn)制代碼的形式固定了,當(dāng)病毒感染HOST程序以后(即病毒相關(guān)代碼已經(jīng)直接依附到HOST程序中
34、),由于病毒體對(duì)變量Var的引用還是對(duì)內(nèi)存地址004010xxh的引用(病毒的這段二進(jìn)制代碼并不會(huì)發(fā)生改變),而在HOST上的004010xxh的位置實(shí)際上已經(jīng)不再存放變量Var了,如果這個(gè)時(shí)候再用004010xxh的位置來(lái)調(diào)用Var那么肯定是無(wú)法成功的。這樣就造成了病毒對(duì)變量的引用不準(zhǔn)確,勢(shì)必導(dǎo)致病毒無(wú)法正常運(yùn)行。既然如此,病毒就非常有必要對(duì)所有病毒代碼中的變量進(jìn)行重新定位。如何重定位既然重定位是基本且非常重要的東西,那么重定位的具體方法就顯得尤其重要了。本設(shè)計(jì)采用的是現(xiàn)在最普遍也是最有效的方法。我們先學(xué)習(xí)下call指令。call指令一般用來(lái)調(diào)用一個(gè)子程序或用來(lái)進(jìn)行轉(zhuǎn)跳,當(dāng)這個(gè)
35、語(yǔ)句執(zhí)行的時(shí)候,它會(huì)先將返回地址(即緊接著call語(yǔ)句之后的那條語(yǔ)句在內(nèi)存中的真正地址)壓入堆棧,然后將IP置為call語(yǔ)句所指向的地址。當(dāng)子程序碰到ret命令后,就會(huì)將堆棧頂端的地址彈出來(lái),并將該地址存放在IP中。根據(jù)以上的描述,我們就可以采取一種調(diào)用call命令的方式來(lái)獲得當(dāng)前的重定位值。重定位核心代碼實(shí)現(xiàn)如下:call relocaterelocate: pop ebp.lea eax,ebp+(offset Var-offset relocate) 這條語(yǔ)句執(zhí)行之后,堆棧頂端為relocate在內(nèi)存中的真正地址。 這條語(yǔ)句將relocate在內(nèi)存中的真正地址存放在ebp寄存器中。 這時(shí)
36、eax中存放著Var在內(nèi)存中的真實(shí)地址。當(dāng)pop語(yǔ)句執(zhí)行完之后,ebp中放的是什么值呢?很明顯是病毒程序中標(biāo)號(hào)relocate在內(nèi)存中的真正地址。如果病毒程序中有一個(gè)變量Var,那么該變量實(shí)際在內(nèi)存中的地址應(yīng)該是ebp+(offset Var-offset relocate),即參考量relocate在內(nèi)存中的地址+其它變量與參考量之間的距離=其它變量在內(nèi)存中的真正地址。有時(shí)候我們也采用(ebp-offset relocate)+offset Var的形式進(jìn)行變量Var的重定位。還有一些其它重定位的方法,但是它們的基本原理都是一樣的。3.2.4獲取API函數(shù)地址為什么要獲取API
37、函數(shù)地址Win32 PE病毒和普通Win32 PE程序一樣需要調(diào)用API函數(shù),但是普通的Win32 PE程序里面有一個(gè)引入函數(shù)表,該函數(shù)表對(duì)應(yīng)了代碼段中所用到的API函數(shù)在動(dòng)態(tài)連接庫(kù) (如Kernel32.dll,User32.dll)中的真實(shí)地址。這樣,調(diào)用API函數(shù)時(shí)就可以通過(guò)該引入函數(shù)表找到相應(yīng)API函數(shù)的真正執(zhí)行地址。但是,對(duì)于Win32 PE病毒來(lái)說(shuō),他一般只有一個(gè)代碼段,他并不存在引入函數(shù)段。既然如此,病毒就無(wú)法像普通PE程序那樣直接調(diào)用相關(guān)API函數(shù),而應(yīng)該先找出這些API函數(shù)在相應(yīng)動(dòng)態(tài)鏈接庫(kù)中的地址。如何獲取API函數(shù)地址1獲得Kernel32基地址如何獲取API
38、函數(shù)地址一直是病毒技術(shù)的一個(gè)非常重要的話(huà)題。要獲得API函數(shù)地址,我們首先需要獲得Kernel32.dll的基地址。為什么我們需要先獲得它呢?因?yàn)橐坏┪覀儷@得了Kernel32.dll的基地址,那么獲得從Kernel32引出的函數(shù)就成為了可能,即使用戶(hù)用到了其他的API(如從User32.dll中引出的)函數(shù)。則可以使用從Kernel32中得到的LoadLibrary函數(shù)和GetProcAddress函數(shù)相結(jié)合得到其他API函數(shù)的地址。下面介紹一種獲得Kernel32基地址的方法:利用HOST程序的返回地址,在其附近搜索Kernel32模塊基地址。當(dāng)系統(tǒng)打開(kāi)一個(gè)可執(zhí)行文件的時(shí)候,它會(huì)調(diào)用Ker
39、nel32.dll中的CreateProcess函數(shù);CreateProcess函數(shù)在完成裝載應(yīng)用程序后,會(huì)先將一個(gè)返回地址壓入到堆棧頂端,然后轉(zhuǎn)向執(zhí)行剛才裝載的應(yīng)用程序。當(dāng)該應(yīng)用程序結(jié)束后,會(huì)將堆棧頂端數(shù)據(jù)彈出放到IP中,繼續(xù)執(zhí)行。剛才堆棧頂端保存的數(shù)據(jù)其實(shí)就是在Kernal32.dll中的返回地址。其實(shí)這個(gè)過(guò)程跟同我們的應(yīng)用程序用call指令調(diào)用子程序類(lèi)似。可以看出,這個(gè)返回地址是在Kernal32.dll模塊中。另外PE文件被裝入內(nèi)存時(shí)是按內(nèi)存頁(yè)對(duì)齊的,只要我們從返回地址按照頁(yè)對(duì)齊的邊界一頁(yè)一頁(yè)地往低地址搜索,就必然可以找到Kernel32.dll的文件頭地址,即Kernel32模塊的基
40、地址。搜索Kernel32基地址的核心代碼實(shí)現(xiàn)如下:mov ecx,esp xor edx,edxgetK32Base:dec ecx .mov dx,word ptr ecx+IMAGE_DOS_HEADER.e_lfanewtest dx,0f000h jnz getK32Basecmp ecx,dword ptr ecx+edx+IMAGE_NT_HEADERS.OptionalHeader.ImageBasejnz getK32Base. mov ebp+offset k32Base,ecx. 將堆棧頂端的數(shù)據(jù)賦給ecx。 逐字節(jié)比較驗(yàn)證,也可以一頁(yè)一頁(yè)地搜。 就是ecx+3ch(比較
41、方式類(lèi)似判斷PE文件的有效性第一步思想一致)。 Dos Header+stub值不會(huì)太大,不可能超過(guò)4096byte。 看Image_Base值是否等于ecx即模塊起始值。 如果是,就認(rèn)為找到kernel32的Base值。2利用Kerner32基地址來(lái)獲取API函數(shù)地址在參照了引出表結(jié)構(gòu)之后,那么獲得API函數(shù)地址的方法就不理解了。 引出表的結(jié)構(gòu)定義如下:00HCharacteristics04HTimeDateStamp文件生成時(shí)間08HMajorVesion主版本號(hào)0AHMinerVesion次版本號(hào)0CHName指向DLL的名字10HBase開(kāi)始的序號(hào)14HNumberOfFunctio
42、nAddressOfFunctions的項(xiàng)數(shù)18HNumberOfNamesAddressOfNames的項(xiàng)數(shù)1CHAddressOfFunctions指向函數(shù)地址的數(shù)組20HAddressOfNames指向函數(shù)名稱(chēng)的地址的數(shù)組24HAddressOfNameOrdinals指向輸入序列號(hào)的數(shù)組只要理解好最后5項(xiàng)的具體含義,那么搜索API地址的方法就顯而易見(jiàn)了。AddressOfFunctions指向一個(gè)數(shù)組,這個(gè)數(shù)組的每個(gè)成員就指向了一個(gè)API函數(shù)的地址,也就是說(shuō)我們只要從這個(gè)數(shù)組里獲得了一個(gè)API函數(shù)的地址,那么我們就可以使用相應(yīng)的API函數(shù)了,但里面的API函數(shù)地址是按數(shù)組存放的,那么我
43、們要使用一個(gè)指定的API函數(shù),就必須知道該API函數(shù)在數(shù)組中的具體的位置,也就是一個(gè)索引號(hào)。上面說(shuō)的這個(gè)索引號(hào)則需要表中的最后2項(xiàng)來(lái)獲得,AddressOfNames 與AddressOfNameOrdinals指向2個(gè)數(shù)組,一個(gè)是函數(shù)名字的數(shù)組,一個(gè)是函數(shù)名稱(chēng)的數(shù)組,一個(gè)是函數(shù)名字所對(duì)應(yīng)的索引號(hào)的數(shù)組,這2個(gè)數(shù)組是一一對(duì)應(yīng)的,也就是說(shuō),如果第一個(gè)數(shù)組中的第M項(xiàng)是我們要查找的函數(shù)的名字,那么第二個(gè)數(shù)組中的第M項(xiàng)就是該函數(shù)的索引號(hào)。這樣我們就可以通過(guò)在第一個(gè)數(shù)組中查找我們需要查找的函數(shù)的名字,如果查到,便記住該項(xiàng)目在數(shù)組中的位置,然后再到第二個(gè)數(shù)組中相同位置就可以獲得該函數(shù)在AddressOfF
44、unctions中的索引號(hào)了。解決以上問(wèn)題后,我們就知道了如何利用引出表的結(jié)構(gòu)來(lái)查找我們需要的函數(shù)地址了。但我們還得需要獲得引出表的結(jié)構(gòu)的地址,其實(shí)方法也比較簡(jiǎn)單,PE文件中可選映像頭中60H有一個(gè)數(shù)據(jù)目錄表DataDirectory,該目錄表的第一個(gè)數(shù)據(jù)目錄就存放了導(dǎo)出表結(jié)構(gòu)的地址。 已知API函數(shù)名稱(chēng)利用Kernel32 Base來(lái)獲取函數(shù)地址的方法定位到PE文件頭。從PE文件頭中的可選文件頭中取出數(shù)據(jù)目錄表的第一個(gè)數(shù)據(jù)目錄,得到導(dǎo)出表的地址。從導(dǎo)出表的NumberOfNames字段得到以命名函數(shù)的總數(shù),并以這個(gè)數(shù)字做微循環(huán)的次數(shù)來(lái)構(gòu)造一個(gè)循環(huán)。從AddressOfNames字段指向的函數(shù)
45、名稱(chēng)地址表的第一項(xiàng)開(kāi)始,在循環(huán)中將每一項(xiàng)定義的函數(shù)名與要查找的函數(shù)名比較,如果沒(méi)有任何一個(gè)函數(shù)名符合,說(shuō)明文件中沒(méi)有指定名稱(chēng)的函數(shù)。如果某一項(xiàng)定義的函數(shù)名與要查找的函數(shù)名符合,那么記住這個(gè)函數(shù)名在字符串地址表中的索引值(如x),然后在AddressOfNameOrdinals指向的數(shù)組中以同樣的索引值x去找數(shù)組項(xiàng)中的值,假如該值為m。以m值作為索引值,在AddressOfFunctions字段指向的函數(shù)入口地址表中獲取的RVA就是函數(shù)的入口地址,當(dāng)函數(shù)被裝入內(nèi)存后,這個(gè)RVA值加上模塊實(shí)際裝入的基址(ImageBase),就得到了函數(shù)真正的入口地址。對(duì)于病毒來(lái)說(shuō),通常是通過(guò)API函數(shù)名稱(chēng)來(lái)查找
46、API函數(shù)地址。3.2.5文件操作關(guān)于文件搜索1文件搜索函數(shù)搜索文件是病毒尋找目標(biāo)文件的非常重要的功能。在Win32匯編中,通常采用三個(gè)API函數(shù)進(jìn)行文件搜索。 FindFirstFile 該函數(shù)根據(jù)文件名查找文件。 FindNextFile 該函數(shù)根據(jù)調(diào)用FindFirstFile函數(shù)時(shí)指定的一個(gè)文件名查找下一個(gè)文件。 FindClose 該函數(shù)用來(lái)關(guān)閉由FindFirstFile函數(shù)創(chuàng)建的一個(gè)搜索句柄。2文件搜索算法文件搜索一般采用遞歸算法進(jìn)行搜索,也可以采用非遞歸搜索方法,這里我們僅介紹遞歸的算法FindFile Proc 指定找到的目錄為當(dāng)前工作目錄。 開(kāi)始搜索文件(*.
47、*)。 該目錄搜索完畢?是則返回,否則繼續(xù)。 找到文件還是目錄?是目錄則調(diào)用自身函數(shù)FindFile,否則繼續(xù)。 是文件,如符合感染條件,則調(diào)用感染模塊,否則繼續(xù)。 搜索下一個(gè)文件(FindNextFile),轉(zhuǎn)到繼續(xù)。FindFile Endp內(nèi)存映射文件內(nèi)存映射文件提供了一組獨(dú)立的函數(shù),是應(yīng)用程序能夠通過(guò)內(nèi)存指針像訪(fǎng)問(wèn)內(nèi)存一樣對(duì)磁盤(pán)上的文件進(jìn)行訪(fǎng)問(wèn)。這組內(nèi)存映射文件函數(shù)將磁盤(pán)上的文件的全部或者部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)文件內(nèi)容的訪(fǎng)問(wèn)就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存訪(fǎng)問(wèn)一樣簡(jiǎn)單。這樣,對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大大地提高了訪(fǎng)問(wèn)的速度,這對(duì)于計(jì)算機(jī)
48、病毒來(lái)說(shuō),對(duì)減少資源占有是非常重要的。1內(nèi)存映射文件函數(shù) CreateFileMapping該函數(shù)用來(lái)創(chuàng)建一個(gè)新的文件映射對(duì)象。 MapViewOfFile 該函數(shù)將一個(gè)文件映射對(duì)象映射到當(dāng)前應(yīng)用程序的地址空間。 UnMapViewOfFile 該函數(shù)在當(dāng)前應(yīng)用程序的內(nèi)存地址空間解除對(duì)一個(gè)文件映射對(duì)象的映射。 CloseHandle 該函數(shù)用來(lái)關(guān)閉一個(gè)內(nèi)核對(duì)象,其中包括文件、文件映射、進(jìn)程、線(xiàn)程、安全和同步對(duì)象等。2內(nèi)存映射文件方法在計(jì)算機(jī)病毒中,通常采用如下幾個(gè)步驟: 調(diào)用CreateFile函數(shù)打開(kāi)想要映射的HOST程序,返回文件句柄hFile。 調(diào)用CreateFileMapping函數(shù)
49、生成一個(gè)建立基于HOST文件句柄hFile的內(nèi)存映射對(duì)象,返回內(nèi)存映射對(duì)象句柄hMap。 調(diào)用MapViewOfFile函數(shù)將整個(gè)文件(一般還要加上病毒體的大小)映射到內(nèi)存中。得到指向映射到內(nèi)存的第一個(gè)字節(jié)的指針(pMem)。 用剛才得到的指針pMem對(duì)整個(gè)HOST文件進(jìn)行操作,對(duì)HOST程序進(jìn)行病毒感染。 調(diào)用UnmapViewFile函數(shù)解除文件映射,傳入?yún)?shù)是pMem。 調(diào)用CloseHandle來(lái)關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是hMap。 調(diào)用CloseHandle來(lái)關(guān)閉HOST文件,傳入?yún)?shù)是hFile。感染PE文件1文件感染操作相關(guān)函數(shù) CreateFile 該函數(shù)可打開(kāi)
50、和創(chuàng)建文件、管道、郵槽、通信服務(wù)、設(shè)備以及控制臺(tái)。 CloseHandle 該函數(shù)用來(lái)關(guān)閉一個(gè)內(nèi)核對(duì)象,其中包括文件、文件映射、進(jìn)。 SetFilePointer 該函數(shù)在一個(gè)文件中設(shè)置當(dāng)前的讀寫(xiě)位置。 ReadFile 該函數(shù)用來(lái)從文件中讀取數(shù)據(jù)。 WriteFile 該函數(shù)用來(lái)將數(shù)據(jù)寫(xiě)入文件。 SetEndOfFile 該函數(shù)針對(duì)一個(gè)打開(kāi)的文件,將當(dāng)前文件位置設(shè)為文件末尾。 GetFileSize 該函數(shù)得到指定文件的大小。 FlushFileBuffers 該函數(shù)針對(duì)指定的文件句柄,刷新內(nèi)部文件緩沖區(qū)。2文件感染的基本步驟(添加病毒新節(jié)的方式) 判斷目標(biāo)文件開(kāi)始的兩個(gè)字節(jié)是否為“MZ”。
51、 判斷PE文件標(biāo)記“PE”。 判斷感染標(biāo)記,如果已被感染過(guò)則跳出繼續(xù)執(zhí)行HOST程序,否則繼續(xù)。 獲得Directory(數(shù)據(jù)目錄)的個(gè)數(shù),(每個(gè)數(shù)據(jù)目錄信息占8個(gè)字節(jié))。 得到節(jié)表起始位置。(Directory的偏移地址+數(shù)據(jù)目錄占用的字節(jié)數(shù)=節(jié)表起始位置)。得到目前最后節(jié)表的末尾偏移(緊接其后用于寫(xiě)入一個(gè)新的病毒節(jié))節(jié)表起始位置+節(jié)的個(gè)數(shù)*(每個(gè)節(jié)表占用的字節(jié)數(shù)28H)=目前最后節(jié)表的末尾偏移。 開(kāi)始寫(xiě)入節(jié)表。a) 寫(xiě)入節(jié)名(8字節(jié))。b) 寫(xiě)入節(jié)的實(shí)際字節(jié)數(shù)(4字節(jié))。c) 寫(xiě)入新節(jié)在內(nèi)存中的開(kāi)始偏移地址(4字節(jié)),同時(shí)可以計(jì)算出病毒入口位置上節(jié)在內(nèi)存中的開(kāi)始偏移地址+(上節(jié)大小/節(jié)對(duì)齊
52、+1)×節(jié)對(duì)齊=本節(jié)在內(nèi)存中的開(kāi)始偏移地址。d) 寫(xiě)入本節(jié)(即病毒節(jié))在文件中對(duì)齊后的大小。e) 寫(xiě)入本節(jié)在文件中的開(kāi)始位置。上節(jié)在文件中的開(kāi)始位置+上節(jié)對(duì)齊后的大小=本節(jié)(即病毒)在文件中的開(kāi)始位置。f) 修改映像文件頭中的節(jié)表數(shù)目。g) 修改AddressOfEntryPoint(即程序入口點(diǎn)指向病毒入口位置),同時(shí)保存舊的AddressOfEntryPoint,以便返回HOST繼續(xù)執(zhí)行。h) 更新SizeOfImage(內(nèi)存中整個(gè)PE映像尺寸=原SizeOfImage+病毒節(jié)經(jīng)過(guò)內(nèi)存節(jié)對(duì)齊后的大小)。i) 寫(xiě)入感染標(biāo)記(后面例子中是放在PE頭中)。j) 寫(xiě)入病毒代碼到新添加的節(jié)
53、中。k) 將當(dāng)前文件位置設(shè)為文件末尾。PE病毒感染其他文件的方法還有很多,譬如PE病毒還可以將自己分散插入到每個(gè)節(jié)的空隙中,他的好處就是病毒不增長(zhǎng),但難度較大。3文件感染需要注意的細(xì)節(jié)為了提高自己的生存能力,病毒是不應(yīng)該破壞HOST程序的,既然如此,病毒應(yīng)該在病毒執(zhí)行完畢后,立刻將控制權(quán)交給HOST程序。返回HOST程序相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,病毒在修改被感染文件代碼開(kāi)始執(zhí)行位置(AddressOfEntryPoint)時(shí),應(yīng)該保存原來(lái)的值,這樣,病毒在執(zhí)行完病毒代碼之后用一個(gè)跳轉(zhuǎn)語(yǔ)句跳到這段代碼處繼續(xù)執(zhí)行即可。注意,在這里,病毒先會(huì)做出一個(gè)“現(xiàn)在執(zhí)行程序是否為病毒啟動(dòng)程序”的判斷,如果不是啟動(dòng)程序
54、,病毒才會(huì)返回HOST程序,否則繼續(xù)執(zhí)行程序其它部分。4 Windows PE文件病毒的研究及實(shí)現(xiàn)4.1病毒程序?qū)崿F(xiàn)4.1.1病毒程序編寫(xiě)背景21世紀(jì)是信息的時(shí)代,信息成為一種重要的戰(zhàn)略資源,信息科學(xué)成為最活躍學(xué)科領(lǐng)域之一,信息技術(shù)改變著人們的生活和工作方式,信息產(chǎn)業(yè)成為新的經(jīng)濟(jì)增長(zhǎng)點(diǎn)。信息的安全保障能力成為一個(gè)國(guó)家綜合國(guó)力的重要組成部分。隨著計(jì)算機(jī)和互聯(lián)網(wǎng)技術(shù)的快速發(fā)展和廣泛應(yīng)用,計(jì)算機(jī)網(wǎng)絡(luò)系統(tǒng)的安全受到嚴(yán)重的挑戰(zhàn),來(lái)自計(jì)算機(jī)病毒和黑客的攻擊及其其他方面的威脅越來(lái)越大。其中,計(jì)算機(jī)病毒更是計(jì)算機(jī)安全中很難根治的主要威脅之一。通過(guò)對(duì)計(jì)算機(jī)病毒的認(rèn)識(shí),研究以達(dá)到更加深刻地了解病毒,只有了解計(jì)算機(jī)病毒的原理,掌握計(jì)算機(jī)病毒的防治技術(shù)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2018春冀少版八年級(jí)生物下冊(cè)第七單元第3章教學(xué)設(shè)計(jì):7.3.1控制人口的過(guò)度增長(zhǎng)
- 520表白的短信祝福語(yǔ)
- 話(huà)務(wù)員年度個(gè)人總結(jié)
- 大學(xué)團(tuán)委團(tuán)支部工作總結(jié)與展望
- 川省個(gè)人短期借款合同
- 2024年計(jì)算機(jī)二級(jí)知識(shí)點(diǎn)回顧試題及答案
- 學(xué)生會(huì)宣傳部部長(zhǎng)競(jìng)選演講稿【9篇】
- 公司投資協(xié)議合同標(biāo)準(zhǔn)文本
- 農(nóng)村方屋出租合同標(biāo)準(zhǔn)文本
- 文化遺產(chǎn)教育教學(xué)計(jì)劃
- 2024年中國(guó)燃油燃?xì)馍逃缅仩t市場(chǎng)調(diào)查研究報(bào)告
- 2022浪潮英信服務(wù)器NF5280M6產(chǎn)品技術(shù)白皮書(shū)
- 高二下英語(yǔ)單詞
- 2024年國(guó)家危險(xiǎn)化學(xué)品經(jīng)營(yíng)單位安全生產(chǎn)考試題庫(kù)(含答案)
- 加油站事故隱患報(bào)告和舉報(bào)獎(jiǎng)勵(lì)制度(3篇)
- 【MOOC】數(shù)據(jù)庫(kù)系統(tǒng)(下):管理與技術(shù)-哈爾濱工業(yè)大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 肥胖癥外科治療
- 路徑規(guī)劃與導(dǎo)航
- 短暫性腦缺血發(fā)作
- 20222023銀行招聘考試題庫(kù)1000題第4372期含答案解析
- 傳染病報(bào)告卡
評(píng)論
0/150
提交評(píng)論