第4章傳統(tǒng)計(jì)算機(jī)病毒_第1頁
第4章傳統(tǒng)計(jì)算機(jī)病毒_第2頁
第4章傳統(tǒng)計(jì)算機(jī)病毒_第3頁
第4章傳統(tǒng)計(jì)算機(jī)病毒_第4頁
第4章傳統(tǒng)計(jì)算機(jī)病毒_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第三章計(jì)算機(jī)病毒結(jié)構(gòu)分析本章學(xué)習(xí)目標(biāo)了解COM、EXE、NE、PE可執(zhí)行文件格式掌握引導(dǎo)型病毒原理及實(shí)驗(yàn)掌握COM文件病毒原理及實(shí)驗(yàn)掌握PE文件型病毒及實(shí)驗(yàn)總體概念DOS病毒定格在5000多種DOS是VXer的樂園(Aver)9x病毒ring3,ring02K病毒主要是ring3Windows文件格式變遷:COMEXE:MZ->NE->PEVxd:LE(16Bit,32Bit)章節(jié)主要內(nèi)容

一、引導(dǎo)型病毒編制原理及實(shí)驗(yàn)二、16位COM可執(zhí)行文件病毒原理及實(shí)驗(yàn)三、32位PE可執(zhí)行文件病毒原理及實(shí)驗(yàn)一、引導(dǎo)型病毒編制原理及實(shí)驗(yàn)PC引導(dǎo)流程加電CPU\BIOS初始化POST自檢引導(dǎo)區(qū)、分區(qū)表檢查發(fā)現(xiàn)操作系統(tǒng)執(zhí)行引導(dǎo)程序引導(dǎo)區(qū)病毒取得控制權(quán)的過程:MBR和分區(qū)表裝載DOS引導(dǎo)區(qū)運(yùn)行DOS引導(dǎo)程序加載IO.sysMSDOS.sys加載DOS1正常的引導(dǎo)過程引導(dǎo)型病毒從軟盤加載到內(nèi)存尋找DOS引導(dǎo)區(qū)的位置將DOS引導(dǎo)區(qū)移動(dòng)到別的位置病毒將自己寫入原DOS引導(dǎo)區(qū)的位置2用被感染的軟盤啟動(dòng)MBR和分區(qū)表將病毒的引導(dǎo)程序加載入內(nèi)存運(yùn)行病毒引導(dǎo)程序病毒駐留內(nèi)存原DOS引導(dǎo)程序執(zhí)行并加載DOS系統(tǒng)3病毒在啟動(dòng)時(shí)獲得控制權(quán)引導(dǎo)區(qū)病毒實(shí)驗(yàn)【實(shí)驗(yàn)?zāi)康摹客ㄟ^實(shí)驗(yàn),了解引導(dǎo)區(qū)病毒的感染對(duì)象和感染特征,重點(diǎn)學(xué)習(xí)引導(dǎo)病毒的感染機(jī)制和恢復(fù)感染染毒文件的方法,提高匯編語言的使用能力?!緦?shí)驗(yàn)內(nèi)容】本實(shí)驗(yàn)需要完成的內(nèi)容如下:引導(dǎo)階段病毒由軟盤感染硬盤實(shí)驗(yàn)。通過觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學(xué)習(xí)病毒的感染機(jī)制;閱讀和分析病毒的代碼。DOS運(yùn)行時(shí)病毒由硬盤感染軟盤的實(shí)現(xiàn)。通過觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學(xué)習(xí)病毒的感染機(jī)制;閱讀和分析病毒的代碼?!緦?shí)驗(yàn)環(huán)境】VMWareWorkstation5.5.3MS-DOS7.10【實(shí)驗(yàn)素材】附書資源experiment目錄下的bootvirus目錄。實(shí)驗(yàn)過程第一步:環(huán)境安裝安裝虛擬機(jī)VMWare,在虛擬機(jī)環(huán)境內(nèi)安裝MS-DOS7.10環(huán)境。安裝步驟參考附書資源。第二步:軟盤感染硬盤1、運(yùn)行虛擬機(jī),檢查目前虛擬硬盤是否含有病毒。如圖表示沒有病毒正常啟動(dòng)硬盤的狀態(tài)。2、在附書資源中拷貝含有病毒的虛擬軟盤virus.img。3、將含有病毒的軟盤插入虛擬機(jī)引導(dǎo),可以看到閃動(dòng)的字符*^_^*,如左圖4。按任意鍵進(jìn)入右圖畫面。第三步:驗(yàn)證硬盤已經(jīng)被感染1、取出虛擬軟盤,通過硬盤引導(dǎo),再次出現(xiàn)了病毒的畫面。2、按任意鍵后正常引導(dǎo)了dos系統(tǒng)??梢?,硬盤已經(jīng)被感染。第四步:硬盤感染軟盤1、下載empty.img,并且將它插入虛擬機(jī),啟動(dòng)電腦,由于該盤為空,如圖顯示。2、取出虛擬軟盤,從硬盤啟動(dòng),通過命令formatA:/q快速格式化軟盤??赡芴崾境鲥e(cuò),這時(shí)只要按R即可。如圖所示。3、成功格式化后的結(jié)果如圖所示。4、不要取出虛擬軟盤,重新啟動(dòng)虛擬機(jī),這時(shí)是從empty.img引導(dǎo),可以看到病毒的畫面,如左圖所示。按任意鍵進(jìn)入如右圖畫面??梢?,病毒已經(jīng)成功由硬盤傳染給了軟盤。

二、16位COM可執(zhí)行文件病毒原理及實(shí)驗(yàn)COM格式最簡單的可執(zhí)行文件就是DOS下的以COM(CopyOfMemory)文件。COM格式文件最大64KB,內(nèi)含16位程序的二進(jìn)制代碼映像,沒有重定位信息。COM文件包含程序二進(jìn)制代碼的一個(gè)絕對(duì)映像,也就是說,為了運(yùn)行程序準(zhǔn)確的處理器指令和內(nèi)存中的數(shù)據(jù),DOS通過直接把該映像從文件拷貝到內(nèi)存來加載COM程序,系統(tǒng)不需要作重定位工作。加載COM程序DOS嘗試分配內(nèi)存。因?yàn)镃OM程序必須位于一個(gè)64K的段中,所以COM文件的大小不能超過65,024(64K減去用于PSP的256字節(jié)和用于一個(gè)起始堆棧的至少256字節(jié))。如果DOS不能為程序、一個(gè)PSP、一個(gè)起始堆棧分配足夠內(nèi)存,則分配嘗試失敗。否則,DOS分配盡可能多的內(nèi)存(直至所有保留內(nèi)存),即使COM程序本身不能大于64K。在試圖運(yùn)行另一個(gè)程序或分配另外的內(nèi)存之前,大部分COM程序釋放任何不需要的內(nèi)存。分配內(nèi)存后,DOS在該內(nèi)存的頭256字節(jié)建立一個(gè)PSP(ProgramSegmentPrefix:程序段前綴)。創(chuàng)建PSP后,DOS在PSP后立即開始(偏移100H)加載COM文件,它置SS、DS和ES為PSP的段地址,接著創(chuàng)建一個(gè)堆棧。DOS通過把控制傳遞偏移100H處的指令而啟動(dòng)程序。程序設(shè)計(jì)者必須保證COM文件的第一條指令是程序的入口點(diǎn)。因?yàn)槌绦蚴窃谄?00H處加載,因此所有代碼和數(shù)據(jù)偏移也必須相對(duì)于100H。匯編語言程序設(shè)計(jì)者可通過置程序的初值為100H而保證這一點(diǎn)(例如,通過在源代碼的開始使用語句org100H)。PSP結(jié)構(gòu)偏移大小

長度(Byte)

說明

0000h

02

中斷20H

0002h

02

以節(jié)計(jì)算的內(nèi)存大?。ɡ盟煽闯鍪欠窀腥疽龑?dǎo)型病毒)

0004h

01

保留

0005h

05

至DOS的長調(diào)用

000Ah

02

INT22H入口IP

000Ch

02

INT22H入口CS

000Eh

02

INT23H入口IP

0010h

02

INT23H入口CS

0012h

02

INT24H入口IP

0014h

02

INT24H入口CS

0016h

02

父進(jìn)程的PSP段值(可測(cè)知是否被跟蹤)

0018h

14

存放20個(gè)SOFT號(hào)

002Ch

02

環(huán)境塊段地址(從中可獲知執(zhí)行的程序名)

002Eh

04

存放用戶棧地址指針

0032h

1E

保留

0050h

03

DOS調(diào)用(INT21H/RETF)

0053h

02

保留

0055h

07

擴(kuò)展的FCB頭

005Ch

10

格式化的FCB1

006Ch

10

格式化的FCB2

007Ch

04

保留

0080h

80

命令行參數(shù)長度

0081h

127

命令行參數(shù)MZ格式MZ格式:COM發(fā)展下去就是MZ格式的可執(zhí)行文件,這是DOS中具有重定位功能的可執(zhí)行文件格式。MZ可執(zhí)行文件內(nèi)含16位代碼,在這些代碼之前加了一個(gè)文件頭,文件頭中包括各種說明數(shù)據(jù),例如,第一句可執(zhí)行代碼執(zhí)行指令時(shí)所需要的文件入口點(diǎn)、堆棧的位置、重定位表等。裝載過程:操作系統(tǒng)根據(jù)文件頭的信息將代碼部分裝入內(nèi)存,然后根據(jù)重定位表修正代碼,最后在設(shè)置好堆棧后從文件頭中指定的入口開始執(zhí)行。DOS可以把MZ格式的程序放在任何它想要的地方。MZ標(biāo)志MZ文件頭其它信息重定位表的字節(jié)偏移量重定位表重定位表可重定位程序映像二進(jìn)制代碼//MZ格式可執(zhí)行程序文件頭structHeadEXE{WORDwType;//00HMZ標(biāo)志W(wǎng)ORDwLastSecSize;//02H最后扇區(qū)被使用的大小WORDwFileSize;//04H文件大小WORDwRelocNum;//06H重定位項(xiàng)數(shù)WORDwHeadSize;//08H文件頭大小WORDwReqMin;//0AH最小所需內(nèi)存WORDwReqMax;//0CH最大所需內(nèi)存WORDwInitSS;//0EHSS初值WORDwInitSP;//10HSP初值WORDwChkSum;//12H校驗(yàn)和WORDwInitIP;//14HIP初值WORDwInitCS;//16HCS初值WORDwFirstReloc;//18H第一個(gè)重定位項(xiàng)位置WORDwOverlap;//1AH覆蓋WORDwReserved[0x20];//1CH保留WORDwNEOffset;//3CHNE頭位置};

NE格式為了保持對(duì)DOS的兼容性并滿足Windows的需要,Win3.x中出現(xiàn)的NE格式的可執(zhí)行文件中保留了MZ格式的頭,同時(shí)NE文件又加了一個(gè)自己的頭,之后才是可執(zhí)行文件的可執(zhí)行代碼。NE類型包括了EXE、DLL、DRV和FON四種類型的文件。NE格式的關(guān)鍵特性是:它把程序代碼、數(shù)據(jù)、資源隔離在不同的可加載區(qū)中;藉由符號(hào)輸入和輸出,實(shí)現(xiàn)所謂的運(yùn)行時(shí)動(dòng)態(tài)鏈接。NE裝載16位的NE格式文件裝載程序(NELoader)讀取部分磁盤文件,并生成一個(gè)完全不同的數(shù)據(jù)結(jié)構(gòu),在內(nèi)存中建立模塊。當(dāng)代碼或數(shù)據(jù)需要裝入時(shí),裝載程序必須從全局內(nèi)存中分配出一塊,查找原始數(shù)據(jù)在文件的位置,找到位置后再讀取原始的數(shù)據(jù),最后再進(jìn)行一些修正。每一個(gè)16位的模塊(Module)要負(fù)責(zé)記住現(xiàn)在使用的所有段選擇符,該選擇符表示該段是否已經(jīng)被拋棄等信息。MS-DOS頭DOS文件頭保留區(qū)域Windows頭偏移DOSStub程序信息塊NE文件頭段表資源表駐留名表模塊引用表引入名字表入口表非駐留名表代碼段和數(shù)據(jù)段程序區(qū)重定位表3COM文件病毒原理感染過程:將開始的3個(gè)字節(jié)保存在orgcode中.將這3個(gè)字節(jié)更改為0E9H和COM文件的實(shí)際大小的二進(jìn)制編碼。將病毒寫入原COM文件的后邊。在病毒的返回部分,將3個(gè)字節(jié)改為0E9H和表達(dá)式(當(dāng)前地址-COM文件的實(shí)際大?。《敬a大小)的二進(jìn)制編碼,以便在執(zhí)行完病毒后轉(zhuǎn)向執(zhí)行原程序。E9xxxxResume:E9XXXXE9AAAAAAAAXXXX源代碼:jump源代碼示例講解演示COM病毒COM文件病毒實(shí)驗(yàn)(實(shí)驗(yàn)二)【實(shí)驗(yàn)?zāi)康摹空莆誄OM病毒的傳播原理?!緦?shí)驗(yàn)平臺(tái)】VMWareWorkstation5.5.3MS-DOS7.10MASM611

實(shí)驗(yàn)步驟(1)安裝虛擬機(jī)VMWare,安裝步驟參考網(wǎng)上下載的實(shí)驗(yàn)配套資料“解壓縮目錄\Application\MSDOS71\虛擬機(jī)上安裝MSDOS.doc”文檔。(2)在虛擬機(jī)環(huán)境內(nèi)安裝MS-DOS7.10環(huán)境。(3)在MS-DOSC:\MASM目錄下安裝MASM611,然后將binr目錄下的link.exe復(fù)制到bin目錄下。(4)從附書資源“experiment\com”下復(fù)制病毒程序Virus.asm及測(cè)試程序源代碼BeInfected.asm。(5)編譯鏈接BeInfected.asm,形成BeI測(cè)試程序。(6)編譯鏈接virus.asm,生成病毒程序virus.exe。(7)在C:\MASM\Bin目錄下建立del.txt文件,并且將BeI和病毒復(fù)制到此目錄下。(8)執(zhí)行BeI,觀察未感染前的運(yùn)行結(jié)果。(9)執(zhí)行virus.exe文件以感染BeI文件并且自動(dòng)刪除del.txt。(10)執(zhí)行BeI觀察感染后的結(jié)果?!境绦蛟创a】本實(shí)驗(yàn)以尾部感染COM文件的病毒為例子,其中待感染COM文件源代碼BeInfected.asm、病毒源文件源代碼virus.asm參見附書源代碼。三、32位操作系統(tǒng)病毒示例分析

1PE文件結(jié)構(gòu)及其運(yùn)行原理2Win32文件型病毒編制技術(shù)3從ring3到ring0概述1PE文件結(jié)構(gòu)及其運(yùn)行原理(1)PE文件格式總體結(jié)構(gòu)

PE(PortableExecutable:可移植的執(zhí)行體)是Win32環(huán)境自身所帶的可執(zhí)行文件格式。它的一些特性繼承自Unix的Coff(CommonObjectFileFormat)文件格式??梢浦驳膱?zhí)行體意味著此文件格式是跨win32平臺(tái)的,即使Windows運(yùn)行在非Intel的CPU上,任何win32平臺(tái)的PE裝載器都能識(shí)別和使用該文件格式。當(dāng)然,移植到不同的CPU上PE執(zhí)行體必然得有一些改變。除VxD和16位的Dll外,所有win32執(zhí)行文件都使用PE文件格式。因此,研究PE文件格式是我們洞悉Windows結(jié)構(gòu)的良機(jī)。PE文件結(jié)構(gòu)總體層次分布DOSMZheader‘MZ’格式頭DOSstubDos樁程序PEheaderPE文件頭Sectiontable節(jié)表Section1第1個(gè)節(jié)Section2第2個(gè)節(jié)……Sectionn第n個(gè)節(jié)2Win32文件型病毒編制技術(shù)Ring-3病毒的兼容性較好Ring-3病毒需要API的支持公開的未公開的技術(shù)包括:2.1病毒的重定技術(shù)為什么需要重定位?正常程序的變量和函數(shù)的相對(duì)地址都是預(yù)先計(jì)算好的。病毒是附加在宿主程序中的程序段,其問題在于:病毒變量和病毒函數(shù)的相對(duì)地址很難計(jì)算。解決方法:動(dòng)態(tài)找一個(gè)參照點(diǎn),然后再根據(jù)參照點(diǎn)的地址確定病毒函數(shù)和病毒變量的地址。calldeltadelta: popebp…leaeax,[ebp+(offsetvar1-offsetdelta)]參照量delta在內(nèi)存中的地址+變量var1與參考量之間的距離=變量var1在內(nèi)存中的真正地址舉例介紹dwVardd?call@F@@:popebxsubebx,offset@Bmoveax,[ebx+offsetdwVar]編譯文件(假設(shè))0040100000000000BYTE4DUP(4)00401004E800000000call00401009004010095Bpopebx;ebx=004010090040100A81EB09104000subebx,00401009;ebx=0004010108B8300104000moveax,dwordprt[ebx+00401000];moveax,00401000;moveax,dwVar如果被定位到00801000處0080100000000000BYTE4DUP(4)00801004E800000000call00801009008010095Bpopebx;ebx=008010090080100A81EB09104000subebx,00401009;ebx=00400000008010108B8300104000moveax,dwordprt[ebx+00401000];moveax,[00801000];moveax,dwVar2.2獲取API函數(shù)為什么要獲得API函數(shù)?正常程序用引入表獲得病毒只是一個(gè)依附在正常程序中的代碼段,沒有自己的引入表思路:去動(dòng)態(tài)連接庫中尋找---〉找相應(yīng)連接庫(kernel32,user32等)在執(zhí)行時(shí)的基地址。尋找基地址的方法包括(以kernel32為例):a)利用程序的返回地址,在其附近搜索Kernel32的基地址

Kernel32的push在應(yīng)用程序中用esp在堆棧中獲取。CallCreateProcessCreatePrcess入口Push返回地址Jmp應(yīng)用程序…PusheaxCallExitThread程序入口ret

OSkernel32.dll應(yīng)用程序?yàn)槭裁茨軌驈?/p>

4GB

的內(nèi)存中得到

Kernel32.dll

的基地址呢?其實(shí)是這樣的,Dll

有一個(gè)非常特殊的特性:當(dāng)有別的程序調(diào)用它的時(shí)候,它的文件映象就會(huì)動(dòng)態(tài)地映射到調(diào)用進(jìn)程的內(nèi)存地址空間。一般情況下,一個(gè)程序在運(yùn)行的時(shí)候,

Kernel32.dll

這個(gè)

Dll

都會(huì)被映射到該程序的內(nèi)存地址空間,成為它的一部分——這樣一來,我們就可以在宿主的內(nèi)存地址空間中搜索到

Kernel32.dll

的基地址了.例子GetKBase:movedi,[esp+04h];這里的esp+04h是不定的,主要看從程序第一條指令執(zhí)行到這里有多少push;操作,如果設(shè)為N個(gè)push,則這里的指令就是Movedi,[esp+N*4h]andedi,0FFFF0000h.whileTRUE.ifDWORDptr[edi]==IMAGE_DOS_SIGNATURE;判斷是否MZmovesi,ediaddesi,DWORDptr[esi+03Ch];esi指向PE標(biāo)志.ifDWORDptr[esi]==IMAGE_NT_SIGNATURE;是否有PE標(biāo)志.break;如果有跳出循環(huán).endif.endif

subedi,010000h;分配粒度是10000h,dll必然加載在xxxx0000h處.ifedi<MIN_KERNEL_SEARCH_BASE;MIN_KERNEL_SEARCH_BASE等于70000000Hmovedi,0bff70000h;如果上面沒有找到,則使用Win9x的KERNEL地址.break.endif.endwmovhKernel32,edi;把找到的KERNEL32.DLL的基地址保存起來

b)對(duì)相應(yīng)操作系統(tǒng)分別給出固定的Kernel32模塊的基地址對(duì)于不同的windows操作系統(tǒng)來說,Kernel32模塊的地址是固定的,甚至一些API函數(shù)的大概位置都是固定的。Windows98為BFF70000Windows2000為77E80000 WindowsXP為77E60000缺點(diǎn)是兼容性差GetAPI在得到了Kernel32的模塊地址以后,我們就可以在該模塊中搜索我們所需要的API地址。對(duì)于給定的API,可以通過直接搜索Kernel32.dll導(dǎo)出表的方法來獲得其地址.同樣我們也可以先搜索出GetProcAddress和LoadLibrary兩個(gè)API函數(shù)的地址,然后利用這兩個(gè)API函數(shù)得到我們所需要的API函數(shù)地址。2.3文件搜索

FindFirstFile:該函數(shù)根據(jù)文件名查找文件;FindNextFile:該函數(shù)根據(jù)調(diào)用FindFirstFile函數(shù)時(shí)指定的一個(gè)文件名查找下一個(gè)文件;FindClose:該函數(shù)用來關(guān)閉由FindFirstFile函數(shù)創(chuàng)建的一個(gè)搜索句柄;WIN32_FIND_DATA:該結(jié)構(gòu)中存放著找到文件的詳細(xì)信息。FindFileProca)

指定找到的目錄為當(dāng)前工作目錄b)

開始搜索文件(*.*)c)

該目錄搜索完畢?是則返回,否則繼續(xù)d)

找到文件還是目錄?是目錄則調(diào)用自身函數(shù)FindFile,否則繼續(xù)e)

是文件,如符合感染條件,則調(diào)用感染模塊,否則繼續(xù)f)

搜索下一個(gè)文件(FindNextFile),轉(zhuǎn)到C繼續(xù)FindFileEndp2.4內(nèi)存映射文件內(nèi)存映射文件提供了一組獨(dú)立的函數(shù),這些函數(shù)使應(yīng)用程序能夠像訪問內(nèi)存一樣對(duì)磁盤上的文件進(jìn)行訪問。這組內(nèi)存映射文件函數(shù)將磁盤上的文件的全部或者部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)文件內(nèi)容的訪問就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存訪問一樣簡單。這樣,對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大大地提高了訪問的速度,這對(duì)于計(jì)算機(jī)病毒來說,對(duì)減少資源占有是非常重要的。應(yīng)用步驟a)調(diào)用CreateFile函數(shù)打開想要映射的HOST程序,返回文件句柄hFile。b)調(diào)用CreateFileMapping函數(shù)生成一個(gè)建立基于HOST文件句柄hFile的內(nèi)存映射對(duì)象,返回內(nèi)存映射對(duì)象句柄hMap。c)調(diào)用MapViewOfFile函數(shù)將整個(gè)文件(一般還要加上病毒體的大小)映射到內(nèi)存中。得到指向映射到內(nèi)存的第一個(gè)字節(jié)的指針(pMem)。d)用剛才得到的指針pMem對(duì)整個(gè)HOST文件進(jìn)行操作,對(duì)HOST程序進(jìn)行病毒感染。e)調(diào)用UnmapViewFile函數(shù)解除文件映射,傳入?yún)?shù)是pMem。f)調(diào)用CloseHandle來關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是hMap。g)調(diào)用CloseHandle來關(guān)閉HOST文件,傳入?yún)?shù)是hFile。2.5病毒如何感染其他文件PE病毒感染其他文件的常見方法是在文件中添加一個(gè)新節(jié),然后,把病毒代碼和病毒執(zhí)行后返回宿主程序的代碼寫入新添加的節(jié)中,同時(shí)修改PE文件頭中入口點(diǎn)(AddressOfEntryPoint),使其指向新添加的病毒代碼入口。這樣,當(dāng)程序運(yùn)行時(shí),首先執(zhí)行病毒代碼,當(dāng)病毒代碼執(zhí)行完成后才轉(zhuǎn)向執(zhí)行宿主程序。病毒感染其他文件的步驟1.判斷目標(biāo)文件開始的兩個(gè)字節(jié)是否為“MZ”。2.判斷PE文件標(biāo)記“PE”。3.判斷感染標(biāo)記,如果已被感染過則跳出繼續(xù)執(zhí)行宿主程序,否則繼續(xù)。4.獲得DataDirectory(數(shù)據(jù)目錄)的個(gè)數(shù),(每個(gè)數(shù)據(jù)目錄信息占8個(gè)字節(jié))。5.得到節(jié)表起始位置。(數(shù)據(jù)目錄的偏移地址+數(shù)據(jù)目錄占用的字節(jié)數(shù)=節(jié)表起始位置)6.得到節(jié)表的末尾偏移(緊接其后用于寫入一個(gè)新的病毒節(jié)信息)節(jié)表起始位置+節(jié)的個(gè)數(shù)*(每個(gè)節(jié)表占用的字節(jié)數(shù)28H)=節(jié)表的末尾偏移。7.開始寫入節(jié)表a)寫入節(jié)名(8字節(jié))。b)寫入節(jié)的實(shí)際字節(jié)數(shù)(4字節(jié))。c)寫入新節(jié)在內(nèi)存中的開始偏移地址(4字節(jié)),同時(shí)可以計(jì)算出病毒入口位置。上一個(gè)節(jié)在內(nèi)存中的開始偏移地址+(上一個(gè)節(jié)的大小/節(jié)對(duì)齊+1)*節(jié)對(duì)齊=本節(jié)在內(nèi)存中的開始偏移地址。d)寫入本節(jié)(即病毒節(jié))在文件中對(duì)齊后的大小。e)寫入本節(jié)在文件中的開始位置。上節(jié)在文件中的開始位置+上節(jié)對(duì)齊后的大小=本節(jié)(即病毒)在文件中的開始位置。f)修改映像文件頭中的節(jié)表數(shù)目。g)修改AddressOfEntryPoint(即程序入口點(diǎn)指向病毒入口位置),同時(shí)保存舊的AddressOfEntryPoint,以便返回宿主并繼續(xù)執(zhí)行。h)更新SizeOfImage(內(nèi)存中整個(gè)PE映像尺寸=原SizeOfImage+病毒節(jié)經(jīng)過內(nèi)存節(jié)對(duì)齊后的大?。)寫入感染標(biāo)記(后面例子中是放在PE頭中)。j)在新添加的節(jié)中寫入病毒代碼。ECX=病毒長度ESI=病毒代碼位置(并不一定等于病毒執(zhí)行代碼開始位置)EDI=病毒節(jié)寫入位置k)將當(dāng)前文件位置設(shè)為文件末尾。2.6如何返回到宿主程序jmpoldAddressOfEntryPoint病毒演示病毒示例代碼PE文件格式實(shí)驗(yàn)(實(shí)驗(yàn)三)本實(shí)驗(yàn)是根據(jù)PE文件結(jié)構(gòu)及其運(yùn)行原理而設(shè)計(jì)的實(shí)驗(yàn)。通過該實(shí)驗(yàn),讀者可以了解PE文件的結(jié)構(gòu),為進(jìn)一步學(xué)習(xí)PE文件病毒原理奠定基礎(chǔ)?!緦?shí)驗(yàn)?zāi)康摹苛私釶E文件基本結(jié)構(gòu)?!緦?shí)驗(yàn)環(huán)境】運(yùn)行環(huán)境:Windows2000、Windows9x、WindowsNT以及WindowsXP。編譯環(huán)境:VisualStudio6.0【實(shí)驗(yàn)步驟】文件位置:附書資源目錄\Experiment\winpe。使用編譯環(huán)境打開源代碼工程,編譯后可以生成可執(zhí)行文件winpe.exe。預(yù)備步驟:找任意一個(gè)Win32下的EXE文件作為查看對(duì)象。實(shí)驗(yàn)內(nèi)容:運(yùn)行winpe.exe,并打開任一exe文件,選擇不同的菜單,可以查看到exe文件的內(nèi)部結(jié)構(gòu)。實(shí)驗(yàn)具體步驟可以參考本教材PPT。PE格式實(shí)驗(yàn)步驟WinPE察看器演示ExeDll源代碼級(jí)PE察看器演示32位文件型病毒實(shí)驗(yàn)(實(shí)驗(yàn)四)本實(shí)驗(yàn)是根據(jù)4.3.2節(jié)的文件型病毒編制技術(shù)而設(shè)計(jì)的原型病毒。之所以設(shè)計(jì)成原型病毒,是因?yàn)榭紤]到信息安全課程的特殊性。學(xué)習(xí)病毒原理的目的是為了更好地防治病毒,而不是教各位讀者編寫能運(yùn)行于實(shí)際環(huán)境的病毒?!緦?shí)驗(yàn)?zāi)康摹苛私馕募筒《镜幕局圃煸怼A私獠《镜母腥?、破壞機(jī)制,進(jìn)一步認(rèn)識(shí)病毒程序。掌握文件型病毒的特征和內(nèi)在機(jī)制?!緦?shí)驗(yàn)環(huán)境】運(yùn)行環(huán)境Windows2000、Windows9x、WindowsNT和WindowsXP?!緦?shí)驗(yàn)步驟】文件位置:附書資源目錄\Experiment\win32virus。目錄中的virus.rar包中包括Virus.exe(編譯的病毒程序)、軟件使用說明書.doc(請(qǐng)仔細(xì)閱讀)、源代碼詳解.doc(對(duì)代碼部分加入了部分注釋)以及pll.asm(程序源代碼)。Example.rar包中選取的是一個(gè)常用程序(ebookedit)安裝后的安裝目錄下的程序,用于測(cè)試病毒程序。預(yù)備步驟:將example.rar解壓縮到某個(gè)目錄,比如D:\virus\example。解壓完畢后,應(yīng)該在該目錄下有Buttons目錄、ebookcode.exe、ebookedit.exe、ebrand-it.exe以及keymaker.exe等程序,然后把virus.rar包解壓后的Virus.exe復(fù)制到該目錄中。實(shí)驗(yàn)內(nèi)容:通過運(yùn)行病毒程序觀看各步的提示以了解病毒的內(nèi)在機(jī)制。詳細(xì)的演示步驟參見教學(xué)PPT。【實(shí)驗(yàn)注意事項(xiàng)】本病毒程序用于實(shí)驗(yàn)?zāi)康模?qǐng)妥善使用。在測(cè)試病毒程序前,請(qǐng)先關(guān)閉殺毒軟件的自動(dòng)防護(hù)功能或直接關(guān)閉殺毒軟件。本程序是在開發(fā)時(shí)面向?qū)嶒?yàn)演示用的,側(cè)重于演示和說明病毒的內(nèi)在原理,破壞功能有限;而且前流行的病毒破壞方式比較嚴(yán)重,而且發(fā)作方式非常隱蔽,千萬不要把其他病毒程序采用本例的方式來進(jìn)行直接運(yùn)行測(cè)試。測(cè)試完畢后,請(qǐng)注意病毒程序的清除,以免誤操作破壞計(jì)算機(jī)上的其他程序。32位PE可執(zhí)行文件型病毒詳細(xì)步驟

病毒引導(dǎo)說明:

文件型病毒,沒有引導(dǎo)部分演示

病毒傳染說明:

傳染范圍:Virus.exe所在目錄

傳染目標(biāo):可執(zhí)行文件(.exe)

傳染過程:搜索目錄內(nèi)的可執(zhí)行文件,逐個(gè)感染

病毒觸發(fā)說明:

觸發(fā)條件:運(yùn)行Virus.exe程序或被Virus.exe感染的程序文件型病毒功能說明:

病毒破壞說明:

破壞能力:無害型傳染時(shí)減少磁盤的可用空間,在可執(zhí)行文件上附加一個(gè)節(jié)(4K)

破壞方式:攻擊文件在可執(zhí)行文件上附加一個(gè)節(jié)(4K),修改可執(zhí)行文件的入口地址

破壞范圍:Virus.exe所在目錄

病毒查殺說明:

病毒危害等級(jí):低,屬于無害型病毒

病毒特征類型:Bloodhound.W32.1(NortonAntiVirus檢測(cè)結(jié)果,這是Symantec軟件來臨時(shí)指代新病毒的文件)

病毒查殺方法:刪除所有被感染的文件

步驟0(預(yù)備):當(dāng)防病毒程序如NortonAntiVirus(注:此處的測(cè)試應(yīng)以當(dāng)前測(cè)試機(jī)器上安裝殺毒軟件為準(zhǔn),本示例運(yùn)行時(shí)機(jī)器上安裝的只有Norton

AntiVirus,故以此為參照)自動(dòng)防護(hù)功能打開時(shí),鼠標(biāo)光標(biāo)位于病毒程序上時(shí),會(huì)看到如下的圖例:圖例0

圖解說明:注解0-1表示NortonAntiVirus的自動(dòng)防護(hù)功能打開著;注解0-2就是防病毒軟件在用戶鼠標(biāo)置于圖例0中注解0-3處的Virus.exe程序上時(shí)的報(bào)警提示。

演示說明:作為自己開發(fā)的病毒程序,為了能夠更好的演示病毒的特征,在開發(fā)過程中我們沒有采用病毒的保護(hù)機(jī)制,故而防病毒軟件根據(jù)病毒程序的特征即可給出該程序?yàn)椴《境绦虻膱?bào)警提示。步驟1(運(yùn)行預(yù)備):關(guān)閉防病毒軟件的自動(dòng)防護(hù)功能,點(diǎn)擊病毒程序Virus.exe,運(yùn)行該程序,參見下圖:

圖例1

圖解說明:注解1-1表示NortonAntiVirus的自動(dòng)防護(hù)功能被關(guān)閉;注解1-2為病毒程序運(yùn)行主界面,本實(shí)驗(yàn)為了能夠比較直觀演示病毒程序,讓用戶知道正在運(yùn)行某個(gè)程序,故而有此主界面;但實(shí)際的病毒在感染其他程序前不會(huì)讓用戶感覺到病毒程序正在運(yùn)行的,往往都是隱藏運(yùn)行,或者是寄生在宿主程序中,這方面可參照病毒的引導(dǎo)機(jī)制的介紹。演示說明:詳見備注提示用戶是否觀看感染過程,如下圖:

圖例2

圖解說明:注解2-1提示用戶是否觀看病毒的感染過程,選擇“是”觀看感染過程,選擇“否”運(yùn)行原程序,由于該病毒程序不具有其他功能,所以選“否”時(shí)就直接關(guān)閉程序。

演示說明:該文件型病毒側(cè)重于病毒感染過程的演示,所以在感染部分的提示比較詳細(xì)。步驟2步驟3:開始感染提示,如下圖:圖例3

圖解說明:注解3-1提示用戶病毒程序開始感染其他程序。

演示說明:無步驟4:提示病毒感染范圍,如下圖:圖例4

圖解說明:注解4-1提示用戶病毒程序感染目標(biāo)是病毒程序所在目錄里的程序。

演示說明:為了減少病毒破壞的范圍,在編寫該病毒程序時(shí),限定其感染范圍為目錄內(nèi)感染,這也同時(shí)減少了病毒的破壞范圍;但就病毒特征而言,它還是很好的體現(xiàn)了病毒程序自我復(fù)制的這一特征。步驟5:提示當(dāng)前搜索到的合法的目標(biāo)程序,如下圖:圖例5

圖解說明:注解5-1提示說明當(dāng)前搜索的目標(biāo)程序是ebookedit.exe可執(zhí)行文件。

演示說明:無步驟6:判斷目標(biāo)程序是否是合法的可感染的程序,如下圖:圖例6

圖解說明:注解6-1提示目標(biāo)程序是否為合法的可感染程序。演示說明:Virus.exe可以感染的目標(biāo)程序?yàn)镻E文件中的可執(zhí)行文件(.exe),對(duì)于文件型病毒傳染機(jī)理可參照病毒的傳染機(jī)制。步驟7:感染情況說明提示,如下圖:圖例7

圖解說明:注解7-1提示對(duì)病毒的感染情況進(jìn)行說明。

演示說明:Virus.exe感染方式是在宿主文件附加一個(gè)節(jié)(4K),被感染的宿主程序運(yùn)行時(shí)先跳轉(zhuǎn)到該節(jié)處,運(yùn)行感染代碼;感染結(jié)束后再返回宿主程序的入口地址執(zhí)行宿主程序。這也體現(xiàn)了本病毒程序的破壞方式,作為一個(gè)演示的病毒程序,破壞程度應(yīng)該在可控范圍內(nèi),一些惡性的破壞方式可參照病毒的破壞機(jī)制說明。感染結(jié)果情況可參照步驟12的圖例,Virus.exe被防病毒軟件查出為病毒也正是因?yàn)樵摬僮?,具體參照步驟18的圖例。步驟8:感染過程隱藏說明(小技巧),如下圖:圖例8

圖解說明:注解8-1提示說明病毒程序加入中sleep的代碼的目的。

演示說明:此處加入該說明是也是為了說明是否存在病毒運(yùn)行的一種判斷思路,在手工查毒時(shí)有時(shí)就是依照該手段來判斷當(dāng)前機(jī)器是否有異常程序在運(yùn)行;如果機(jī)器沒有明顯的程序在運(yùn)行,而硬盤的指示燈一直閃爍,在高速運(yùn)轉(zhuǎn)著,則可粗略判斷機(jī)器有異常程序在運(yùn)行。防病毒的相關(guān)技術(shù)可參照防病毒基礎(chǔ)技術(shù)部分介紹。當(dāng)然對(duì)于病毒程序本身而言,為了避免被發(fā)現(xiàn),就需要通過sleep一段時(shí)間再進(jìn)行感染來降低被發(fā)現(xiàn)的可能性。步驟9:提示是否觀看其他程序感染過程,如下圖:圖例9

圖解說明:注解9-1提示是否觀看其他程序感染過程。

演示說明:無步驟10:病毒感染結(jié)束或用戶取消操作的提示,如下圖:圖例10

圖解說明:注解10-1是病毒感染結(jié)束或用戶取消操作后的提示。

演示說明:感染結(jié)束或用戶取消后就會(huì)運(yùn)行宿主程序。如果我們隱藏前面介紹的這些步驟的對(duì)話框和主界面,則給用戶的感覺就是運(yùn)行了一個(gè)正常的程序,只是程序啟動(dòng)運(yùn)行的時(shí)間相對(duì)慢了一點(diǎn),這也就體現(xiàn)了病毒程序的潛伏性這一特征。步驟11:該圖例與步驟6的圖例同步,該圖例是目標(biāo)程序不合法或已被感染后的提示,如下圖:圖例11

圖解說明:注解11-1是目標(biāo)程序不合法或已被感染的提示。

演示說明:Virus.exe可感染的目標(biāo)為標(biāo)準(zhǔn)的可執(zhí)行文件(絕大部分的.exe文件),在感染過程中對(duì)已感染的程序會(huì)進(jìn)行檢查是否已被感染,若已經(jīng)被感染則不再進(jìn)行感染:一可以提高病毒感染的效率,二可以防止多次感染使文件增大而引起用戶的察覺。步驟12:比較目標(biāo)程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12

圖解說明:注解12-1是KeyMaker.exe程序感染前的大小298KB(305,664字節(jié));注解12-2是KeyMaker.exe程序感染后的大小302KB(309,760)。步驟12:比較目標(biāo)程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12A步驟12:比較目標(biāo)程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12B圖解說明:圖例12A、12B、12C、12D是通過PEViewer程序打開目標(biāo)程序的圖示。對(duì)照?qǐng)D例12A和12B的注解:注解1表示KeyMaker.exe程序的節(jié)數(shù)由感染前的9個(gè)增加到10個(gè);注解2程序大小的變化由00043000增加到00044000;注解3是程序入口地址的變化由00043DE8變?yōu)?0054B93;注解4是程序占用空間的變化由00054000增加到00055000;注解5是程序校驗(yàn)和的變化由0004C1FB變?yōu)?004C543。步驟12:比較目標(biāo)程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12C

步驟12:比較目標(biāo)程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12D

圖解說明:對(duì)照?qǐng)D例12C和12D的注解:注

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論