版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第三章計(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的樂(lè)園(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)的過(guò)程:MBR和分區(qū)表裝載DOS引導(dǎo)區(qū)運(yùn)行DOS引導(dǎo)程序加載IO.sysMSDOS.sys加載DOS1正常的引導(dǎo)過(guò)程引導(dǎo)型病毒從軟盤(pán)加載到內(nèi)存尋找DOS引導(dǎo)區(qū)的位置將DOS引導(dǎo)區(qū)移動(dòng)到別的位置病毒將自己寫(xiě)入原DOS引導(dǎo)區(qū)的位置2用被感染的軟盤(pán)啟動(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)康摹客ㄟ^(guò)實(shí)驗(yàn),了解引導(dǎo)區(qū)病毒的感染對(duì)象和感染特征,重點(diǎn)學(xué)習(xí)引導(dǎo)病毒的感染機(jī)制和恢復(fù)感染染毒文件的方法,提高匯編語(yǔ)言的使用能力?!緦?shí)驗(yàn)內(nèi)容】本實(shí)驗(yàn)需要完成的內(nèi)容如下:引導(dǎo)階段病毒由軟盤(pán)感染硬盤(pán)實(shí)驗(yàn)。通過(guò)觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學(xué)習(xí)病毒的感染機(jī)制;閱讀和分析病毒的代碼。DOS運(yùn)行時(shí)病毒由硬盤(pán)感染軟盤(pán)的實(shí)現(xiàn)。通過(guò)觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學(xué)習(xí)病毒的感染機(jī)制;閱讀和分析病毒的代碼?!緦?shí)驗(yàn)環(huán)境】VMWareWorkstation5.5.3MS-DOS7.10【實(shí)驗(yàn)素材】附書(shū)資源experiment目錄下的bootvirus目錄。實(shí)驗(yàn)過(guò)程第一步:環(huán)境安裝安裝虛擬機(jī)VMWare,在虛擬機(jī)環(huán)境內(nèi)安裝MS-DOS7.10環(huán)境。安裝步驟參考附書(shū)資源。第二步:軟盤(pán)感染硬盤(pán)1、運(yùn)行虛擬機(jī),檢查目前虛擬硬盤(pán)是否含有病毒。如圖表示沒(méi)有病毒正常啟動(dòng)硬盤(pán)的狀態(tài)。2、在附書(shū)資源中拷貝含有病毒的虛擬軟盤(pán)virus.img。3、將含有病毒的軟盤(pán)插入虛擬機(jī)引導(dǎo),可以看到閃動(dòng)的字符*^_^*,如左圖4。按任意鍵進(jìn)入右圖畫(huà)面。第三步:驗(yàn)證硬盤(pán)已經(jīng)被感染1、取出虛擬軟盤(pán),通過(guò)硬盤(pán)引導(dǎo),再次出現(xiàn)了病毒的畫(huà)面。2、按任意鍵后正常引導(dǎo)了dos系統(tǒng)??梢?jiàn),硬盤(pán)已經(jīng)被感染。第四步:硬盤(pán)感染軟盤(pán)1、下載empty.img,并且將它插入虛擬機(jī),啟動(dòng)電腦,由于該盤(pán)為空,如圖顯示。2、取出虛擬軟盤(pán),從硬盤(pán)啟動(dòng),通過(guò)命令formatA:/q快速格式化軟盤(pán)??赡芴崾境鲥e(cuò),這時(shí)只要按R即可。如圖所示。3、成功格式化后的結(jié)果如圖所示。4、不要取出虛擬軟盤(pán),重新啟動(dòng)虛擬機(jī),這時(shí)是從empty.img引導(dǎo),可以看到病毒的畫(huà)面,如左圖所示。按任意鍵進(jìn)入如右圖畫(huà)面??梢?jiàn),病毒已經(jīng)成功由硬盤(pán)傳染給了軟盤(pán)。
二、16位COM可執(zhí)行文件病毒原理及實(shí)驗(yàn)COM格式最簡(jiǎn)單的可執(zhí)行文件就是DOS下的以COM(CopyOfMemory)文件。COM格式文件最大64KB,內(nèi)含16位程序的二進(jìn)制代碼映像,沒(méi)有重定位信息。COM文件包含程序二進(jìn)制代碼的一個(gè)絕對(duì)映像,也就是說(shuō),為了運(yùn)行程序準(zhǔn)確的處理器指令和內(nèi)存中的數(shù)據(jù),DOS通過(guò)直接把該映像從文件拷貝到內(nèi)存來(lái)加載COM程序,系統(tǒng)不需要作重定位工作。加載COM程序DOS嘗試分配內(nèi)存。因?yàn)镃OM程序必須位于一個(gè)64K的段中,所以COM文件的大小不能超過(guò)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后立即開(kāi)始(偏移100H)加載COM文件,它置SS、DS和ES為PSP的段地址,接著創(chuàng)建一個(gè)堆棧。DOS通過(guò)把控制傳遞偏移100H處的指令而啟動(dòng)程序。程序設(shè)計(jì)者必須保證COM文件的第一條指令是程序的入口點(diǎn)。因?yàn)槌绦蚴窃谄?00H處加載,因此所有代碼和數(shù)據(jù)偏移也必須相對(duì)于100H。匯編語(yǔ)言程序設(shè)計(jì)者可通過(guò)置程序的初值為100H而保證這一點(diǎn)(例如,通過(guò)在源代碼的開(kāi)始使用語(yǔ)句org100H)。PSP結(jié)構(gòu)偏移大小
長(zhǎng)度(Byte)
說(shuō)明
0000h
02
中斷20H
0002h
02
以節(jié)計(jì)算的內(nèi)存大?。ɡ盟煽闯鍪欠窀腥疽龑?dǎo)型病毒)
0004h
01
保留
0005h
05
至DOS的長(zhǎng)調(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ù)長(zhǎng)度
0081h
127
命令行參數(shù)MZ格式MZ格式:COM發(fā)展下去就是MZ格式的可執(zhí)行文件,這是DOS中具有重定位功能的可執(zhí)行文件格式。MZ可執(zhí)行文件內(nèi)含16位代碼,在這些代碼之前加了一個(gè)文件頭,文件頭中包括各種說(shuō)明數(shù)據(jù),例如,第一句可執(zhí)行代碼執(zhí)行指令時(shí)所需要的文件入口點(diǎn)、堆棧的位置、重定位表等。裝載過(guò)程:操作系統(tǒng)根據(jù)文件頭的信息將代碼部分裝入內(nèi)存,然后根據(jù)重定位表修正代碼,最后在設(shè)置好堆棧后從文件頭中指定的入口開(kāi)始執(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)讀取部分磁盤(pán)文件,并生成一個(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文件病毒原理感染過(guò)程:將開(kāi)始的3個(gè)字節(jié)保存在orgcode中.將這3個(gè)字節(jié)更改為0E9H和COM文件的實(shí)際大小的二進(jìn)制編碼。將病毒寫(xiě)入原COM文件的后邊。在病毒的返回部分,將3個(gè)字節(jié)改為0E9H和表達(dá)式(當(dāng)前地址-COM文件的實(shí)際大?。《敬a大?。┑亩M(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)從附書(shū)資源“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參見(jiàn)附書(shū)源代碼。三、32位操作系統(tǒng)病毒示例分析
1P(pán)E文件結(jié)構(gòu)及其運(yùn)行原理2Win32文件型病毒編制技術(shù)3從ring3到ring0概述1P(pán)E文件結(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的支持公開(kāi)的未公開(kāi)的技術(shù)包括:2.1病毒的重定技術(shù)為什么需要重定位?正常程序的變量和函數(shù)的相對(duì)地址都是預(yù)先計(jì)算好的。病毒是附加在宿主程序中的程序段,其問(wèn)題在于:病毒變量和病毒函數(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è)依附在正常程序中的代碼段,沒(méi)有自己的引入表思路:去動(dòng)態(tài)連接庫(kù)中尋找---〉找相應(yīng)連接庫(kù)(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)存地址空間,成為它的一部分——這樣一來(lá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;如果上面沒(méi)有找到,則使用Win9x的KERNEL地址.break.endif.endwmovhKernel32,edi;把找到的KERNEL32.DLL的基地址保存起來(lái)
b)對(duì)相應(yīng)操作系統(tǒng)分別給出固定的Kernel32模塊的基地址對(duì)于不同的windows操作系統(tǒng)來(lái)說(shuō),Kernel32模塊的地址是固定的,甚至一些API函數(shù)的大概位置都是固定的。Windows98為BFF70000Windows2000為77E80000 WindowsXP為77E60000缺點(diǎn)是兼容性差GetAPI在得到了Kernel32的模塊地址以后,我們就可以在該模塊中搜索我們所需要的API地址。對(duì)于給定的API,可以通過(guò)直接搜索Kernel32.dll導(dǎo)出表的方法來(lái)獲得其地址.同樣我們也可以先搜索出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ù)用來(lái)關(guān)閉由FindFirstFile函數(shù)創(chuàng)建的一個(gè)搜索句柄;WIN32_FIND_DATA:該結(jié)構(gòu)中存放著找到文件的詳細(xì)信息。FindFileProca)
指定找到的目錄為當(dāng)前工作目錄b)
開(kāi)始搜索文件(*.*)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)用程序能夠像訪問(wèn)內(nèi)存一樣對(duì)磁盤(pán)上的文件進(jìn)行訪問(wèn)。這組內(nèi)存映射文件函數(shù)將磁盤(pán)上的文件的全部或者部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)文件內(nèi)容的訪問(wèn)就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存訪問(wèn)一樣簡(jiǎn)單。這樣,對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大大地提高了訪問(wèn)的速度,這對(duì)于計(jì)算機(jī)病毒來(lái)說(shuō),對(duì)減少資源占有是非常重要的。應(yīng)用步驟a)調(diào)用CreateFile函數(shù)打開(kāi)想要映射的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來(lái)關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是hMap。g)調(diào)用CloseHandle來(lái)關(guān)閉HOST文件,傳入?yún)?shù)是hFile。2.5病毒如何感染其他文件PE病毒感染其他文件的常見(jiàn)方法是在文件中添加一個(gè)新節(jié),然后,把病毒代碼和病毒執(zhí)行后返回宿主程序的代碼寫(xiě)入新添加的節(jié)中,同時(shí)修改PE文件頭中入口點(diǎn)(AddressOfEntryPoint),使其指向新添加的病毒代碼入口。這樣,當(dāng)程序運(yùn)行時(shí),首先執(zhí)行病毒代碼,當(dāng)病毒代碼執(zhí)行完成后才轉(zhuǎn)向執(zhí)行宿主程序。病毒感染其他文件的步驟1.判斷目標(biāo)文件開(kāi)始的兩個(gè)字節(jié)是否為“MZ”。2.判斷PE文件標(biāo)記“PE”。3.判斷感染標(biāo)記,如果已被感染過(guò)則跳出繼續(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é)表的末尾偏移(緊接其后用于寫(xiě)入一個(gè)新的病毒節(jié)信息)節(jié)表起始位置+節(jié)的個(gè)數(shù)*(每個(gè)節(jié)表占用的字節(jié)數(shù)28H)=節(jié)表的末尾偏移。7.開(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ì)算出病毒入口位置。上一個(gè)節(jié)在內(nèi)存中的開(kāi)始偏移地址+(上一個(gè)節(jié)的大小/節(jié)對(duì)齊+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,以便返回宿主并繼續(xù)執(zhí)行。h)更新SizeOfImage(內(nèi)存中整個(gè)PE映像尺寸=原SizeOfImage+病毒節(jié)經(jīng)過(guò)內(nèi)存節(jié)對(duì)齊后的大?。?。i)寫(xiě)入感染標(biāo)記(后面例子中是放在PE頭中)。j)在新添加的節(jié)中寫(xiě)入病毒代碼。ECX=病毒長(zhǎng)度ESI=病毒代碼位置(并不一定等于病毒執(zhí)行代碼開(kāi)始位置)EDI=病毒節(jié)寫(xiě)入位置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)。通過(guò)該實(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)步驟】文件位置:附書(shū)資源目錄\Experiment\winpe。使用編譯環(huán)境打開(kāi)源代碼工程,編譯后可以生成可執(zhí)行文件winpe.exe。預(yù)備步驟:找任意一個(gè)Win32下的EXE文件作為查看對(duì)象。實(shí)驗(yàn)內(nèi)容:運(yùn)行winpe.exe,并打開(kāi)任一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í)病毒原理的目的是為了更好地防治病毒,而不是教各位讀者編寫(xiě)能運(yùn)行于實(shí)際環(huán)境的病毒?!緦?shí)驗(yàn)?zāi)康摹苛私馕募筒《镜幕局圃煸?。了解病毒的感染、破壞機(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)步驟】文件位置:附書(shū)資源目錄\Experiment\win32virus。目錄中的virus.rar包中包括Virus.exe(編譯的病毒程序)、軟件使用說(shuō)明書(shū).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)容:通過(guò)運(yùn)行病毒程序觀看各步的提示以了解病毒的內(nèi)在機(jī)制。詳細(xì)的演示步驟參見(jiàn)教學(xué)PPT?!緦?shí)驗(yàn)注意事項(xiàng)】本病毒程序用于實(shí)驗(yàn)?zāi)康?,?qǐng)妥善使用。在測(cè)試病毒程序前,請(qǐng)先關(guān)閉殺毒軟件的自動(dòng)防護(hù)功能或直接關(guān)閉殺毒軟件。本程序是在開(kāi)發(fā)時(shí)面向?qū)嶒?yàn)演示用的,側(cè)重于演示和說(shuō)明病毒的內(nèi)在原理,破壞功能有限;而且前流行的病毒破壞方式比較嚴(yán)重,而且發(fā)作方式非常隱蔽,千萬(wàn)不要把其他病毒程序采用本例的方式來(lái)進(jìn)行直接運(yùn)行測(cè)試。測(cè)試完畢后,請(qǐng)注意病毒程序的清除,以免誤操作破壞計(jì)算機(jī)上的其他程序。32位PE可執(zhí)行文件型病毒詳細(xì)步驟
病毒引導(dǎo)說(shuō)明:
文件型病毒,沒(méi)有引導(dǎo)部分演示
病毒傳染說(shuō)明:
傳染范圍:Virus.exe所在目錄
傳染目標(biāo):可執(zhí)行文件(.exe)
傳染過(guò)程:搜索目錄內(nèi)的可執(zhí)行文件,逐個(gè)感染
病毒觸發(fā)說(shuō)明:
觸發(fā)條件:運(yùn)行Virus.exe程序或被Virus.exe感染的程序文件型病毒功能說(shuō)明:
病毒破壞說(shuō)明:
破壞能力:無(wú)害型傳染時(shí)減少磁盤(pán)的可用空
溫馨提示
- 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年專業(yè)版承包建筑工程合同(4篇)
- 2025年專利使用許可合同簡(jiǎn)單版(4篇)
- 2024版儲(chǔ)油罐購(gòu)銷合同
- 2024年股權(quán)轉(zhuǎn)讓合同:關(guān)于轉(zhuǎn)讓某科技公司2024年度股份的協(xié)議2篇
- 2024版led燈具采購(gòu)合同范本
- 2024版全新電工勞動(dòng)合同
- 2024招標(biāo)文件合同條款
- 2024年綠色建筑材料供應(yīng)合同協(xié)議3篇
- 2024版國(guó)際貨物運(yùn)輸保險(xiǎn)合同
- 2024物業(yè)服務(wù)合同范文:城市綜合體物業(yè)運(yùn)營(yíng)管理3篇
- 教育綜合體項(xiàng)目策劃書(shū)
- 軟件開(kāi)發(fā)項(xiàng)目服務(wù)方案
- 2024版質(zhì)量管理培訓(xùn)
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 2024至2030年中國(guó)液體罐式集裝箱數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 四川省2024年中考數(shù)學(xué)試卷十七套合卷【附答案】
- 家用電子產(chǎn)品維修工(中級(jí))職業(yè)技能鑒定考試題庫(kù)(含答案)
- 無(wú)脊椎動(dòng)物課件-2024-2025學(xué)年人教版生物七年級(jí)上冊(cè)
- 2024年銀發(fā)健康經(jīng)濟(jì)趨勢(shì)與展望報(bào)告:新老人、新需求、新生態(tài)-AgeClub
- 2024年江西省“振興杯”家務(wù)服務(wù)員競(jìng)賽考試題庫(kù)(含答案)
- 吉林省2024年中考物理試題(含答案)
評(píng)論
0/150
提交評(píng)論