版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第三章計算機病毒結構分析本章學習目標了解COM、EXE、NE、PE可執(zhí)行文件格式掌握引導型病毒原理及實驗掌握COM文件病毒原理及實驗掌握PE文件型病毒及實驗總體概念DOS病毒定格在5000多種DOS是VXer的樂園(Aver)9x病毒ring3,ring02K病毒主要是ring3Windows文件格式變遷:COMEXE:MZ->NE->PEVxd:LE(16Bit,32Bit)章節(jié)主要內(nèi)容
一、引導型病毒編制原理及實驗二、16位COM可執(zhí)行文件病毒原理及實驗三、32位PE可執(zhí)行文件病毒原理及實驗一、引導型病毒編制原理及實驗PC引導流程加電CPU\BIOS初始化POST自檢引導區(qū)、分區(qū)表檢查發(fā)現(xiàn)操作系統(tǒng)執(zhí)行引導程序引導區(qū)病毒取得控制權的過程:MBR和分區(qū)表裝載DOS引導區(qū)運行DOS引導程序加載IO.sysMSDOS.sys加載DOS1正常的引導過程引導型病毒從軟盤加載到內(nèi)存尋找DOS引導區(qū)的位置將DOS引導區(qū)移動到別的位置病毒將自己寫入原DOS引導區(qū)的位置2用被感染的軟盤啟動MBR和分區(qū)表將病毒的引導程序加載入內(nèi)存運行病毒引導程序病毒駐留內(nèi)存原DOS引導程序執(zhí)行并加載DOS系統(tǒng)3病毒在啟動時獲得控制權引導區(qū)病毒實驗【實驗目的】通過實驗,了解引導區(qū)病毒的感染對象和感染特征,重點學習引導病毒的感染機制和恢復感染染毒文件的方法,提高匯編語言的使用能力?!緦嶒瀮?nèi)容】本實驗需要完成的內(nèi)容如下:引導階段病毒由軟盤感染硬盤實驗。通過觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學習病毒的感染機制;閱讀和分析病毒的代碼。DOS運行時病毒由硬盤感染軟盤的實現(xiàn)。通過觸發(fā)病毒,觀察病毒發(fā)作的現(xiàn)象和步驟學習病毒的感染機制;閱讀和分析病毒的代碼?!緦嶒灜h(huán)境】VMWareWorkstation5.5.3MS-DOS7.10【實驗素材】附書資源experiment目錄下的bootvirus目錄。實驗過程第一步:環(huán)境安裝安裝虛擬機VMWare,在虛擬機環(huán)境內(nèi)安裝MS-DOS7.10環(huán)境。安裝步驟參考附書資源。第二步:軟盤感染硬盤1、運行虛擬機,檢查目前虛擬硬盤是否含有病毒。如圖表示沒有病毒正常啟動硬盤的狀態(tài)。2、在附書資源中拷貝含有病毒的虛擬軟盤virus.img。3、將含有病毒的軟盤插入虛擬機引導,可以看到閃動的字符*^_^*,如左圖4。按任意鍵進入右圖畫面。第三步:驗證硬盤已經(jīng)被感染1、取出虛擬軟盤,通過硬盤引導,再次出現(xiàn)了病毒的畫面。2、按任意鍵后正常引導了dos系統(tǒng)??梢?,硬盤已經(jīng)被感染。第四步:硬盤感染軟盤1、下載empty.img,并且將它插入虛擬機,啟動電腦,由于該盤為空,如圖顯示。2、取出虛擬軟盤,從硬盤啟動,通過命令formatA:/q快速格式化軟盤??赡芴崾境鲥e,這時只要按R即可。如圖所示。3、成功格式化后的結果如圖所示。4、不要取出虛擬軟盤,重新啟動虛擬機,這時是從empty.img引導,可以看到病毒的畫面,如左圖所示。按任意鍵進入如右圖畫面??梢姡《疽呀?jīng)成功由硬盤傳染給了軟盤。
二、16位COM可執(zhí)行文件病毒原理及實驗COM格式最簡單的可執(zhí)行文件就是DOS下的以COM(CopyOfMemory)文件。COM格式文件最大64KB,內(nèi)含16位程序的二進制代碼映像,沒有重定位信息。COM文件包含程序二進制代碼的一個絕對映像,也就是說,為了運行程序準確的處理器指令和內(nèi)存中的數(shù)據(jù),DOS通過直接把該映像從文件拷貝到內(nèi)存來加載COM程序,系統(tǒng)不需要作重定位工作。加載COM程序DOS嘗試分配內(nèi)存。因為COM程序必須位于一個64K的段中,所以COM文件的大小不能超過65,024(64K減去用于PSP的256字節(jié)和用于一個起始堆棧的至少256字節(jié))。如果DOS不能為程序、一個PSP、一個起始堆棧分配足夠內(nèi)存,則分配嘗試失敗。否則,DOS分配盡可能多的內(nèi)存(直至所有保留內(nèi)存),即使COM程序本身不能大于64K。在試圖運行另一個程序或分配另外的內(nèi)存之前,大部分COM程序釋放任何不需要的內(nèi)存。分配內(nèi)存后,DOS在該內(nèi)存的頭256字節(jié)建立一個PSP(ProgramSegmentPrefix:程序段前綴)。創(chuàng)建PSP后,DOS在PSP后立即開始(偏移100H)加載COM文件,它置SS、DS和ES為PSP的段地址,接著創(chuàng)建一個堆棧。DOS通過把控制傳遞偏移100H處的指令而啟動程序。程序設計者必須保證COM文件的第一條指令是程序的入口點。因為程序是在偏移100H處加載,因此所有代碼和數(shù)據(jù)偏移也必須相對于100H。匯編語言程序設計者可通過置程序的初值為100H而保證這一點(例如,通過在源代碼的開始使用語句org100H)。PSP結構偏移大小
長度(Byte)
說明
0000h
02
中斷20H
0002h
02
以節(jié)計算的內(nèi)存大?。ɡ盟煽闯鍪欠窀腥疽龑筒《荆?/p>
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
父進程的PSP段值(可測知是否被跟蹤)
0018h
14
存放20個SOFT號
002Ch
02
環(huán)境塊段地址(從中可獲知執(zhí)行的程序名)
002Eh
04
存放用戶棧地址指針
0032h
1E
保留
0050h
03
DOS調(diào)用(INT21H/RETF)
0053h
02
保留
0055h
07
擴展的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位代碼,在這些代碼之前加了一個文件頭,文件頭中包括各種說明數(shù)據(jù),例如,第一句可執(zhí)行代碼執(zhí)行指令時所需要的文件入口點、堆棧的位置、重定位表等。裝載過程:操作系統(tǒng)根據(jù)文件頭的信息將代碼部分裝入內(nèi)存,然后根據(jù)重定位表修正代碼,最后在設置好堆棧后從文件頭中指定的入口開始執(zhí)行。DOS可以把MZ格式的程序放在任何它想要的地方。MZ標志MZ文件頭其它信息重定位表的字節(jié)偏移量重定位表重定位表可重定位程序映像二進制代碼//MZ格式可執(zhí)行程序文件頭structHeadEXE{WORDwType;//00HMZ標志W(wǎng)ORDwLastSecSize;//02H最后扇區(qū)被使用的大小WORDwFileSize;//04H文件大小WORDwRelocNum;//06H重定位項數(shù)WORDwHeadSize;//08H文件頭大小WORDwReqMin;//0AH最小所需內(nèi)存WORDwReqMax;//0CH最大所需內(nèi)存WORDwInitSS;//0EHSS初值WORDwInitSP;//10HSP初值WORDwChkSum;//12H校驗和WORDwInitIP;//14HIP初值WORDwInitCS;//16HCS初值WORDwFirstReloc;//18H第一個重定位項位置WORDwOverlap;//1AH覆蓋WORDwReserved[0x20];//1CH保留WORDwNEOffset;//3CHNE頭位置};
NE格式為了保持對DOS的兼容性并滿足Windows的需要,Win3.x中出現(xiàn)的NE格式的可執(zhí)行文件中保留了MZ格式的頭,同時NE文件又加了一個自己的頭,之后才是可執(zhí)行文件的可執(zhí)行代碼。NE類型包括了EXE、DLL、DRV和FON四種類型的文件。NE格式的關鍵特性是:它把程序代碼、數(shù)據(jù)、資源隔離在不同的可加載區(qū)中;藉由符號輸入和輸出,實現(xiàn)所謂的運行時動態(tài)鏈接。NE裝載16位的NE格式文件裝載程序(NELoader)讀取部分磁盤文件,并生成一個完全不同的數(shù)據(jù)結構,在內(nèi)存中建立模塊。當代碼或數(shù)據(jù)需要裝入時,裝載程序必須從全局內(nèi)存中分配出一塊,查找原始數(shù)據(jù)在文件的位置,找到位置后再讀取原始的數(shù)據(jù),最后再進行一些修正。每一個16位的模塊(Module)要負責記住現(xiàn)在使用的所有段選擇符,該選擇符表示該段是否已經(jīng)被拋棄等信息。MS-DOS頭DOS文件頭保留區(qū)域Windows頭偏移DOSStub程序信息塊NE文件頭段表資源表駐留名表模塊引用表引入名字表入口表非駐留名表代碼段和數(shù)據(jù)段程序區(qū)重定位表3COM文件病毒原理感染過程:將開始的3個字節(jié)保存在orgcode中.將這3個字節(jié)更改為0E9H和COM文件的實際大小的二進制編碼。將病毒寫入原COM文件的后邊。在病毒的返回部分,將3個字節(jié)改為0E9H和表達式(當前地址-COM文件的實際大?。《敬a大?。┑亩M制編碼,以便在執(zhí)行完病毒后轉向執(zhí)行原程序。E9xxxxResume:E9XXXXE9AAAAAAAAXXXX源代碼:jump源代碼示例講解演示COM病毒COM文件病毒實驗(實驗二)【實驗目的】掌握COM病毒的傳播原理?!緦嶒炂脚_】VMWareWorkstation5.5.3MS-DOS7.10MASM611
實驗步驟(1)安裝虛擬機VMWare,安裝步驟參考網(wǎng)上下載的實驗配套資料“解壓縮目錄\Application\MSDOS71\虛擬機上安裝MSDOS.doc”文檔。(2)在虛擬機環(huán)境內(nèi)安裝MS-DOS7.10環(huán)境。(3)在MS-DOSC:\MASM目錄下安裝MASM611,然后將binr目錄下的link.exe復制到bin目錄下。(4)從附書資源“experiment\com”下復制病毒程序Virus.asm及測試程序源代碼BeInfected.asm。(5)編譯鏈接BeInfected.asm,形成BeI測試程序。(6)編譯鏈接virus.asm,生成病毒程序virus.exe。(7)在C:\MASM\Bin目錄下建立del.txt文件,并且將BeI和病毒復制到此目錄下。(8)執(zhí)行BeI,觀察未感染前的運行結果。(9)執(zhí)行virus.exe文件以感染BeI文件并且自動刪除del.txt。(10)執(zhí)行BeI觀察感染后的結果?!境绦蛟创a】本實驗以尾部感染COM文件的病毒為例子,其中待感染COM文件源代碼BeInfected.asm、病毒源文件源代碼virus.asm參見附書源代碼。三、32位操作系統(tǒng)病毒示例分析
1PE文件結構及其運行原理2Win32文件型病毒編制技術3從ring3到ring0概述1PE文件結構及其運行原理(1)PE文件格式總體結構
PE(PortableExecutable:可移植的執(zhí)行體)是Win32環(huán)境自身所帶的可執(zhí)行文件格式。它的一些特性繼承自Unix的Coff(CommonObjectFileFormat)文件格式??梢浦驳膱?zhí)行體意味著此文件格式是跨win32平臺的,即使Windows運行在非Intel的CPU上,任何win32平臺的PE裝載器都能識別和使用該文件格式。當然,移植到不同的CPU上PE執(zhí)行體必然得有一些改變。除VxD和16位的Dll外,所有win32執(zhí)行文件都使用PE文件格式。因此,研究PE文件格式是我們洞悉Windows結構的良機。PE文件結構總體層次分布DOSMZheader‘MZ’格式頭DOSstubDos樁程序PEheaderPE文件頭Sectiontable節(jié)表Section1第1個節(jié)Section2第2個節(jié)……Sectionn第n個節(jié)2Win32文件型病毒編制技術Ring-3病毒的兼容性較好Ring-3病毒需要API的支持公開的未公開的技術包括:2.1病毒的重定技術為什么需要重定位?正常程序的變量和函數(shù)的相對地址都是預先計算好的。病毒是附加在宿主程序中的程序段,其問題在于:病毒變量和病毒函數(shù)的相對地址很難計算。解決方法:動態(tài)找一個參照點,然后再根據(jù)參照點的地址確定病毒函數(shù)和病毒變量的地址。calldeltadelta: popebp…leaeax,[ebp+(offsetvar1-offsetdelta)]參照量delta在內(nèi)存中的地址+變量var1與參考量之間的距離=變量var1在內(nèi)存中的真正地址舉例介紹dwVardd?call@F@@:popebxsubebx,offset@Bmoveax,[ebx+offsetdwVar]編譯文件(假設)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ù)?正常程序用引入表獲得病毒只是一個依附在正常程序中的代碼段,沒有自己的引入表思路:去動態(tài)連接庫中尋找---〉找相應連接庫(kernel32,user32等)在執(zhí)行時的基地址。尋找基地址的方法包括(以kernel32為例):a)利用程序的返回地址,在其附近搜索Kernel32的基地址
Kernel32的push在應用程序中用esp在堆棧中獲取。CallCreateProcessCreatePrcess入口Push返回地址Jmp應用程序…PusheaxCallExitThread程序入口ret
OSkernel32.dll應用程序為什么能夠從
4GB
的內(nèi)存中得到
Kernel32.dll
的基地址呢?其實是這樣的,Dll
有一個非常特殊的特性:當有別的程序調(diào)用它的時候,它的文件映象就會動態(tài)地映射到調(diào)用進程的內(nèi)存地址空間。一般情況下,一個程序在運行的時候,
Kernel32.dll
這個
Dll
都會被映射到該程序的內(nèi)存地址空間,成為它的一部分——這樣一來,我們就可以在宿主的內(nèi)存地址空間中搜索到
Kernel32.dll
的基地址了.例子GetKBase:movedi,[esp+04h];這里的esp+04h是不定的,主要看從程序第一條指令執(zhí)行到這里有多少push;操作,如果設為N個push,則這里的指令就是Movedi,[esp+N*4h]andedi,0FFFF0000h.whileTRUE.ifDWORDptr[edi]==IMAGE_DOS_SIGNATURE;判斷是否MZmovesi,ediaddesi,DWORDptr[esi+03Ch];esi指向PE標志.ifDWORDptr[esi]==IMAGE_NT_SIGNATURE;是否有PE標志.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)對相應操作系統(tǒng)分別給出固定的Kernel32模塊的基地址對于不同的windows操作系統(tǒng)來說,Kernel32模塊的地址是固定的,甚至一些API函數(shù)的大概位置都是固定的。Windows98為BFF70000Windows2000為77E80000 WindowsXP為77E60000缺點是兼容性差GetAPI在得到了Kernel32的模塊地址以后,我們就可以在該模塊中搜索我們所需要的API地址。對于給定的API,可以通過直接搜索Kernel32.dll導出表的方法來獲得其地址.同樣我們也可以先搜索出GetProcAddress和LoadLibrary兩個API函數(shù)的地址,然后利用這兩個API函數(shù)得到我們所需要的API函數(shù)地址。2.3文件搜索
FindFirstFile:該函數(shù)根據(jù)文件名查找文件;FindNextFile:該函數(shù)根據(jù)調(diào)用FindFirstFile函數(shù)時指定的一個文件名查找下一個文件;FindClose:該函數(shù)用來關閉由FindFirstFile函數(shù)創(chuàng)建的一個搜索句柄;WIN32_FIND_DATA:該結構中存放著找到文件的詳細信息。FindFileProca)
指定找到的目錄為當前工作目錄b)
開始搜索文件(*.*)c)
該目錄搜索完畢?是則返回,否則繼續(xù)d)
找到文件還是目錄?是目錄則調(diào)用自身函數(shù)FindFile,否則繼續(xù)e)
是文件,如符合感染條件,則調(diào)用感染模塊,否則繼續(xù)f)
搜索下一個文件(FindNextFile),轉到C繼續(xù)FindFileEndp2.4內(nèi)存映射文件內(nèi)存映射文件提供了一組獨立的函數(shù),這些函數(shù)使應用程序能夠像訪問內(nèi)存一樣對磁盤上的文件進行訪問。這組內(nèi)存映射文件函數(shù)將磁盤上的文件的全部或者部分映射到進程虛擬地址空間的某個位置,以后對文件內(nèi)容的訪問就如同在該地址區(qū)域內(nèi)直接對內(nèi)存訪問一樣簡單。這樣,對文件中數(shù)據(jù)的操作便是直接對內(nèi)存進行操作,大大地提高了訪問的速度,這對于計算機病毒來說,對減少資源占有是非常重要的。應用步驟a)調(diào)用CreateFile函數(shù)打開想要映射的HOST程序,返回文件句柄hFile。b)調(diào)用CreateFileMapping函數(shù)生成一個建立基于HOST文件句柄hFile的內(nèi)存映射對象,返回內(nèi)存映射對象句柄hMap。c)調(diào)用MapViewOfFile函數(shù)將整個文件(一般還要加上病毒體的大?。┯成涞絻?nèi)存中。得到指向映射到內(nèi)存的第一個字節(jié)的指針(pMem)。d)用剛才得到的指針pMem對整個HOST文件進行操作,對HOST程序進行病毒感染。e)調(diào)用UnmapViewFile函數(shù)解除文件映射,傳入?yún)?shù)是pMem。f)調(diào)用CloseHandle來關閉內(nèi)存映射文件,傳入?yún)?shù)是hMap。g)調(diào)用CloseHandle來關閉HOST文件,傳入?yún)?shù)是hFile。2.5病毒如何感染其他文件PE病毒感染其他文件的常見方法是在文件中添加一個新節(jié),然后,把病毒代碼和病毒執(zhí)行后返回宿主程序的代碼寫入新添加的節(jié)中,同時修改PE文件頭中入口點(AddressOfEntryPoint),使其指向新添加的病毒代碼入口。這樣,當程序運行時,首先執(zhí)行病毒代碼,當病毒代碼執(zhí)行完成后才轉向執(zhí)行宿主程序。病毒感染其他文件的步驟1.判斷目標文件開始的兩個字節(jié)是否為“MZ”。2.判斷PE文件標記“PE”。3.判斷感染標記,如果已被感染過則跳出繼續(xù)執(zhí)行宿主程序,否則繼續(xù)。4.獲得DataDirectory(數(shù)據(jù)目錄)的個數(shù),(每個數(shù)據(jù)目錄信息占8個字節(jié))。5.得到節(jié)表起始位置。(數(shù)據(jù)目錄的偏移地址+數(shù)據(jù)目錄占用的字節(jié)數(shù)=節(jié)表起始位置)6.得到節(jié)表的末尾偏移(緊接其后用于寫入一個新的病毒節(jié)信息)節(jié)表起始位置+節(jié)的個數(shù)*(每個節(jié)表占用的字節(jié)數(shù)28H)=節(jié)表的末尾偏移。7.開始寫入節(jié)表a)寫入節(jié)名(8字節(jié))。b)寫入節(jié)的實際字節(jié)數(shù)(4字節(jié))。c)寫入新節(jié)在內(nèi)存中的開始偏移地址(4字節(jié)),同時可以計算出病毒入口位置。上一個節(jié)在內(nèi)存中的開始偏移地址+(上一個節(jié)的大小/節(jié)對齊+1)*節(jié)對齊=本節(jié)在內(nèi)存中的開始偏移地址。d)寫入本節(jié)(即病毒節(jié))在文件中對齊后的大小。e)寫入本節(jié)在文件中的開始位置。上節(jié)在文件中的開始位置+上節(jié)對齊后的大小=本節(jié)(即病毒)在文件中的開始位置。f)修改映像文件頭中的節(jié)表數(shù)目。g)修改AddressOfEntryPoint(即程序入口點指向病毒入口位置),同時保存舊的AddressOfEntryPoint,以便返回宿主并繼續(xù)執(zhí)行。h)更新SizeOfImage(內(nèi)存中整個PE映像尺寸=原SizeOfImage+病毒節(jié)經(jīng)過內(nèi)存節(jié)對齊后的大小)。i)寫入感染標記(后面例子中是放在PE頭中)。j)在新添加的節(jié)中寫入病毒代碼。ECX=病毒長度ESI=病毒代碼位置(并不一定等于病毒執(zhí)行代碼開始位置)EDI=病毒節(jié)寫入位置k)將當前文件位置設為文件末尾。2.6如何返回到宿主程序jmpoldAddressOfEntryPoint病毒演示病毒示例代碼PE文件格式實驗(實驗三)本實驗是根據(jù)PE文件結構及其運行原理而設計的實驗。通過該實驗,讀者可以了解PE文件的結構,為進一步學習PE文件病毒原理奠定基礎?!緦嶒災康摹苛私釶E文件基本結構?!緦嶒灜h(huán)境】運行環(huán)境:Windows2000、Windows9x、WindowsNT以及WindowsXP。編譯環(huán)境:VisualStudio6.0【實驗步驟】文件位置:附書資源目錄\Experiment\winpe。使用編譯環(huán)境打開源代碼工程,編譯后可以生成可執(zhí)行文件winpe.exe。預備步驟:找任意一個Win32下的EXE文件作為查看對象。實驗內(nèi)容:運行winpe.exe,并打開任一exe文件,選擇不同的菜單,可以查看到exe文件的內(nèi)部結構。實驗具體步驟可以參考本教材PPT。PE格式實驗步驟WinPE察看器演示ExeDll源代碼級PE察看器演示32位文件型病毒實驗(實驗四)本實驗是根據(jù)4.3.2節(jié)的文件型病毒編制技術而設計的原型病毒。之所以設計成原型病毒,是因為考慮到信息安全課程的特殊性。學習病毒原理的目的是為了更好地防治病毒,而不是教各位讀者編寫能運行于實際環(huán)境的病毒?!緦嶒災康摹苛私馕募筒《镜幕局圃煸?。了解病毒的感染、破壞機制,進一步認識病毒程序。掌握文件型病毒的特征和內(nèi)在機制?!緦嶒灜h(huán)境】運行環(huán)境Windows2000、Windows9x、WindowsNT和WindowsXP?!緦嶒灢襟E】文件位置:附書資源目錄\Experiment\win32virus。目錄中的virus.rar包中包括Virus.exe(編譯的病毒程序)、軟件使用說明書.doc(請仔細閱讀)、源代碼詳解.doc(對代碼部分加入了部分注釋)以及pll.asm(程序源代碼)。Example.rar包中選取的是一個常用程序(ebookedit)安裝后的安裝目錄下的程序,用于測試病毒程序。預備步驟:將example.rar解壓縮到某個目錄,比如D:\virus\example。解壓完畢后,應該在該目錄下有Buttons目錄、ebookcode.exe、ebookedit.exe、ebrand-it.exe以及keymaker.exe等程序,然后把virus.rar包解壓后的Virus.exe復制到該目錄中。實驗內(nèi)容:通過運行病毒程序觀看各步的提示以了解病毒的內(nèi)在機制。詳細的演示步驟參見教學PPT?!緦嶒炞⒁馐马棥勘静《境绦蛴糜趯嶒災康?,請妥善使用。在測試病毒程序前,請先關閉殺毒軟件的自動防護功能或直接關閉殺毒軟件。本程序是在開發(fā)時面向實驗演示用的,側重于演示和說明病毒的內(nèi)在原理,破壞功能有限;而且前流行的病毒破壞方式比較嚴重,而且發(fā)作方式非常隱蔽,千萬不要把其他病毒程序采用本例的方式來進行直接運行測試。測試完畢后,請注意病毒程序的清除,以免誤操作破壞計算機上的其他程序。32位PE可執(zhí)行文件型病毒詳細步驟
病毒引導說明:
文件型病毒,沒有引導部分演示
病毒傳染說明:
傳染范圍:Virus.exe所在目錄
傳染目標:可執(zhí)行文件(.exe)
傳染過程:搜索目錄內(nèi)的可執(zhí)行文件,逐個感染
病毒觸發(fā)說明:
觸發(fā)條件:運行Virus.exe程序或被Virus.exe感染的程序文件型病毒功能說明:
病毒破壞說明:
破壞能力:無害型傳染時減少磁盤的可用空間,在可執(zhí)行文件上附加一個節(jié)(4K)
破壞方式:攻擊文件在可執(zhí)行文件上附加一個節(jié)(4K),修改可執(zhí)行文件的入口地址
破壞范圍:Virus.exe所在目錄
病毒查殺說明:
病毒危害等級:低,屬于無害型病毒
病毒特征類型:Bloodhound.W32.1(NortonAntiVirus檢測結果,這是Symantec軟件來臨時指代新病毒的文件)
病毒查殺方法:刪除所有被感染的文件
步驟0(預備):當防病毒程序如NortonAntiVirus(注:此處的測試應以當前測試機器上安裝殺毒軟件為準,本示例運行時機器上安裝的只有Norton
AntiVirus,故以此為參照)自動防護功能打開時,鼠標光標位于病毒程序上時,會看到如下的圖例:圖例0
圖解說明:注解0-1表示NortonAntiVirus的自動防護功能打開著;注解0-2就是防病毒軟件在用戶鼠標置于圖例0中注解0-3處的Virus.exe程序上時的報警提示。
演示說明:作為自己開發(fā)的病毒程序,為了能夠更好的演示病毒的特征,在開發(fā)過程中我們沒有采用病毒的保護機制,故而防病毒軟件根據(jù)病毒程序的特征即可給出該程序為病毒程序的報警提示。步驟1(運行預備):關閉防病毒軟件的自動防護功能,點擊病毒程序Virus.exe,運行該程序,參見下圖:
圖例1
圖解說明:注解1-1表示NortonAntiVirus的自動防護功能被關閉;注解1-2為病毒程序運行主界面,本實驗為了能夠比較直觀演示病毒程序,讓用戶知道正在運行某個程序,故而有此主界面;但實際的病毒在感染其他程序前不會讓用戶感覺到病毒程序正在運行的,往往都是隱藏運行,或者是寄生在宿主程序中,這方面可參照病毒的引導機制的介紹。演示說明:詳見備注提示用戶是否觀看感染過程,如下圖:
圖例2
圖解說明:注解2-1提示用戶是否觀看病毒的感染過程,選擇“是”觀看感染過程,選擇“否”運行原程序,由于該病毒程序不具有其他功能,所以選“否”時就直接關閉程序。
演示說明:該文件型病毒側重于病毒感染過程的演示,所以在感染部分的提示比較詳細。步驟2步驟3:開始感染提示,如下圖:圖例3
圖解說明:注解3-1提示用戶病毒程序開始感染其他程序。
演示說明:無步驟4:提示病毒感染范圍,如下圖:圖例4
圖解說明:注解4-1提示用戶病毒程序感染目標是病毒程序所在目錄里的程序。
演示說明:為了減少病毒破壞的范圍,在編寫該病毒程序時,限定其感染范圍為目錄內(nèi)感染,這也同時減少了病毒的破壞范圍;但就病毒特征而言,它還是很好的體現(xiàn)了病毒程序自我復制的這一特征。步驟5:提示當前搜索到的合法的目標程序,如下圖:圖例5
圖解說明:注解5-1提示說明當前搜索的目標程序是ebookedit.exe可執(zhí)行文件。
演示說明:無步驟6:判斷目標程序是否是合法的可感染的程序,如下圖:圖例6
圖解說明:注解6-1提示目標程序是否為合法的可感染程序。演示說明:Virus.exe可以感染的目標程序為PE文件中的可執(zhí)行文件(.exe),對于文件型病毒傳染機理可參照病毒的傳染機制。步驟7:感染情況說明提示,如下圖:圖例7
圖解說明:注解7-1提示對病毒的感染情況進行說明。
演示說明:Virus.exe感染方式是在宿主文件附加一個節(jié)(4K),被感染的宿主程序運行時先跳轉到該節(jié)處,運行感染代碼;感染結束后再返回宿主程序的入口地址執(zhí)行宿主程序。這也體現(xiàn)了本病毒程序的破壞方式,作為一個演示的病毒程序,破壞程度應該在可控范圍內(nèi),一些惡性的破壞方式可參照病毒的破壞機制說明。感染結果情況可參照步驟12的圖例,Virus.exe被防病毒軟件查出為病毒也正是因為該操作,具體參照步驟18的圖例。步驟8:感染過程隱藏說明(小技巧),如下圖:圖例8
圖解說明:注解8-1提示說明病毒程序加入中sleep的代碼的目的。
演示說明:此處加入該說明是也是為了說明是否存在病毒運行的一種判斷思路,在手工查毒時有時就是依照該手段來判斷當前機器是否有異常程序在運行;如果機器沒有明顯的程序在運行,而硬盤的指示燈一直閃爍,在高速運轉著,則可粗略判斷機器有異常程序在運行。防病毒的相關技術可參照防病毒基礎技術部分介紹。當然對于病毒程序本身而言,為了避免被發(fā)現(xiàn),就需要通過sleep一段時間再進行感染來降低被發(fā)現(xiàn)的可能性。步驟9:提示是否觀看其他程序感染過程,如下圖:圖例9
圖解說明:注解9-1提示是否觀看其他程序感染過程。
演示說明:無步驟10:病毒感染結束或用戶取消操作的提示,如下圖:圖例10
圖解說明:注解10-1是病毒感染結束或用戶取消操作后的提示。
演示說明:感染結束或用戶取消后就會運行宿主程序。如果我們隱藏前面介紹的這些步驟的對話框和主界面,則給用戶的感覺就是運行了一個正常的程序,只是程序啟動運行的時間相對慢了一點,這也就體現(xiàn)了病毒程序的潛伏性這一特征。步驟11:該圖例與步驟6的圖例同步,該圖例是目標程序不合法或已被感染后的提示,如下圖:圖例11
圖解說明:注解11-1是目標程序不合法或已被感染的提示。
演示說明:Virus.exe可感染的目標為標準的可執(zhí)行文件(絕大部分的.exe文件),在感染過程中對已感染的程序會進行檢查是否已被感染,若已經(jīng)被感染則不再進行感染:一可以提高病毒感染的效率,二可以防止多次感染使文件增大而引起用戶的察覺。步驟12:比較目標程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12
圖解說明:注解12-1是KeyMaker.exe程序感染前的大小298KB(305,664字節(jié));注解12-2是KeyMaker.exe程序感染后的大小302KB(309,760)。步驟12:比較目標程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12A步驟12:比較目標程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12B圖解說明:圖例12A、12B、12C、12D是通過PEViewer程序打開目標程序的圖示。對照圖例12A和12B的注解:注解1表示KeyMaker.exe程序的節(jié)數(shù)由感染前的9個增加到10個;注解2程序大小的變化由00043000增加到00044000;注解3是程序入口地址的變化由00043DE8變?yōu)?0054B93;注解4是程序占用空間的變化由00054000增加到00055000;注解5是程序校驗和的變化由0004C1FB變?yōu)?004C543。步驟12:比較目標程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12C
步驟12:比較目標程序感染前后的變化(注要指程序大小),如下圖(圖例12;圖例12A和圖例12B;圖例12C和圖例12D):圖例12D
圖解說明:對照圖例12C和12D的注解:注
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五電影制作保密合同范本6篇
- 二零二五版木材行業(yè)碳排放權交易合同范本8篇
- 2025年個人住宅房產(chǎn)抵押擔保合同范本
- 課題申報參考:內(nèi)感受干預促進青少年情緒能力的神經(jīng)基礎
- 課題申報參考:民事訴訟法的基礎理論和基本制度研究
- 2025年度住宅小區(qū)停車位共有產(chǎn)權轉讓合同范本
- 2025年個人房產(chǎn)繼承權轉讓合同范本2篇
- 2025版農(nóng)機具租賃與智能灌溉系統(tǒng)合同4篇
- 二零二五版美容美發(fā)院加盟店會員管理與服務合同4篇
- 2025年度高端建筑用熱鍍鋅鋼管采購合同3篇
- DB43-T 3022-2024黃柏栽培技術規(guī)程
- 成人失禁相關性皮炎的預防與護理
- 九宮數(shù)獨200題(附答案全)
- 人員密集場所消防安全管理培訓
- 《聚焦客戶創(chuàng)造價值》課件
- PTW-UNIDOS-E-放射劑量儀中文說明書
- JCT587-2012 玻璃纖維纏繞增強熱固性樹脂耐腐蝕立式貯罐
- 保險學(第五版)課件全套 魏華林 第0-18章 緒論、風險與保險- 保險市場監(jiān)管、附章:社會保險
- 典范英語2b課文電子書
- 員工信息登記表(標準版)
- 春節(jié)工地停工復工計劃安排( 共10篇)
評論
0/150
提交評論