計(jì)算機(jī)病毒模擬程序_第1頁(yè)
計(jì)算機(jī)病毒模擬程序_第2頁(yè)
計(jì)算機(jī)病毒模擬程序_第3頁(yè)
計(jì)算機(jī)病毒模擬程序_第4頁(yè)
計(jì)算機(jī)病毒模擬程序_第5頁(yè)
已閱讀5頁(yè),還剩43頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、摘 要 在計(jì)算機(jī)病毒技術(shù)與反病毒技術(shù)激烈斗爭(zhēng)的今天,病毒技術(shù)的復(fù)雜多變,發(fā)展迅速給計(jì)算機(jī)用戶同時(shí)也給反病毒技術(shù)帶了巨大的挑戰(zhàn)。本文詳細(xì)剖析了時(shí)下較流行的windows 32位操作系統(tǒng)平臺(tái)下最為常見的pe病毒機(jī)制,配合以代碼實(shí)現(xiàn)的方式,從一個(gè)病毒編寫者的角度展示病毒基本原理,并以此為契機(jī)從而做到更好的防范病毒。第一部分分別介紹了windows病毒的基本原理、分類,并著重介紹pe病毒基本原理,基本機(jī)制;第二部分則根據(jù)pe病毒原理用編寫實(shí)際代碼的方式實(shí)現(xiàn)一個(gè)感染正常exe文件(如winrar.exe)、關(guān)機(jī)并通過(guò)u盤傳播等功能的病毒程序;第三部分則通過(guò)功能測(cè)試(白盒測(cè)試)、殺毒軟件測(cè)試,總結(jié)并展望病

2、毒技術(shù);最后通過(guò)此次課題的研究成果,結(jié)合當(dāng)今主流反病毒技術(shù),總結(jié)windows pe病毒防范技術(shù)。關(guān)鍵字:windows病毒;pe病毒;反病毒技術(shù);pe文件格式;pe病毒 abstract nowadays, computer virus technology is growing rapidly as fast as development speed of anti-virus technology.computer virus technology is becoming complex and changing rapidly. it brings enormous challenge

3、s 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 mechanism of virus from the perspective of the virus creator and gives the suggestion to achieve a bette

4、r 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 part compiles the code realization according to the principles. it can infect an exe program (e.g.

5、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 technology through the research on this topic with mainstream anti-virus technology.keywords windows virus:

6、 pe virus; anti-virus technology; pe format; implementation of virus program目 錄第一章 病毒的發(fā)展史2第一節(jié) 計(jì)算機(jī)病毒的發(fā)展歷史2第二節(jié) 計(jì)算機(jī)病毒的當(dāng)前狀況2第三節(jié) 計(jì)算機(jī)病毒的發(fā)展趨勢(shì)3第二章 計(jì)算機(jī)病毒概述5第一節(jié)計(jì)算機(jī)病毒的定義5第二節(jié) 計(jì)算機(jī)病毒基本性質(zhì)與本質(zhì)5第三章 windows病毒8第一節(jié) windows病毒分類8第二節(jié) pe病毒原理9第四章 windows pe文件病毒的研究及實(shí)現(xiàn)22第一節(jié) 病毒程序?qū)崿F(xiàn)22第二節(jié) 病毒程序測(cè)試33第三節(jié) 病毒程序總結(jié)分析40結(jié) 論42致 謝43參考文獻(xiàn)44緒 論

7、隨著計(jì)算機(jī)和互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,計(jì)算機(jī)正走進(jìn)社會(huì)的各個(gè)領(lǐng)域,走進(jìn)千家萬(wàn)戶,計(jì)算機(jī)系統(tǒng)已經(jīng)能夠?qū)崿F(xiàn)生活、管理、辦公的自動(dòng)化,成為人類社會(huì)不可或缺的一部分。然而,計(jì)算機(jī)系統(tǒng)并不安全,其不安的因素有計(jì)算機(jī)系統(tǒng)自身的、自然不可抗拒的,也有人為的。計(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ī)

8、資源的損失和破壞,不但會(huì)造成資源和財(cái)富的巨大浪費(fèi),而且有可能造成社會(huì)性的災(zāi)難,正因?yàn)槿绱?,我們就?yīng)堅(jiān)決地走到反病毒的行列中來(lái)。我們研究病毒,最終目的是為了消滅病毒。大多數(shù)計(jì)算機(jī)用戶對(duì)病毒不了解才會(huì)造成病毒的橫行,對(duì)于精通病毒原理的人來(lái)說(shuō),病毒是毫無(wú)攻擊力的。我們要做到徹底地消滅病毒,那么就不能全依靠少數(shù)編寫殺毒軟件的人,而是要做到了解病毒基本原理,了解病毒只是為了認(rèn)識(shí)病毒,消除對(duì)病毒的恐懼心理,最終達(dá)到能夠防毒、清除病毒的目的。所以對(duì)于病毒基本原理的學(xué)習(xí),對(duì)計(jì)算機(jī)病毒編寫的學(xué)習(xí)是非常有意義的。windows pe病毒是所有病毒中數(shù)量極多、破壞性極大的、技巧性最強(qiáng)的一類病毒。譬如cih、funl

9、ove、中國(guó)黑客等。本文就以此類病毒為突破口,從基本原理到病毒代碼的編寫測(cè)試,完成一個(gè)基本的windows pe病毒模型,從而更加了解pe病毒,更好的防治病毒。本文第一部分介紹計(jì)算機(jī)基本知識(shí);第二部分著重介紹計(jì)算機(jī)病毒中的windows病毒,從內(nèi)核級(jí)學(xué)習(xí)pe文件格式,pe病毒原理;第三部分結(jié)合第二部分的準(zhǔn)備知識(shí),分別介紹每個(gè)代碼模塊功能及實(shí)現(xiàn);第四部分則介紹了針對(duì)pe病毒的一些解決方案;最后一部分對(duì)計(jì)算機(jī)的防治做了展望。第一章 病毒的發(fā)展史 第一節(jié) 計(jì)算機(jī)病毒的發(fā)展歷史 到了1987年,第一個(gè)電腦病毒c-brain終于誕生了。一般而言,業(yè)界都公認(rèn)這是真正具備完整特征的電腦病毒始祖。這個(gè)病毒程序

10、是由一對(duì)巴基斯坦兄弟:巴斯特(basit)和阿姆捷特(amjad)所寫的,他們?cè)诋?dāng)?shù)亟?jīng)營(yíng)一家販賣個(gè)人電腦的商店,由于當(dāng)?shù)乇I拷軟件的風(fēng)氣非常盛行,因此他們的目的主要是為了防止他們的軟件被任意盜拷。只要有人盜拷他們的軟件,c-brain就會(huì)發(fā)作,將盜拷者的硬盤剩余空間給吃掉。這個(gè)病毒在當(dāng)時(shí)并沒有太大的殺傷力,但后來(lái)一些有心人士以c-brain為藍(lán)圖,制作出一些變形的病毒。而其他新的病毒創(chuàng)作,也紛紛出籠,不僅有個(gè)人創(chuàng)作,甚至出現(xiàn)不少創(chuàng)作集團(tuán)(如nuke,phalcon/skism,vdv)。各類掃毒、防毒與殺毒軟件以及專業(yè)公司也紛紛出現(xiàn)。一時(shí)間,各種病毒創(chuàng)作與反病毒程序,不斷推陳出新,百家爭(zhēng)鳴。 第

11、二節(jié) 計(jì)算機(jī)病毒的當(dāng)前狀況一、計(jì)算機(jī)網(wǎng)絡(luò)(互聯(lián)網(wǎng)、局域網(wǎng))成為計(jì)算機(jī)病毒的主要傳播途徑,使用計(jì)算機(jī)網(wǎng)絡(luò)逐漸成為計(jì)算機(jī)病毒發(fā)作條件的共同點(diǎn)。計(jì)算機(jī)病毒最早只通過(guò)文件拷貝傳播,當(dāng)時(shí)最常見的傳播媒介是軟盤和盜版光碟。隨著計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展,目前計(jì)算機(jī)病毒可通過(guò)計(jì)算機(jī)網(wǎng)絡(luò)利用多種方式(電子郵件、網(wǎng)頁(yè)、即時(shí)通訊軟件等)進(jìn)行傳播。計(jì)算機(jī)網(wǎng)絡(luò)的發(fā)展有助于計(jì)算機(jī)病毒的傳播速度大大提高,感染的范圍也越來(lái)越廣??梢哉f(shuō),網(wǎng)絡(luò)化帶來(lái)了計(jì)算機(jī)病毒傳染的高效率。與以前計(jì)算機(jī)病毒給我們的印象相比,計(jì)算機(jī)病毒的主動(dòng)性(主動(dòng)掃描可以感染的計(jì)算機(jī))、獨(dú)立性(不再依賴宿主文件)更強(qiáng)了。二、計(jì)算機(jī)病毒變形的速度極快并向混合型、多樣化發(fā)

12、展計(jì)算機(jī)病毒向混合型、多樣化發(fā)展的結(jié)果是一些病毒會(huì)更精巧,另一些病毒會(huì)更復(fù)雜,混合多種病毒特征,如紅色代碼病毒(code red)就是綜合了文件型、蠕蟲型病毒的特性,這種發(fā)展趨勢(shì)會(huì)造成反病毒工作更加困難。2004年1月27日,一種新型蠕蟲病毒在企業(yè)電子郵件系統(tǒng)中傳播,導(dǎo)致郵件數(shù)量暴增,從而阻塞網(wǎng)絡(luò)。不同反病毒廠商將其命名為novarg、mydoom、sco炸彈、諾威格、小郵差變種等,該病毒采用的是病毒和垃圾郵件相結(jié)合的少見戰(zhàn)術(shù),不知情用戶的推波助瀾使得這種病毒的傳播速度似乎比近來(lái)其他幾種病毒的傳播速度要快。三、運(yùn)行方式和傳播方式的隱蔽性微軟安全中心發(fā)布的漏洞安全公告中ms04-028所提及的g

13、di+漏洞,危害等級(jí)被定為“嚴(yán)重”。在被計(jì)算機(jī)病毒感染的計(jì)算機(jī)中,你可能只看到一些常見的正常進(jìn)程如svchost、taskmgr等,其實(shí)它是計(jì)算機(jī)病毒進(jìn)程。四、利用操作系統(tǒng)漏洞傳播操作系統(tǒng)是聯(lián)系計(jì)算機(jī)用戶和計(jì)算機(jī)系統(tǒng)的橋梁,也是計(jì)算機(jī)系統(tǒng)的核心,目前應(yīng)用最為廣泛的是windows系列的操作系統(tǒng)。隨著dos操作系統(tǒng)使用率的減少,感染dos操作系統(tǒng)的計(jì)算機(jī)病毒也將退出歷史舞臺(tái);隨著windows操作系統(tǒng)使用率的增加,針對(duì)windows操作系統(tǒng)的計(jì)算機(jī)病毒將成為主流。五、計(jì)算機(jī)病毒技術(shù)與黑客技術(shù)將日益融合嚴(yán)格來(lái)說(shuō),木馬和后門程序并不是計(jì)算機(jī)病毒,因?yàn)樗鼈儾荒茏晕覐?fù)制和擴(kuò)散。但隨著計(jì)算機(jī)病毒技術(shù)與黑客

14、技術(shù)的發(fā)展,病毒編寫者最終將會(huì)把這兩種技術(shù)進(jìn)行了融合。六、物質(zhì)利益將成為推動(dòng)計(jì)算機(jī)病毒發(fā)展的最大動(dòng)力從計(jì)算機(jī)病毒的發(fā)展史來(lái)看,對(duì)技術(shù)的興趣和愛好是計(jì)算機(jī)病毒發(fā)展的源動(dòng)力。但越來(lái)越多的跡象表明,物質(zhì)利益將成為推動(dòng)計(jì)算機(jī)病毒發(fā)展的最大動(dòng)力。如今,不少銀行都提供網(wǎng)上驗(yàn)證或密碼鑰匙,用戶千萬(wàn)不要只圖節(jié)省費(fèi)用而冒失去巨大資金風(fēng)險(xiǎn)。買密碼鑰匙或數(shù)字證書是相當(dāng)必要的。第三節(jié) 計(jì)算機(jī)病毒的發(fā)展趨勢(shì)對(duì)所有腳本類病毒發(fā)展的展望:隨著網(wǎng)絡(luò)的飛速發(fā)展,網(wǎng)絡(luò)蠕蟲病毒開始流行,而vbs腳本蠕蟲則更加突出,不僅數(shù)量多,而且威力大。由于利用腳本編寫病毒比較簡(jiǎn)單,除了將繼續(xù)流行目前的vbs腳本病毒外,將會(huì)逐漸出現(xiàn)更多的其它腳本

15、類病毒,譬如php,js,perl病毒等。但是腳本并不是真正病毒技術(shù)愛好者編寫病毒的最佳工具,并且腳本病毒解除起來(lái)比較容易、相對(duì)容易防范。腳本病毒仍將繼續(xù)流行,但是能夠具有像愛蟲、新歡樂時(shí)光那樣大影響的腳本蠕蟲病毒只是少數(shù)。計(jì)算機(jī)病毒的發(fā)展趨勢(shì):一、高頻度病毒疫情發(fā)作的頻率高。造成較大影響的計(jì)算機(jī)病毒達(dá)到百余種之多。惡性病毒的比例大,病毒對(duì)計(jì)算機(jī)用戶的危害增大;二、傳播速度快,危害面廣由于網(wǎng)絡(luò)的特征決定了國(guó)內(nèi)計(jì)算機(jī)病毒幾乎與國(guó)外病毒疫情同步爆發(fā),且迅速大面積流行。目前對(duì)用戶安全威脅最大的是惡性網(wǎng)絡(luò)蠕蟲病毒三、病毒制作技術(shù)新與傳統(tǒng)的計(jì)算機(jī)病毒不同的是,許多新病毒是利用當(dāng)前最新的編程語(yǔ)言與編程技術(shù)

16、實(shí)現(xiàn),易于修改以產(chǎn)生新的變種,從而逃避反病毒軟件的搜索。例如“愛蟲”病毒是用vbscript語(yǔ)言編寫的,只要通過(guò)windows下自帶的編輯軟件修改病毒代碼中的一部分,就能輕而易舉地制造病毒變種,以躲避反病毒軟件的追擊。四、病毒形式多樣化病毒呈現(xiàn)多樣化的趨勢(shì)。病毒分析顯示,雖然新病毒不斷產(chǎn)生,但較早的病毒發(fā)作仍很普遍,并向卡通圖片、icq、oicq等方面發(fā)展。 此外,新的病毒更善于偽裝,如主題會(huì)在傳播中改變,許多病毒會(huì)偽裝成常用程序,或者將病毒代碼寫入文件內(nèi)部長(zhǎng)度而不發(fā)生變化,用來(lái)麻痹計(jì)算機(jī)用戶。五、病毒生成工具以往計(jì)算機(jī)病毒都是編程高手制作的,編寫病毒顯示自己的技術(shù)?!皫?kù)爾尼科娃”病毒的設(shè)計(jì)者

17、只是修改下載的vbs蠕蟲孵化器,“庫(kù)爾尼科娃”病毒就誕生了。據(jù)報(bào)道,vbs蠕蟲孵化器被人們下載了十五萬(wàn)次以上。由于這類工具在網(wǎng)絡(luò)上可以很容易地獲得,使得現(xiàn)在新病毒出現(xiàn)的頻率超出以往任何時(shí)候。 第二章 計(jì)算機(jī)病毒概述 第一節(jié)計(jì)算機(jī)病毒的定義 計(jì)算機(jī)病毒(computer virus)是一種人為的制造的、能夠進(jìn)行自我復(fù)制的、具有對(duì)計(jì)算機(jī)資源破壞作用的一組程序或指令的集合。這是計(jì)算機(jī)病毒的廣義定義。類似生物病毒,它能把自身附著在各種類型的文件上或寄生在存儲(chǔ)媒介中,能對(duì)付計(jì)算機(jī)系統(tǒng)和網(wǎng)絡(luò)進(jìn)行各種破壞,同時(shí)有獨(dú)特的復(fù)制能力和傳染性,能夠自我復(fù)制主動(dòng)傳染;另一方面,當(dāng)文件被復(fù)制或在網(wǎng)絡(luò)中從一個(gè)用戶送到另一

18、個(gè)用戶時(shí)被動(dòng)傳染,他們就隨同文件一起蔓延開來(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ī)病毒的狹義定義 。第二節(jié) 計(jì)算機(jī)病毒基本性質(zhì)與本質(zhì)計(jì)算機(jī)病毒種類繁多,特征各異,其中主要的有:自我復(fù)制能力;很強(qiáng)的感染性;一定的潛伏性;特定的觸發(fā)性;很大的破壞性。一、計(jì)算機(jī)病毒的可執(zhí)行性(程序性)程序性是計(jì)算機(jī)病毒的基本特征,也是計(jì)算機(jī)病毒最基本的一種表現(xiàn)形式。程序性也就決定了計(jì)算

19、機(jī)病毒的可防治性、可清除性。計(jì)算機(jī)病毒程序與其他合法程序一樣,是一段可執(zhí)行的程序,但他不是一個(gè)完整的程序,而是寄生在其他可執(zhí)行程序上的一段程序,因此他享有一切可執(zhí)行程序所能得到的權(quán)力。計(jì)算機(jī)的控制權(quán)是關(guān)鍵問題。反病毒技術(shù)就是要提前取得計(jì)算機(jī)系統(tǒng)的控制權(quán),識(shí)別出計(jì)算機(jī)病毒的代碼和行為,阻止起取得系統(tǒng)控制權(quán),并及時(shí)將其清除。二、計(jì)算機(jī)病毒的傳染性病毒一次源于生物學(xué),傳染也相應(yīng)成了計(jì)算機(jī)病毒最基本的特性。計(jì)算機(jī)病毒的傳染性是指病毒具有把自身復(fù)制到其他程序的能力。在生物界,病毒通過(guò)傳染從一個(gè)生物體擴(kuò)散到另一個(gè)生物體。在適當(dāng)?shù)臈l件下,他可得到大量的繁殖,并使被感染的生物體表現(xiàn)出病癥甚至死亡。同樣,計(jì)算機(jī)

20、病毒也會(huì)通過(guò)各種渠道通過(guò)已被感染的計(jì)算機(jī)擴(kuò)散到未被感染的計(jì)算機(jī),在某些情況下造成被感染的計(jì)算機(jī)工作失常甚至癱瘓。是否具有傳染性,是判斷一個(gè)程序是否為計(jì)算機(jī)病毒的首要條件。傳染性也決定了計(jì)算機(jī)病毒的可判斷性。三、計(jì)算機(jī)病毒的非授權(quán)性計(jì)算機(jī)病毒未經(jīng)授權(quán)而執(zhí)行。正常的程序是由用戶調(diào)用,再由系統(tǒng)分配資源,完成用戶交給的任務(wù),其目的對(duì)用戶是可見的、透明的。而病毒隱藏在正常程序中,竊取正常程序的系統(tǒng)控制權(quán),其目的對(duì)用戶是未知的,是未經(jīng)用戶允許的。四、計(jì)算機(jī)病毒的隱蔽性計(jì)算機(jī)病毒通常附在正常程序中或磁盤較隱蔽的地方,也有個(gè)別的以隱含文件的形式出現(xiàn),目的是不讓用戶發(fā)現(xiàn)他的存在。如果不經(jīng)過(guò)代碼分析,病毒程序與正

21、常程序是不容易區(qū)分開來(lái)的,而一旦病毒發(fā)作表現(xiàn)出來(lái),往往已經(jīng)給計(jì)算機(jī)系統(tǒng)造成了不同程度破壞。正是由于隱蔽性,計(jì)算機(jī)病毒得以在用戶沒有察覺的情況下擴(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ì)的精巧

22、之處也在這里。五、計(jì)算機(jī)病毒的潛伏性一個(gè)編制精巧的計(jì)算機(jī)病毒程序,進(jìn)入系統(tǒng)之后一般不會(huì)馬上發(fā)作。潛伏性越好,其在系統(tǒng)中的存在時(shí)間就會(huì)越長(zhǎng),病毒的傳染范圍就會(huì)越大。潛伏性通常表現(xiàn)以下兩個(gè)方面:(一) 病毒程序不用專門的檢測(cè)程序是檢查不出來(lái)的,一旦得到運(yùn)行機(jī)會(huì)就繁殖、擴(kuò)散,繼續(xù)為害。(二) 計(jì)算機(jī)病毒中往往有一種觸發(fā)機(jī)制,不滿足觸發(fā)條件時(shí),計(jì)算機(jī)病毒除了傳染外不做其他的破壞,只有當(dāng)觸發(fā)條件滿足時(shí),才會(huì)激活病毒的發(fā)作模塊而出現(xiàn)中毒的癥狀。六、計(jì)算機(jī)病毒的可觸發(fā)性計(jì)算機(jī)病毒因某個(gè)事件或數(shù)值的出現(xiàn),誘使病毒實(shí)施感染或進(jìn)行攻擊的特性,稱為可觸發(fā)性。為了隱蔽自己,病毒必須潛伏,少做動(dòng)作。如果完全不做動(dòng)作,病

23、毒既不能感染也不能進(jìn)行破壞,失去殺傷力。病毒既要隱蔽又要維持殺傷力,就必須具有可觸發(fā)性。病毒的觸發(fā)機(jī)制是用來(lái)控制感染和破壞動(dòng)作的頻率的。病毒的觸發(fā)機(jī)制越多,則傳染性越強(qiáng)。七、計(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ī)病毒的破壞性,決定了病毒的危害性。八、計(jì)算機(jī)病毒的寄生性病毒程序嵌入到宿主程序中,依賴與宿主程序的執(zhí)行而生存,這就是計(jì)算機(jī)病毒的寄生性。病毒程序在侵入到宿主程序中后,一般對(duì)宿主程序進(jìn)行一定的修改,宿主程序一旦

24、執(zhí)行,病毒程序就被激活,從而可以進(jìn)行自我復(fù)制和繁衍。九、計(jì)算機(jī)病毒的誘惑欺騙性某些病毒常以某種特殊的表現(xiàn)方式,引誘、欺騙用戶不自覺的觸發(fā)、激活病毒,從而實(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”。 第三章 windows病

25、毒第一節(jié) windows病毒分類一、pe病毒win32可執(zhí)行文件,如*.exe、*.dll、*.ocx等,都是pe格式文件。感染pe格式文件的win32病毒,簡(jiǎn)稱pe病毒。在絕大多數(shù)病毒愛好者中,真正的病毒技術(shù)在pe病毒中才會(huì)得到真正的體現(xiàn)。pe病毒同時(shí)也是所有病毒中數(shù)量極多、破壞性極大、技巧性最強(qiáng)的一類病毒。二、腳本病毒腳本(script)病毒是以腳本程序語(yǔ)言(如vb script、javascript、php)編寫而成的病毒。腳本病毒編寫比較簡(jiǎn)單,并且編寫的病毒具有傳播快、破壞力大等特點(diǎn)。例如,愛蟲病毒、新歡樂時(shí)光病毒等。就都是用vbs(vb script)編寫的,被稱做vbs腳本病毒。但

26、腳本病毒必須透過(guò)microsoft的wsh(windows scripting host)才能夠啟動(dòng)執(zhí)行以及感染其他文件。三、宏病毒宏病毒是單獨(dú)的一類病毒,因?yàn)樗c傳統(tǒng)的病毒有很大的不同,他不感染.exe、.com等可執(zhí)行文件,而是將病毒代碼以“宏”的形式潛伏在microsoft office文檔中,當(dāng)采用office軟件打開這些染毒文件時(shí),這些代碼就會(huì)被執(zhí)行并產(chǎn)生破壞作用。由于“宏”是使用vba(visual basic for application)這樣的高級(jí)代碼寫的,因此其編寫過(guò)程相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,而功能又十分強(qiáng)大。宏病毒的產(chǎn)生標(biāo)志著制造病毒不再是專業(yè)程序員的專利,任何人只要掌握一些基

27、本的“宏”編寫技巧即可編寫出破壞力極大的宏病毒。隨著微軟office軟件在全世界的不斷普及,宏病毒成為傳播最廣泛、危害最大的一類病毒。第二節(jié) pe病毒原理一、pe文件格式目前主流的操作系統(tǒng)是windows操作系統(tǒng),病毒要在windows操作系統(tǒng)上進(jìn)行傳播和破壞,其病毒文件也必須遵循pe文件的格式結(jié)構(gòu),。目前流行的計(jì)算機(jī)病毒以蠕蟲、木馬等類型病毒為住,這一類的病毒文件也大都是pe格式的文件,因此,我們?cè)谶@一節(jié)會(huì)詳細(xì)介紹pe格式文件,這是分析病毒程序的基礎(chǔ)。(一)什么是pe文件格式pe即portable executable,可移植、可執(zhí)行,他是win32可執(zhí)行文件的標(biāo)準(zhǔn)格式。他的一些特性繼承自u(píng)

28、nix的coff(common 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 n1、d

29、os小程序pe文件以一個(gè)簡(jiǎn)單的dos mz header開始。有了它,一旦程序在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”之類信息的小程序。2、nt映像頭緊接著dos stub的是pe header。pe header是pe相關(guān)結(jié)構(gòu)image_ni_headers(nt映像頭)的簡(jiǎn)稱,他存放了pe整個(gè)文

30、件信息分布的重要字段。nt映像頭包含了許多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)(參見windows.inc文件)。(1) signature dd ?字串“50450000”標(biāo)志著nt映像頭的開始,也是pe文件中與windows有關(guān)內(nèi)容的開始。他的位置是在dos程序頭中的偏移3ch處的4個(gè)字節(jié)給出的。(2

31、) fileheader image_file_header struct00h machine 機(jī)器類型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í)病毒

32、是需要重點(diǎn)關(guān)注的。(3) optionalheader 由于optionalheader數(shù)據(jù)定義較多,現(xiàn)只列出與學(xué)習(xí)病毒較重要的一些域。image_optional_header32 struct04h sizeofcode 代碼段的總尺寸10h addressofentrypoint 程序開始執(zhí)行位置14h baseofcode 代碼節(jié)開始的位置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)存后映像的

33、總尺寸3chsizeofheaders 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 stru

34、ct00hname 節(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ù)目24

35、hcharacteristics 節(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)注的。二、檢驗(yàn)pe文件的有效性檢驗(yàn)pe文件的有效性對(duì)于有效地感染文件起著非常大的作用,因?yàn)橹挥性谇宄诵枰桓腥镜牟《疚募怯行У膒e文件時(shí),才可以感染并且達(dá)到效果。如何才能校驗(yàn)指定文件是否為一有效pe文件呢? 這個(gè)問題很難回答,完全取決于想要的精準(zhǔn)程度??梢詸z驗(yàn)pe文件格式里的各個(gè)數(shù)據(jù)結(jié)構(gòu),或者僅校驗(yàn)一些關(guān)鍵數(shù)

36、據(jù)結(jié)構(gòu)。大多數(shù)情況下,沒有必要校驗(yàn)文件里的每一個(gè)數(shù)據(jù)結(jié)構(gòu),只要一些關(guān)鍵數(shù)據(jù)結(jié)構(gòu)有效,我們就認(rèn)為是有效的pe文件了。(一)校驗(yàn)程序流程1、先檢驗(yàn)文件頭部第一個(gè)字的值是否等于 image_dos_signature (5a4dh,即mz),是則 dos mz header 有效。 2、os mz header 有效后,就可用e_lfanew(3ch處來(lái))來(lái)定位 pe header 了。 3、header 的第一個(gè)字的值是否等于 image_nt_header (4550h,即pe)。如果前后兩個(gè)值都匹配,那我們就認(rèn)為該文件是一個(gè)有效的pe文件。(二)校驗(yàn)程序核心部分代碼的實(shí)現(xiàn)如下:1、已經(jīng)指向im

37、age_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 。2、位到pe header,需要讀取dos mz header中的e_lfanew域值。該域含有pe header在文件中相對(duì)文件首部的偏移

38、量。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 .endif三、病毒重定位(一)為什么要重定位病毒首先第一步就需要重定位,那到底為什么要重定位呢?我們?cè)趯懻3绦虻臅r(shí)候根本不用去關(guān)心變量(常量)的位置,因?yàn)樵闯绦蛟诰?/p>

39、譯的時(shí)候它的內(nèi)存中的位置都被計(jì)算好了。程序裝入內(nèi)存時(shí),系統(tǒng)不會(huì)為它重定位。編程時(shí)我們需要用到變量(常量)的時(shí)候直接用變量名訪問(編譯后就是通過(guò)偏移地址訪問)就行了。同時(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程序中),由于病毒體對(duì)變量var的引用還是對(duì)內(nèi)存地址004010xxh的引用(病毒

40、的這段二進(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è)語(yǔ)句執(zhí)行的時(shí)候,它會(huì)先將返回地址(即緊接著call語(yǔ)句之后的那條語(yǔ)句在內(nèi)存中的真正地址

41、)壓入堆棧,然后將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)1、語(yǔ)句執(zhí)行之后,堆棧頂端為relocate在內(nèi)存中的真正地址。2、句將relocate在內(nèi)存中的真正地址存放在ebp寄存器中。3、在內(nèi)存中的真實(shí)地址。當(dāng)pop語(yǔ)句執(zhí)行完之后,ebp中放的是什么值呢?很明顯是病毒程序中標(biāo)號(hào)re

42、locate在內(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的重定位。還有一些其它重定位的方法,但是它們的基本原理都是一樣的。四、獲取api函數(shù)地址(一)為什么要獲取api函數(shù)地址win32 pe病毒和普通win32 pe程序一樣需要調(diào)用api函數(shù),但是普通的win32 pe程序里面有一個(gè)引入函數(shù)表

43、,該函數(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函數(shù)地址一直是病毒技術(shù)的一個(gè)非常重要的話題。要獲得api函數(shù)地址,我們首先需要獲得kernel32.dll的基地址。為什么我們需要先獲

44、得它呢?因?yàn)橐坏┪覀儷@得了kernel32.dll的基地址,那么獲得從kernel32引出的函數(shù)就成為了可能,即使用戶用到了其他的api(如從user32.dll中引出的)函數(shù)。則可以使用從kernel32中得到的loadlibrary函數(shù)和getprocaddress函數(shù)相結(jié)合得到其他api函數(shù)的地址。下面介紹一種獲得kernel32基地址的方法:利用host程序的返回地址,在其附近搜索kernel32模塊基地址。當(dāng)系統(tǒng)打開一個(gè)可執(zhí)行文件的時(shí)候,它會(huì)調(diào)用kernel32.dll中的createprocess函數(shù);createprocess函數(shù)在完成裝載應(yīng)用程序后,會(huì)先將一個(gè)返回地址壓入到堆棧

45、頂端,然后轉(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)用子程序類似??梢钥闯?,這個(gè)返回地址是在kernal32.dll模塊中。另外pe文件被裝入內(nèi)存時(shí)是按內(nèi)存頁(yè)對(duì)齊的,只要我們從返回地址按照頁(yè)對(duì)齊的邊界一頁(yè)一頁(yè)地往低地址搜索,就必然可以找到kernel32.dll的文件頭地址,即kernel32模塊的基地址。搜索kernel32基地址的核心代碼實(shí)現(xiàn)如下:mov ecx,esp xor edx,edxgetk32base:dec ecx

46、 .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. (1)將堆棧頂端的數(shù)據(jù)賦給ecx。(2) 逐字節(jié)比較驗(yàn)證,也可以一頁(yè)一頁(yè)地搜。(3)就是ecx+3ch(比較方式類似判斷pe文件的有效性第一步思想一致)。(4)dos header+stub值不會(huì)太大,不可能超過(guò)4096byt

47、e。(5)看image_base值是否等于ecx即模塊起始值。(6)如果是,就認(rèn)為找到kernel32的base值。2、利用kerner32基地址來(lái)獲取api函數(shù)地址在參照了引出表結(jié)構(gòu)之后,那么獲得api函數(shù)地址的方法就不理解了。(1)引出表的結(jié)構(gòu)定義如下:00hcharacteristics04htimedatestamp文件生成時(shí)間08hmajorvesion主版本號(hào)0ahminervesion次版本號(hào)0chname指向dll的名字10hbase開始的序號(hào)14hnumberoffunctionaddressoffunctions的項(xiàng)數(shù)18hnumberofnamesaddressofnam

48、es的項(xiàng)數(shù)1chaddressoffunctions指向函數(shù)地址的數(shù)組20haddressofnames指向函數(shù)名稱的地址的數(shù)組24haddressofnameordinals指向輸入序列號(hào)的數(shù)組只要理解好最后5項(xiàng)的具體含義,那么搜索api地址的方法就顯而易見了。addressoffunctions指向一個(gè)數(shù)組,這個(gè)數(shù)組的每個(gè)成員就指向了一個(gè)api函數(shù)的地址,也就是說(shuō)我們只要從這個(gè)數(shù)組里獲得了一個(gè)api函數(shù)的地址,那么我們就可以使用相應(yīng)的api函數(shù)了,但里面的api函數(shù)地址是按數(shù)組存放的,那么我們要使用一個(gè)指定的api函數(shù),就必須知道該api函數(shù)在數(shù)組中的具體的位置,也就是一個(gè)索引號(hào)。上面說(shuō)的

49、這個(gè)索引號(hào)則需要表中的最后2項(xiàng)來(lái)獲得,addressofnames 與addressofnameordinals指向2個(gè)數(shù)組,一個(gè)是函數(shù)名字的數(shù)組,一個(gè)是函數(shù)名稱的數(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ù)在addressoffunctions中的索引號(hào)了。解決以上問題后,我們就知道了如何利用引出表的結(jié)構(gòu)來(lái)查找我們需要的函數(shù)地

50、址了。但我們還得需要獲得引出表的結(jié)構(gòu)的地址,其實(shí)方法也比較簡(jiǎn)單,pe文件中可選映像頭中60h有一個(gè)數(shù)據(jù)目錄表datadirectory,該目錄表的第一個(gè)數(shù)據(jù)目錄就存放了導(dǎo)出表結(jié)構(gòu)的地址。(2)api函數(shù)名稱利用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ù)名稱地址表的第一項(xiàng)開始,在循環(huán)中將每一項(xiàng)定義的函數(shù)名與要查找的函數(shù)名比較,如果沒有任何一個(gè)函數(shù)名符合

51、,說(shuō)明文件中沒有指定名稱的函數(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ù)名稱來(lái)查找api函數(shù)地址。五、文件操作(一)件搜索1、件搜索函數(shù)搜索文件是病毒尋找目標(biāo)文件的非常重要的功能。在

52、win32匯編中,通常采用三個(gè)api函數(shù)進(jìn)行文件搜索。(1)dfirstfile 該函數(shù)根據(jù)文件名查找文件。(2)dnextfile 該函數(shù)根據(jù)調(diào)用findfirstfile函數(shù)時(shí)指定的一個(gè)文件名查找下一個(gè)文件。(3)dclose 該函數(shù)用來(lái)關(guān)閉由findfirstfile函數(shù)創(chuàng)建的一個(gè)搜索句柄。2、件搜索算法文件搜索一般采用遞歸算法進(jìn)行搜索,也可以采用非遞歸搜索方法,這里我們僅介紹遞歸的算法findfile proc(1)到的目錄為當(dāng)前工作目錄。(2)文件(*.*)。(3)搜索完畢?是則返回,否則繼續(xù)。(4)件還是目錄?是目錄則調(diào)用自身函數(shù)findfile,否則繼續(xù)。(5)如符合感染條件,則

53、調(diào)用感染模塊,否則繼續(xù)。(6)搜索下一個(gè)文件(findnextfile),轉(zhuǎn)到繼續(xù)。findfile endp(一) 內(nèi)存映射文件內(nèi)存映射文件提供了一組獨(dú)立的函數(shù),是應(yīng)用程序能夠通過(guò)內(nèi)存指針像訪問內(nèi)存一樣對(duì)磁盤上的文件進(jìn)行訪問。這組內(nèi)存映射文件函數(shù)將磁盤上的文件的全部或者部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)文件內(nèi)容的訪問就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存訪問一樣簡(jiǎn)單。這樣,對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大大地提高了訪問的速度,這對(duì)于計(jì)算機(jī)病毒來(lái)說(shuō),對(duì)減少資源占有是非常重要的。1、內(nèi)存映射文件函數(shù)(1)createfilemapping該函數(shù)用來(lái)創(chuàng)建一個(gè)新的文件映射對(duì)象。(2)m

54、apviewoffile 該函數(shù)將一個(gè)文件映射對(duì)象映射到當(dāng)前應(yīng)用程序的地址空間。(3)unmapviewoffile 該函數(shù)在當(dāng)前應(yīng)用程序的內(nèi)存地址空間解除對(duì)一個(gè)文件映射對(duì)象的映射。(4)closehandle 該函數(shù)用來(lái)關(guān)閉一個(gè)內(nèi)核對(duì)象,其中包括文件、文件映射、進(jìn)程、線程、安全和同步對(duì)象等。2、內(nèi)存映射文件方法在計(jì)算機(jī)病毒中,通常采用如下幾個(gè)步驟:(1)調(diào)用createfile函數(shù)打開想要映射的host程序,返回文件句柄hfile。(2)調(diào)用createfilemapping函數(shù)生成一個(gè)建立基于host文件句柄hfile的內(nèi)存映射對(duì)象,返回內(nèi)存映射對(duì)象句柄hmap。(3)調(diào)用mapviewoffile函數(shù)將整個(gè)文件(一般還要加上病毒體的大小)映射到內(nèi)存中。得到指向映射到內(nèi)存的第一個(gè)字節(jié)的指針(pmem)。(4)用剛才得到的指針pmem對(duì)整個(gè)host文件進(jìn)行操作,對(duì)host程序進(jìn)行病毒感染。(5)調(diào)用unmapviewfile函數(shù)解除文件映射,傳入?yún)?shù)是pmem。(6)調(diào)用closehandle來(lái)關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是hmap。(7)調(diào)用closehandle來(lái)關(guān)閉host文件,傳入?yún)?shù)是hfile。(二)感染pe文件1、文件感染操作相關(guān)函數(shù)(1)createfile

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論