版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、計(jì)算機(jī)病毒防治技術(shù)計(jì)算機(jī)病毒防治技術(shù)內(nèi)容提綱內(nèi)容提綱u 1. 計(jì)算機(jī)病毒概述計(jì)算機(jī)病毒概述u 2. 腳本病毒及防御技術(shù)腳本病毒及防御技術(shù)u 3. 網(wǎng)頁病毒及防御技術(shù)網(wǎng)頁病毒及防御技術(shù)u 4. 宏病毒及防御技術(shù)宏病毒及防御技術(shù)u 5. Windows PE文件病毒及防御技術(shù)文件病毒及防御技術(shù)u 6. 批處理文件病毒技術(shù)批處理文件病毒技術(shù)u 7. U盤病毒及防御技術(shù)盤病毒及防御技術(shù)u 8. 計(jì)算機(jī)病毒演化策略計(jì)算機(jī)病毒演化策略主要內(nèi)容主要內(nèi)容u 1. PE病毒的定義病毒的定義u 2. PE病毒的特征病毒的特征u 3. PE病毒基本原理病毒基本原理u 4. PE病毒的防治病毒的防治u 5. PE病毒
2、演示實(shí)驗(yàn)病毒演示實(shí)驗(yàn)5.1.1 獲取獲取API函數(shù)地址函數(shù)地址u 為什么要獲取為什么要獲取API函數(shù)地址函數(shù)地址8 Win32程序一般運(yùn)行在程序一般運(yùn)行在Ring 3級(jí),處于保護(hù)模式級(jí),處于保護(hù)模式8 Win32下的系統(tǒng)功能調(diào)用,不是通過中斷實(shí)現(xiàn),下的系統(tǒng)功能調(diào)用,不是通過中斷實(shí)現(xiàn),而是通過調(diào)用動(dòng)態(tài)連接庫中的而是通過調(diào)用動(dòng)態(tài)連接庫中的API函數(shù)實(shí)現(xiàn)函數(shù)實(shí)現(xiàn)8 Win32 PE病毒和普通病毒和普通Win32 PE程序一樣需要調(diào)程序一樣需要調(diào)用用API函數(shù)實(shí)現(xiàn)某些功能,但是對(duì)于函數(shù)實(shí)現(xiàn)某些功能,但是對(duì)于Win32 PE病病毒來說,它只有代碼節(jié),并不存在引入函數(shù)節(jié)毒來說,它只有代碼節(jié),并不存在引入函
3、數(shù)節(jié)8 病毒就無法象普通病毒就無法象普通PE程序那樣直接調(diào)用相關(guān)程序那樣直接調(diào)用相關(guān)API函數(shù),而應(yīng)該先找出這些函數(shù),而應(yīng)該先找出這些API函數(shù)在相應(yīng)函數(shù)在相應(yīng)DLL中中的地址的地址5.1.1 獲取獲取API函數(shù)地址函數(shù)地址u 如何獲取如何獲取API函數(shù)地址函數(shù)地址8 要獲取要獲取API函數(shù)地址,首先需要獲取函數(shù)地址,首先需要獲取KERNEL32的基地址的基地址8 獲取獲取KERNEL32基地址的方法基地址的方法 利用程序的返回地址,在其附近搜索利用程序的返回地址,在其附近搜索Kernel32模塊基地址模塊基地址mov ecx,espmov ecx,esp ; ;將堆棧頂端的數(shù)據(jù)將堆棧頂端的數(shù)
4、據(jù)( (即程序返回即程序返回Kernel32Kernel32的地址的地址) )賦給賦給ecxecxxor edx,edxxor edx,edxgetK32Base:getK32Base: dec ecx dec ecx ; ;逐字節(jié)比較驗(yàn)證,也可以一頁一頁地搜逐字節(jié)比較驗(yàn)證,也可以一頁一頁地搜 mov dx,word ptr ecx+IMAGE_DOS_HEADER.e_lfanewmov dx,word ptr ecx+IMAGE_DOS_HEADER.e_lfanew ; ;即即ecx+3checx+3ch test dx,0f000h ;Dos Header+stub test dx,0
5、f000h ;Dos Header+stub不可能太大不可能太大, ,超過超過4096byte4096byte jnz jnz getK32Base ; getK32Base ;加速檢驗(yàn)加速檢驗(yàn) cmp ecx,dword ptr ecx+edx+IMAGE_NT_HEADERS.OptionalHeader.ImageBasecmp ecx,dword ptr ecx+edx+IMAGE_NT_HEADERS.OptionalHeader.ImageBase jnz jnz getK32Base ; getK32Base ;看看Image_BaseImage_Base值是否等于值是否等于ec
6、xecx即模塊起始值即模塊起始值 mov ebp+offsetmov ebp+offset k32Base,ecx ; k32Base,ecx ;如果是如果是, ,就認(rèn)為找到就認(rèn)為找到kernel32kernel32的的BaseBase值值 5.1.1 獲取獲取API函數(shù)地址函數(shù)地址GetKBaseGetKBase: : mov edi mov edi ,esp+04h ,esp+04h ; ;這里的這里的esp+04hesp+04h是不定的,主要看從程序第一條指令執(zhí)行到這里有多少是不定的,主要看從程序第一條指令執(zhí)行到這里有多少pushpush操作,操作, ; ;如果設(shè)為如果設(shè)為N N個(gè)個(gè)pu
7、shpush,則這里的指令就是,則這里的指令就是Mov edi,esp+NMov edi,esp+N* *4h4h and edi,0FFFF0000h and edi,0FFFF0000h .while TRUE .while TRUE .if WORD ptr edi .if WORD ptr edi = IMAGE_DOS_SIGNATURE ; = IMAGE_DOS_SIGNATURE ;判斷是否是判斷是否是MZMZ mov esi,edi mov esi,edi add esi,DWORD ptr esi+03Ch ;esi add esi,DWORD ptr esi+03Ch ;
8、esi指向指向PEPE標(biāo)志標(biāo)志 .if DWORD ptr esi.if DWORD ptr esi =IMAGE_NT_SIGNATURE; =IMAGE_NT_SIGNATURE;是否有是否有PEPE標(biāo)志標(biāo)志 .break ; .break ;若有,則跳出循環(huán)若有,則跳出循環(huán) .endif.endif .endif .endif sub edi sub edi, 010000h ;, 010000h ;分配粒度是分配粒度是10000h10000h,dlldll必然加載在必然加載在xxxx0000hxxxx0000h處處 .if edi.if edi MIN_KERNEL_SEARCH_BA
9、SE ;MIN_KERNEL_SEARCH_BASE=70000000H MIN_KERNEL_SEARCH_BASE ;MIN_KERNEL_SEARCH_BASE=70000000H mov edi mov edi, 0bff70000h, 0bff70000h ; ;如果上面沒有找到,則使用如果上面沒有找到,則使用Win 9xWin 9x的內(nèi)核的內(nèi)核(Kernel)(Kernel)地址地址 .break.break .endif .endif .endw .endw mov mov hKernel32,edi ; hKernel32,edi ;把找到的把找到的KERNEL32.DLLKE
10、RNEL32.DLL的基地址保存起來的基地址保存起來另另外外也也可可以以采采用用以以下下方方法法:5.1.1 獲取獲取API函數(shù)地址函數(shù)地址 對(duì)相應(yīng)操作系統(tǒng)分別給出固定的對(duì)相應(yīng)操作系統(tǒng)分別給出固定的Kernel32模塊模塊的基地址的基地址 對(duì)于同一版本的對(duì)于同一版本的Windows操作系統(tǒng),操作系統(tǒng),Kernel32模塊的地址是固定的,甚至一些模塊的地址是固定的,甚至一些API函數(shù)的大概位置都是固定的函數(shù)的大概位置都是固定的8 獲取獲取API函數(shù)地址函數(shù)地址 在得到了在得到了Kernel32的模塊地址以后,就可以在該的模塊地址以后,就可以在該模塊中搜索所需要的模塊中搜索所需要的API地址地址
11、對(duì)于給定的對(duì)于給定的API,搜索其地址可以直接通過,搜索其地址可以直接通過Kernel32.dll的引出表信息搜索,同樣我們也可的引出表信息搜索,同樣我們也可以先搜索出以先搜索出GetProcAddress和和LoadLibrary兩兩個(gè)個(gè)API函數(shù)的地址,然后利用這兩個(gè)函數(shù)的地址,然后利用這兩個(gè)API函數(shù)得到函數(shù)得到所需要的所需要的API函數(shù)地址函數(shù)地址5.1.2 搜索感染目標(biāo)文件搜索感染目標(biāo)文件u 搜索文件是病毒尋找目標(biāo)文件的非常重要的功能搜索文件是病毒尋找目標(biāo)文件的非常重要的功能u 在在Win32匯編中,通常采用如下幾個(gè)匯編中,通常采用如下幾個(gè)API函數(shù)進(jìn)行函數(shù)進(jìn)行文件搜索文件搜索8 F
12、indFirstFile 根據(jù)文件名查找文件根據(jù)文件名查找文件8 FindNextFile 根據(jù)調(diào)用根據(jù)調(diào)用FindFirstFile函數(shù)時(shí)指定的一個(gè)文件名函數(shù)時(shí)指定的一個(gè)文件名查找下一個(gè)文件查找下一個(gè)文件8 FindClose 用來關(guān)閉由用來關(guān)閉由FindFirstFile函數(shù)創(chuàng)建的一個(gè)搜索句函數(shù)創(chuàng)建的一個(gè)搜索句柄柄5.1.2 搜索感染目標(biāo)文件搜索感染目標(biāo)文件u 文件搜索算法文件搜索算法8 文件搜索一般采用遞歸算法進(jìn)行搜索,也可以采文件搜索一般采用遞歸算法進(jìn)行搜索,也可以采用非遞歸搜索方法用非遞歸搜索方法FindFileFindFile Proc Proc指定找到的目錄為當(dāng)前工作目錄指定找到
13、的目錄為當(dāng)前工作目錄開始搜索文件開始搜索文件( (* *. .* *) )該目錄搜索完畢?是則返回,否則繼續(xù)該目錄搜索完畢?是則返回,否則繼續(xù)找到文件還是目錄?是目錄則調(diào)用自身函數(shù)找到文件還是目錄?是目錄則調(diào)用自身函數(shù)FindFileFindFile,否則繼續(xù),否則繼續(xù)是文件,如符合感染條件,則調(diào)用感染模塊,否則繼續(xù)是文件,如符合感染條件,則調(diào)用感染模塊,否則繼續(xù)搜索下一個(gè)文件搜索下一個(gè)文件(FindNextFile(FindNextFile) ),轉(zhuǎn)到,轉(zhuǎn)到繼續(xù)繼續(xù)FindFile EndpFindFile Endp5.1.3 內(nèi)存映射文件內(nèi)存映射文件u 內(nèi)存映射文件提供了一組獨(dú)立的函數(shù),是
14、應(yīng)用程序內(nèi)存映射文件提供了一組獨(dú)立的函數(shù),是應(yīng)用程序能夠通過內(nèi)存指針像訪問內(nèi)存一樣對(duì)磁盤上的文件能夠通過內(nèi)存指針像訪問內(nèi)存一樣對(duì)磁盤上的文件進(jìn)行訪問進(jìn)行訪問u 這組內(nèi)存映射文件函數(shù)將磁盤上的文件的全部或者這組內(nèi)存映射文件函數(shù)將磁盤上的文件的全部或者部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)部分映射到進(jìn)程虛擬地址空間的某個(gè)位置,以后對(duì)文件內(nèi)容的訪問就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存文件內(nèi)容的訪問就如同在該地址區(qū)域內(nèi)直接對(duì)內(nèi)存訪問一樣簡單訪問一樣簡單u 對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大對(duì)文件中數(shù)據(jù)的操作便是直接對(duì)內(nèi)存進(jìn)行操作,大大地提高了訪問的速度,這對(duì)于計(jì)算機(jī)病毒來說,大地提高了訪問的
15、速度,這對(duì)于計(jì)算機(jī)病毒來說,對(duì)減少資源占用是非常重要的對(duì)減少資源占用是非常重要的5.1.3 內(nèi)存映射文件內(nèi)存映射文件u使用內(nèi)存映射文件讀寫文件使用內(nèi)存映射文件讀寫文件8在計(jì)算機(jī)病毒中,通常采用如下幾個(gè)步驟:在計(jì)算機(jī)病毒中,通常采用如下幾個(gè)步驟:調(diào)用調(diào)用CreateFile函數(shù)打開想要映射的函數(shù)打開想要映射的HOST程序,返回文程序,返回文件句柄件句柄hFile調(diào)用調(diào)用CreateFileMapping函數(shù)生成一個(gè)建立基于函數(shù)生成一個(gè)建立基于HOST文文件句柄件句柄hFile的內(nèi)存映射對(duì)象,返回內(nèi)存映射對(duì)象句柄的內(nèi)存映射對(duì)象,返回內(nèi)存映射對(duì)象句柄hMap調(diào)用調(diào)用MapViewOfFile函數(shù)將整
16、個(gè)文件函數(shù)將整個(gè)文件(一般還要加上病毒一般還要加上病毒體的大小體的大小)映射到內(nèi)存中。得到指向映射到內(nèi)存的第一個(gè)字映射到內(nèi)存中。得到指向映射到內(nèi)存的第一個(gè)字節(jié)的指針節(jié)的指針(pMem)用剛才得到的指針用剛才得到的指針pMem對(duì)整個(gè)對(duì)整個(gè)HOST文件進(jìn)行操作,對(duì)文件進(jìn)行操作,對(duì)HOST程序進(jìn)行病毒感染程序進(jìn)行病毒感染調(diào)用調(diào)用UnMapViewFile函數(shù)解除文件映射,傳入?yún)?shù)是函數(shù)解除文件映射,傳入?yún)?shù)是pMem調(diào)用調(diào)用CloseHandle來關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是來關(guān)閉內(nèi)存映射文件,傳入?yún)?shù)是hMap調(diào)用調(diào)用CloseHandle來關(guān)閉來關(guān)閉HOST文件,傳入?yún)?shù)是文件,傳入?yún)?shù)是hFi
17、le5.1.4 病毒感染病毒感染PE文件的基本方法文件的基本方法u 感染文件的基本步驟感染文件的基本步驟8 (1)判斷目標(biāo)文件開始的兩個(gè)字節(jié)是否為判斷目標(biāo)文件開始的兩個(gè)字節(jié)是否為“MZ”;8 (2)判斷判斷PE文件標(biāo)記文件標(biāo)記“PE”;8 (3)判斷感染標(biāo)記,如果已被感染過則跳出繼續(xù)執(zhí)判斷感染標(biāo)記,如果已被感染過則跳出繼續(xù)執(zhí)行行HOST程序,否則繼續(xù);程序,否則繼續(xù);8 (4)獲得獲得Directory(數(shù)據(jù)目錄數(shù)據(jù)目錄)的個(gè)數(shù),每個(gè)數(shù)據(jù)目的個(gè)數(shù),每個(gè)數(shù)據(jù)目錄信息占錄信息占8個(gè)字節(jié);個(gè)字節(jié);8 (5)得到節(jié)表起始位置:得到節(jié)表起始位置:Directory的偏移地址的偏移地址+數(shù)數(shù)據(jù)目錄占用的字
18、節(jié)數(shù)據(jù)目錄占用的字節(jié)數(shù)=節(jié)表起始位置;節(jié)表起始位置;8 (6)得到目前最后節(jié)表的末尾偏移得到目前最后節(jié)表的末尾偏移(緊接其后用于寫緊接其后用于寫入一個(gè)新的病毒節(jié)入一個(gè)新的病毒節(jié)): 節(jié)表起始位置節(jié)表起始位置+節(jié)的個(gè)數(shù)節(jié)的個(gè)數(shù)(每個(gè)節(jié)表占用的字節(jié)每個(gè)節(jié)表占用的字節(jié)數(shù)數(shù)28H)=目前最后節(jié)表的末尾偏移目前最后節(jié)表的末尾偏移5.1.4 病毒感染病毒感染PE文件的基本方法文件的基本方法8 (7)開始寫入節(jié)表開始寫入節(jié)表 寫入節(jié)名寫入節(jié)名(8字節(jié)字節(jié)); 寫入節(jié)的實(shí)際字節(jié)數(shù)寫入節(jié)的實(shí)際字節(jié)數(shù)(4字節(jié)字節(jié)); 寫入新節(jié)在內(nèi)存中的開始偏移地址寫入新節(jié)在內(nèi)存中的開始偏移地址(4字節(jié)字節(jié)),同,同時(shí)可以計(jì)算出病
19、毒入口位置:時(shí)可以計(jì)算出病毒入口位置: 上節(jié)在內(nèi)存中的開始偏移地址上節(jié)在內(nèi)存中的開始偏移地址+(上節(jié)大小上節(jié)大小/節(jié)節(jié)對(duì)齊對(duì)齊+1)節(jié)對(duì)齊節(jié)對(duì)齊=本節(jié)在內(nèi)存中的開始偏移本節(jié)在內(nèi)存中的開始偏移地址;地址; 寫入本節(jié)寫入本節(jié)(即病毒節(jié)即病毒節(jié))在文件中對(duì)齊后的大小;在文件中對(duì)齊后的大??; 寫入本節(jié)在文件中的開始位置:寫入本節(jié)在文件中的開始位置: 上節(jié)在文件中的開始位置上節(jié)在文件中的開始位置+上節(jié)對(duì)齊后的大小上節(jié)對(duì)齊后的大小=本節(jié)本節(jié)(即病毒即病毒)在文件中的開始位置;在文件中的開始位置; 修改映像文件頭中的節(jié)表數(shù)目修改映像文件頭中的節(jié)表數(shù)目5.1.4 病毒感染病毒感染PE文件的基本方法文件的基本方
20、法修改修改AddressOfEntryPoint(即程序入口點(diǎn)指向病毒入口即程序入口點(diǎn)指向病毒入口位置位置),同時(shí)保存舊的,同時(shí)保存舊的AddressOfEntryPoint,以便返回,以便返回HOST繼續(xù)執(zhí)行。繼續(xù)執(zhí)行。更新更新SizeOfImage(內(nèi)存中整個(gè)內(nèi)存中整個(gè)PE映像尺寸映像尺寸=原原SizeOfImage+病毒節(jié)經(jīng)過內(nèi)存節(jié)對(duì)齊后的大小病毒節(jié)經(jīng)過內(nèi)存節(jié)對(duì)齊后的大小);寫入感染標(biāo)記寫入感染標(biāo)記(后面例子中是放在后面例子中是放在PE頭中頭中);寫入病毒代碼到新添加的節(jié)中:寫入病毒代碼到新添加的節(jié)中: ECX=病毒長度病毒長度 ESI=病毒代碼位置病毒代碼位置(并不一定等于病毒執(zhí)行代碼
21、開始位并不一定等于病毒執(zhí)行代碼開始位置置) EDI=病毒節(jié)寫入位置病毒節(jié)寫入位置(后面例子是在內(nèi)存映射文件中的后面例子是在內(nèi)存映射文件中的相應(yīng)位置相應(yīng)位置)11將當(dāng)前文件位置設(shè)為文件末尾。將當(dāng)前文件位置設(shè)為文件末尾。8PE病毒感染其他文件的方法還有很多,譬如將自己分散插病毒感染其他文件的方法還有很多,譬如將自己分散插入到每個(gè)節(jié)的空隙中入到每個(gè)節(jié)的空隙中5.1.4 病毒感染病毒感染PE文件的基本方法文件的基本方法u文件操作相關(guān)文件操作相關(guān)API函數(shù)函數(shù)8CreateFile打開和創(chuàng)建文件等打開和創(chuàng)建文件等8CloseHandle8SetFilePointer在一個(gè)文件中設(shè)置當(dāng)前的讀寫位置在一個(gè)文
22、件中設(shè)置當(dāng)前的讀寫位置8ReadFile/ WriteFile從文件中讀取數(shù)據(jù)從文件中讀取數(shù)據(jù)/將數(shù)據(jù)寫入文件將數(shù)據(jù)寫入文件8SetEndOfFile針對(duì)一個(gè)打開的文件,將當(dāng)前文件位置設(shè)為文件末尾針對(duì)一個(gè)打開的文件,將當(dāng)前文件位置設(shè)為文件末尾8GetFileSize獲取指定文件的大小獲取指定文件的大小8FlushFileBuffers針對(duì)指定的文件句柄,刷新內(nèi)部文件緩沖區(qū)針對(duì)指定的文件句柄,刷新內(nèi)部文件緩沖區(qū)5.1.5 病毒返回到病毒返回到HOST程序的方法程序的方法u 為了提高自己的生存能力,病毒不應(yīng)該破壞為了提高自己的生存能力,病毒不應(yīng)該破壞HOST程序,病毒應(yīng)該在病毒執(zhí)行完畢后,立刻將控
23、制權(quán)程序,病毒應(yīng)該在病毒執(zhí)行完畢后,立刻將控制權(quán)交給交給HOST程序程序u 返回返回HOST程序相對(duì)來說比較簡單,病毒在修改被程序相對(duì)來說比較簡單,病毒在修改被感染文件代碼開始執(zhí)行位置感染文件代碼開始執(zhí)行位置(AddressOfEntryPoint)時(shí),會(huì)保存原來的值。這時(shí),會(huì)保存原來的值。這樣,病毒在執(zhí)行完病毒代碼之后用一個(gè)跳轉(zhuǎn)語句跳樣,病毒在執(zhí)行完病毒代碼之后用一個(gè)跳轉(zhuǎn)語句跳到這段代碼處繼續(xù)執(zhí)行即可到這段代碼處繼續(xù)執(zhí)行即可5.1.6 PE概念病毒感染分析概念病毒感染分析u感染感染PE文件的概念性病毒文件的概念性病毒Immunity.exe不駐留內(nèi)存,也沒不駐留內(nèi)存,也沒有采用加密、壓縮、變
24、形等有采用加密、壓縮、變形等“高深高深”技術(shù)技術(shù)8啟動(dòng)時(shí)首先獲取所需啟動(dòng)時(shí)首先獲取所需API函數(shù)的地址函數(shù)的地址8然后在當(dāng)前目錄查找然后在當(dāng)前目錄查找host_pe.exe文件,若沒有找到,則文件,若沒有找到,則在在Windows目錄、目錄、System/System32目錄下繼續(xù)查找,目錄下繼續(xù)查找,為了便于測試,示例代碼只在當(dāng)前目下查找為了便于測試,示例代碼只在當(dāng)前目下查找8找到找到host_pe.exe后,判斷是否是后,判斷是否是PE文件、是否已感染等文件、是否已感染等,若條件滿足,則在,若條件滿足,則在host_pe.exe中添加名為中添加名為.BFish的節(jié)的節(jié),并將病毒代碼寫入其中
25、,然后修改文件頭,使入口地址,并將病毒代碼寫入其中,然后修改文件頭,使入口地址指向剛添加的節(jié),最后,將全部節(jié)未對(duì)齊大小設(shè)置為對(duì)齊指向剛添加的節(jié),最后,將全部節(jié)未對(duì)齊大小設(shè)置為對(duì)齊后的大小,制造不存在空洞的假象,從而達(dá)到避免被后的大小,制造不存在空洞的假象,從而達(dá)到避免被CIH病毒寄生感染的免疫目的病毒寄生感染的免疫目的5.1.6 PE概念病毒感染分析概念病毒感染分析u Immunity的主流程圖的主流程圖執(zhí)行病毒代碼獲取KERNEL32地址及所需的API函數(shù)地址在當(dāng)前目錄查找目標(biāo)文件找到?保存當(dāng)前目錄信息NowPathNo=2?將Windows目錄設(shè)置為當(dāng)前目錄NowPathNo=3?將Sys
26、tem目錄設(shè)置為當(dāng)前目錄置目錄標(biāo)志為當(dāng)前目錄NowPathNo = 1獲取并保存文件屬性設(shè)置文件屬性,確保文件可以以讀寫方式打開打開文件是PE文件且滿足感染條件?添加節(jié).BFish,并在其中寫入病毒代碼;修改PE頭使入口點(diǎn)指向.BFish;寫入病毒標(biāo)簽改變?nèi)抗?jié)未對(duì)齊大小為對(duì)齊后的大小,制造無空洞的假象關(guān)閉文件恢復(fù)文件屬性繼續(xù)查找下一個(gè)目標(biāo)文件NowPathNo增1恢復(fù)原當(dāng)前目錄信息滿足發(fā)作表現(xiàn)條件?顯示提示信息返回到主程序否是否否否否5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)u 將將host_pe.exe與與Immunity.exe拷貝到同一個(gè)目錄拷貝到同一個(gè)目錄,并運(yùn)
27、行,并運(yùn)行Immunity.exeu Immunity感染感染host_pe.exe,使其文件大小增加,使其文件大小增加4096字節(jié),除此之外,文件修改日期等字節(jié),除此之外,文件修改日期等“外在外在”屬性不變屬性不變u 為了便于比較分析,將被感染后的為了便于比較分析,將被感染后的host_pe.exe重重命名為命名為host_pe2.exe5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)u 感染前后,節(jié)表發(fā)生的變化感染前后,節(jié)表發(fā)生的變化5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)u 感染前后,映像文件頭發(fā)生的變化感染前后,映像文件頭發(fā)生的變化5.1.7 示
28、例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)u 感染前后,可選映像頭發(fā)生的變化感染前后,可選映像頭發(fā)生的變化5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)u 手工清除手工清除Immunity病毒病毒8 首先,利用工具軟件刪除病毒添加的節(jié),或節(jié)中首先,利用工具軟件刪除病毒添加的節(jié),或節(jié)中的部分內(nèi)容的部分內(nèi)容(分布在正常內(nèi)容中的病毒代碼分布在正常內(nèi)容中的病毒代碼)5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)8 修改入口地址,使其指向修改入口地址,使其指向.text代碼節(jié)代碼節(jié) (病毒代碼病毒代碼仍然在仍然在host_pe.exe文件中文件中)。感染標(biāo)志、
29、可選映。感染標(biāo)志、可選映像頭中像頭中MajorLinkerVersion等,需另行修改等,需另行修改5.1.7 示例病毒感染測試與手工修復(fù)示例病毒感染測試與手工修復(fù)8 徹底徹底“摘除摘除”host_pe2.exe中的中的“垃圾垃圾”代碼代碼5.1.8 CIH病毒分析病毒分析u病毒簡介病毒簡介8CIH病毒是一種文件型病毒,又稱病毒是一種文件型病毒,又稱Win95.CIH、Win32.CIH、PE_CIH,是感染,是感染W(wǎng)indows 95/98環(huán)境下環(huán)境下PE格式文件的格式文件的病毒病毒8CIH病毒一共有五個(gè)版本,目前最流行的是病毒一共有五個(gè)版本,目前最流行的是V1.2版版8CIH病毒沒有改變宿
30、主文件的大小,而是利用病毒沒有改變宿主文件的大小,而是利用“空洞空洞”,將病毒化整為零,拆分成若干塊,插入到宿主文件中將病毒化整為零,拆分成若干塊,插入到宿主文件中8查找查找CIH病毒的最簡單方法就是用資源管理器中病毒的最簡單方法就是用資源管理器中“工具工具查找查找文件或文件夾文件或文件夾”的的“高級(jí)高級(jí)包含文字包含文字”,以特征字,以特征字符串符串“CIHv”查找所有查找所有.EXE8CIH病毒發(fā)作時(shí)直接往計(jì)算機(jī)主板病毒發(fā)作時(shí)直接往計(jì)算機(jī)主板BIOS芯片和硬盤寫亂碼芯片和硬盤寫亂碼,造成主機(jī)無法啟動(dòng),造成主機(jī)無法啟動(dòng)8CIH病毒首開攻擊計(jì)算機(jī)硬件之先河,也開啟了病毒首開攻擊計(jì)算機(jī)硬件之先河,
31、也開啟了Windows病毒的新紀(jì)元病毒的新紀(jì)元5.1.8 CIH病毒分析病毒分析uVxD技術(shù)簡介技術(shù)簡介8VxD(Virtual Device Drivers,虛擬設(shè)備驅(qū)動(dòng),虛擬設(shè)備驅(qū)動(dòng)),是微軟專,是微軟專門為門為Windows制定的設(shè)備驅(qū)動(dòng)程序接口規(guī)范制定的設(shè)備驅(qū)動(dòng)程序接口規(guī)范8有很多應(yīng)用軟件都需要使用有很多應(yīng)用軟件都需要使用VxD機(jī)制來實(shí)現(xiàn)某些比較特殊機(jī)制來實(shí)現(xiàn)某些比較特殊的功能的功能8因?yàn)橐驗(yàn)閂xD程序具有比其他類型應(yīng)用程序更高的優(yōu)先級(jí),而程序具有比其他類型應(yīng)用程序更高的優(yōu)先級(jí),而且更靠近系統(tǒng)底層資源且更靠近系統(tǒng)底層資源只有這樣,反病毒軟件才有可只有這樣,反病毒軟件才有可能全面、徹底地
32、控制系統(tǒng)資源能全面、徹底地控制系統(tǒng)資源8CIH病毒利用病毒利用VxD技術(shù)、通過技術(shù)、通過Windows 9x的異常處理機(jī)制的異常處理機(jī)制(Exception)進(jìn)入系統(tǒng)進(jìn)入系統(tǒng)Ring0級(jí)。在應(yīng)用程序下故意產(chǎn)生一級(jí)。在應(yīng)用程序下故意產(chǎn)生一個(gè)異常,并修改個(gè)異常,并修改IDT表表(中斷地址表中斷地址表)中的處理程序地址,使中的處理程序地址,使其指向病毒代碼,再顯式進(jìn)入此異常其指向病毒代碼,再顯式進(jìn)入此異常(主要為直接調(diào)用主要為直接調(diào)用INT 3H中斷中斷),就可以申請(qǐng)系統(tǒng)共享內(nèi)存將病毒駐留,就可以申請(qǐng)系統(tǒng)共享內(nèi)存將病毒駐留5.1.8 CIH病毒分析病毒分析uCIH病毒的駐留病毒的駐留(初始化初始化)
33、8當(dāng)運(yùn)行感染了當(dāng)運(yùn)行感染了CIH病毒的病毒的PE文件時(shí),由于該病毒修改了該文件時(shí),由于該病毒修改了該程序的入口地址,從而首先調(diào)入內(nèi)存執(zhí)行,其駐留主要過程序的入口地址,從而首先調(diào)入內(nèi)存執(zhí)行,其駐留主要過程:程:用用SIDT指令取得指令取得IDT base address(中斷描述符表基地址中斷描述符表基地址),然后把,然后把IDT的的INT 3H 的入口地址改為指向的入口地址改為指向CIH自己的自己的INT 3H程序入口部分;程序入口部分;執(zhí)行執(zhí)行INT 3H指令,進(jìn)入指令,進(jìn)入CIH自身的自身的INT 3H入口程序,這入口程序,這樣,樣,CIH病毒就可以獲得病毒就可以獲得Windows最高級(jí)別
34、的權(quán)限最高級(jí)別的權(quán)限Ring 0。病毒在這段程序中首先檢查調(diào)試寄存器。病毒在這段程序中首先檢查調(diào)試寄存器DR0的值是否為的值是否為0,用以判斷先前是否有,用以判斷先前是否有CIH病毒已經(jīng)駐留;病毒已經(jīng)駐留;如果如果DR0的值不為的值不為0,則表示,則表示CIH病毒程式已駐留,病毒病毒程式已駐留,病毒程序恢復(fù)原先的程序恢復(fù)原先的INT 3H入口,然后正常退出入口,然后正常退出INT 3H,跳到,跳到過程過程;如果如果DR0值為值為0,則,則CIH病毒將嘗試進(jìn)行駐留;病毒將嘗試進(jìn)行駐留;5.1.8 CIH病毒分析病毒分析如果內(nèi)存申請(qǐng)成功,則從被感染文件中將原先分成多塊如果內(nèi)存申請(qǐng)成功,則從被感染文
35、件中將原先分成多塊的病毒代碼收集起來,并進(jìn)行組合后放到申請(qǐng)到的內(nèi)存空的病毒代碼收集起來,并進(jìn)行組合后放到申請(qǐng)到的內(nèi)存空間中間中再次調(diào)用再次調(diào)用INT 3H中斷進(jìn)入中斷進(jìn)入CIH病毒體的病毒體的INT 3H入口程序入口程序,調(diào)用,調(diào)用INT 20H來完成調(diào)用一個(gè)來完成調(diào)用一個(gè)IFSMgr_InstallFileSystemApiHook的子程序,在的子程序,在Windows內(nèi)核中文件系統(tǒng)處理函數(shù)中掛接鉤子,以截取文內(nèi)核中文件系統(tǒng)處理函數(shù)中掛接鉤子,以截取文件調(diào)用的操作,這樣一旦系統(tǒng)出現(xiàn)要求開啟文件的調(diào)用,件調(diào)用的操作,這樣一旦系統(tǒng)出現(xiàn)要求開啟文件的調(diào)用,則則CIH病毒的傳染部分程序就會(huì)在第一時(shí)間
36、截獲此文件;病毒的傳染部分程序就會(huì)在第一時(shí)間截獲此文件;將同時(shí)獲取的將同時(shí)獲取的Windows操作系統(tǒng)默認(rèn)的操作系統(tǒng)默認(rèn)的IFSMgr_Ring0_FileIO(核心文件輸入核心文件輸入/輸出輸出)服務(wù)程序的入服務(wù)程序的入口地址保留在口地址保留在DR0寄存器中,以便于寄存器中,以便于CIH病毒調(diào)用;病毒調(diào)用;恢復(fù)原先的恢復(fù)原先的IDT中斷表中的中斷表中的INT 3H入口,退出入口,退出INT 3H;根據(jù)病毒程序內(nèi)隱藏的原文件的正常入口地址,跳到原根據(jù)病毒程序內(nèi)隱藏的原文件的正常入口地址,跳到原文件正常入口,執(zhí)行正常程序文件正常入口,執(zhí)行正常程序5.1.8 CIH病毒分析病毒分析u CIH病毒的
37、感染病毒的感染8 CIH病毒的傳染部分實(shí)際上是病毒在駐留內(nèi)存過病毒的傳染部分實(shí)際上是病毒在駐留內(nèi)存過程中調(diào)用程中調(diào)用Windows 內(nèi)核底層函數(shù)內(nèi)核底層函數(shù)IFSMgr_InstallFileSystemApiHook函數(shù)掛接鉤函數(shù)掛接鉤子時(shí)指針指示的那段程序,其感染過程如下:子時(shí)指針指示的那段程序,其感染過程如下: 文件的截獲。每當(dāng)系統(tǒng)出現(xiàn)要求開啟文件的調(diào)文件的截獲。每當(dāng)系統(tǒng)出現(xiàn)要求開啟文件的調(diào)用時(shí),駐留內(nèi)存的用時(shí),駐留內(nèi)存的CIH病毒就截獲該文件。病毒病毒就截獲該文件。病毒調(diào)用調(diào)用INT20的的VxD call UniToBCSPath系統(tǒng)功能系統(tǒng)功能調(diào)用取回該文件的名稱與路徑;調(diào)用取回該文件的名稱與路徑; EXE文件的判斷。對(duì)該文件名進(jìn)行分析,若文文件的判斷。對(duì)該文件名進(jìn)行分析,若文件擴(kuò)展名不為件擴(kuò)展名不為“.EXE”或不滿足或不滿足PE格式、尚未感格式、尚未感染等條件,不傳染,離開病毒程序,跳回到染等條件,不傳染,離開病毒程序,跳回到Windows內(nèi)核的正常文件處理程序上內(nèi)核的正常文件處理程序上5.1.8 CIH病毒分析病毒分析u 病毒的寄生方法病毒的寄生方法感染感染CIH病毒之前的病毒之前的PE文件文件感染感染CIH病毒之后的病毒之后的PE文件文件MZ文件頭DOS插樁程
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 園藝工操作技能知識(shí)考核試卷含答案
- 鋼琴鍵盤機(jī)械制作工常識(shí)模擬考核試卷含答案
- 煉油樹脂工安全實(shí)踐競賽考核試卷含答案
- 焊接設(shè)備操作工測試驗(yàn)證競賽考核試卷含答案
- 智能硬件裝調(diào)員QC管理強(qiáng)化考核試卷含答案
- 養(yǎng)雞工操作知識(shí)測試考核試卷含答案
- 瀝青裝置操作工崗前客戶關(guān)系管理考核試卷含答案
- 金屬材酸洗工崗前技能綜合實(shí)踐考核試卷含答案
- 水土保持監(jiān)測工安全風(fēng)險(xiǎn)能力考核試卷含答案
- 選煤工安全教育考核試卷含答案
- 活動(dòng)包干合同范本
- 2025遼寧近海產(chǎn)業(yè)發(fā)展集團(tuán)有限公司招聘2人筆試歷年??键c(diǎn)試題專練附帶答案詳解2套試卷
- G520-1~2(2020年合訂本)鋼吊車梁(6m~9m)(2020年合訂本)
- 【學(xué)考】高中英語學(xué)業(yè)水平測試-2500詞匯表(含音標(biāo))
- 語C圈洗白標(biāo)準(zhǔn)手冊(cè)
- 安全管理人員專題培訓(xùn)《風(fēng)險(xiǎn)分級(jí)管控與隱患排查治理培訓(xùn)》學(xué)習(xí)培訓(xùn)課件
- 47沿著史實(shí)去追尋帶著思想旅行金屬的化學(xué)性質(zhì)
- 通信工程設(shè)計(jì)概念與作用概要資料講解
- 郵電通信大樓項(xiàng)目管理方案
- 臥式容器任意液位高度下液體容積的計(jì)算(Excel表)
- 各國駐華使領(lǐng)館及駐華外國機(jī)構(gòu)聘雇外國人許可及管理辦法
評(píng)論
0/150
提交評(píng)論