日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CIH病毒庐山真面目

發布時間:2024/3/26 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CIH病毒庐山真面目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????? CIH病毒是一種文件型病毒,又稱Win95.CIH、Win32.CIH、PE_CIH,是第一例感染Windows95/98環境下PE格式(Portable?Executable Format)EXE文件的病毒。

  不同于以往的DOS型病毒,CIH病毒是建立在WINDOW95/98平臺。由于微軟WINDOWS平臺的不斷發展,DOS平臺已逐漸走向消亡,DOS型病毒也將隨之退出歷史的舞臺。隨之而來的是攻擊Windows系統病毒走上計算機病毒的前臺。可以預測,在未來幾年內,連同宏病毒在內,Windows平臺將會是造病毒和反病毒的主戰場。

  因此,剖析CIH病毒機理,掌握在Windows平臺下病毒駐留和傳染方法,對于預防、檢測和清除CIH病毒,預防未來新型Windows病毒,在反病毒的戰場上掌握主動權,都具有十分重要的意義。

  目前CIH病毒有多個版本,典型的有:CIHv1.2:四月二十六日發作,長度為1003個字節,包含字符:CIHv1.2TTIT;CIHv1.3:六月二十六日發作,長度為1010個字節,包含字符:CIHv1.3TTIT;CIHv1.4:每月二十六日發作,長度為1019個字節,包含字符:CIHv1.4TATUNG。其中,最流行的是CIHv1.2版本。本文將作重對該版本進行剖析。

病毒的表現形式、危害及傳染途徑?
  CIH病毒是一種文件型病毒,其宿主是Windows 95/98系統下的PE格式可執行文件即.EXE文件,就其表現形式及癥狀而言,具有以下特點:

1.受感染的.EXE文件的文件長度沒有改變;
2.DOS以及WIN 3.1 格式(NE格式)的可執行文件不受感染,并且在Win NT中無效。?
3.用資源管理器中"工具>查找>文件或文件夾"的"高級>包含文字"查找.EXE特征字 符串----"CIH?
v",在查找過程中,顯示出一大堆符合查找特征的可執行文件。?
4.若4月26日開機,顯示器突然黑屏,硬盤指示燈閃爍不停,重新開機后,計算機無法啟動。?
  病毒的危害主要表現在于病毒發作后,硬盤數據全部丟失,甚至主板上的BIOS中的原內容被會徹底破壞,主機無法啟動。只有更換BIOS,或是向固定在主板上的BIOS中重新寫入原來版本的程序,才能解決問題。

  該病毒是通過文件進行傳播。計算機開機以后,如果運行了帶病毒的文件,其病毒就駐留在Windows的系統內存里了。此后,只要運行了PE格式的.EXE文件,這些文件就會感染上該病毒。

病毒的運行機制?
  同傳統的DOS型病毒相比,無能是在內存的駐留方式上還是傳染的方式上以及病毒攻擊的對象上,CIH病毒都于眾不同,新穎獨到。病毒的代碼不長,CIHv1.2只有1003個字節,其他版本也大小差不多。它繞過了微軟提供的應用程序界面,繞過了ActiveX、C++甚至C,使用匯編,利用VxD(虛擬設備驅動程序)接口編程,直接殺入Windows內核。它沒有改變宿主文件的大小,而是采用了一種新的文件感染機制即碎洞攻擊(fragmented?cavity?attack),將病毒化整為零,拆分成若干塊,插入宿主文件中去;最引人注目的是它利用目前許多BIOS芯片開放了可重寫的特性,向計算機主板的BIOS端口寫入亂碼,開創了病毒直接進攻計算機主板芯片的先例。可以說CIH病毒提供了一種全新的病毒程序方式和病毒發展方向。下面對該病毒作進一步的剖析,該病毒程序由三部分組成。

  1.CIH病毒的駐留(初始化)?
  當運行帶有該病毒的.EXE時,由于該病毒修改了該文件程序的入口地址(Address of?EntryPoint),首先調入內存執行的是病毒的駐留程序,駐留程序長度為184字節,其駐留主要過程如下:
1.用SIDT指令取得IDT base address(中斷描述符表基地址),然后把IDT的INT 3?
的入口地址改為指向CIH自己的INT3程序入口部分;?
2.執行INT 3指令,進入CIH自身的INT 3入口程序,這樣,CIH病毒就可以獲得Windows最高級別的權限(Ring?
0級),可在Windows的內核執行各種操作(如終止系統運行,直接對內存讀寫、截獲各種中斷、控制I/O端口等,這些操作在應用程序層Ring?
3級是受到嚴格限制的)。病毒在這段程序中首先檢查調試寄存器DR0的值是否為0,用以判斷先前是否有CIH病毒已經駐留。?
3.如果DR0的值不為0,則表示CIH病毒程式已駐留,病毒程序恢復原先的INT 3入口,然后正常退出INT3,跳到過程9;?
4.如果DR0值為0,則CIH病毒將嘗試進行駐留。首先將當前EBX寄存器的值賦給DR0寄存器,以生成駐留標記,然后調用INT 20中斷,使用VxD?
call Page Allocate系統調用,請求系統分配2個PAGE大小的Windows系統內存(system?memory),Windows系統內存地址范圍為C0000000h~FFFFFFFFh,它是用來存放所有的虛擬驅動程序的內存區域,如果程序想長期駐留在內存中,則必須申請到此區段內的內存。?

5.如果內存申請成功,則從被感染文件中將原先分成多塊的病毒代碼收集起來,并進行組合后放到申請到的內存空間中;?
6.再次調用INT 3中斷進入CIH病毒體的INT?
3入口程序,調用INT20來完成調用一個IFSMgr_InstallFileSystemApiHook的子程序,在Windows內核中文件系統處理函數中掛接鉤子,以截取文件調用的操作,這樣一旦系統出現要求開啟文件的調用,則CIH病毒的傳染部分程序就會在第一時間截獲此文件;?

7.將同時獲取的Windows默認的IFSMgr_Ring0_FileIO(核心文件輸入/輸出)服務程序的入口地址保留在DR0寄存器中,以便于CIH病毒調用;?

8.恢復原先的IDT中斷表中的INT 3入口,退出INT 3;?
9.根據病毒程序內隱藏的原文件的正常入口地址,跳到原文件正常入口,執行正常程序。?

2.病毒的感染?
  CIH病毒的傳染部分實際上是病毒在駐留內存過程中調用Windows?
內核底層函數IFSMgr_InstallFileSystemApiHook函數掛接鉤子時指針指示的那段程序。這段程序共586字節,感染過程如下:

1.文件的截獲?
  每當系統出現要求開啟文件的調用時,駐留內存的CIH病毒就截獲該文件。病毒調用INT20的VxD call?
UniToBCSPath系統功能調用取回該文件的名和路徑。

2.EXE文件的判斷?
  對該文件名進行分析,若文件擴展名不為".EXE",不傳染,離開病毒程序,跳回到Windows內核的正常文件處理程序上;

3.PE格式.EXE判別?
  目前,在Windows 95/98以及Windows NT,可執行文件.EXE采用的是PE格式。PE格式文件不同于MS-DOS文件格式和WIN?
3.X(NE格式,Windows and OS/2 Windows 3.1 execution File?
Format)。PE格式文件由文件頭和代碼區(.text Section)、數據區(.data Section)、只讀數據區(.rdata?
Section)、資源信息區(.rsrc Section)等文件實體部分組成。其中文件頭又由MS-DOS MZ頭、MS-DOS實模式短程序、PE?
文件標識(Signature)、PE文件頭、PE文件可選頭以及各個Sections頭組成。

Windows PE格式文件結構的詳細分析可到下列網址查閱: 

http://www.microsoft.com/win32dev/base/pefile.htm

CIH病毒感染的就是PE格式可執行文件!

  當病毒確認該文件是.EXE文件后,打開該文件,取出該文件的?
PE文件標識符(Signature),進行分析,若Signature="00455000"(00PE00),則表明該文件是PE格式的可執行文件,且尚未感染,跳到過程4,對其感染;否則,認為是已感染的PE格式文件或該文件是其它格式的可執行文件,如MS-DOS或WIN?
3.X NE格式,不進行感染,而直接跳到病毒發作模塊上執行;

4.病毒首塊的寄生計算:
  以往的文件型病毒,通常是將病毒程序追加到正常文件的后面,通過修改程序首指針,來執行病毒程序的。這樣,受感染的文件的長度會增加。CIH病毒則不是。它利用了PE格式文件的文件頭和各個區(Section)都可能存在自由空間碎片這一特性,將病毒程序拆成若干不等的塊,見縫插針,插到感染文件的不同的區(Section)內。

  CIH病毒的首塊程序是插在PE文件頭的自由空間內的。病毒首先從文件的第134字節處讀入82個字節,這82個字節包含了該文件的程序入口地址(address?of EntryPoint),文件的分區數(Number of Section),第一個Section header?首址以及整個文件頭大小(Size of Headers=MS header+PE file header+PE optional header+PE?section headers+自由空間)等參數。以計算病毒首塊存放的位置和大小。

  通常PE格式文件頭的大小為1024字節,而MS header為128字節,PE file header(包括PE?Signature)為24字節,PE optional header為224字節,以上共376字節,Section headers?大小是根據Sections?數量來確定的,但每個Section的大小是固定的,為40字節。一般情況下,Section有5~6個即.tex區、.bbs區、.data區、idata區、rsrc區以及reloc區。這樣計算下來,整個文件頭有408~448字節的自由空間提供給病毒使用。

  在PE格式文件頭的自由空間里,CIH病毒首先占用了(Section數+1)*8個字節數的空間(本文稱為病毒塊鏈表指針區),用于存放每個病毒塊的長度(每塊4字節)和塊程序在文件里的首地址(每塊4字節)。然后將計算出的可寄存在文件頭內的病毒首塊字節數,送入病毒鏈表指針區;修改PE文件頭,用病毒入口地址替換PE文件頭原文件程序入口地址,而將原文件的入口地址保存在病毒程序的第94字節內,以供病毒執行完后回到正常文件執行上來。

  由于病毒的首塊部分除了病毒塊鏈表指針區外必須包含病毒的184字節駐留程序,若文件頭的自由空間不足,病毒不會對該文件進行感染。只是將該文件置上已感染標志。

5.病毒其余塊的寄生計算

  剩余的病毒代碼是分塊依次插入到各Section里的自由空間里的。

要確定該區(Section)是否有自由空間,可通過查看Section Header里的參數確定。Section Headers區域是緊跟在PE?
Optional Header 區域后面。每個Section?Header共占40個字節,由Name(區名)、VirtSize(本已使用大小)、RVA(本區的虛擬地址)、PhysSize(區物理大小)、Phys?off(本區在文件中的偏移量)和Flags(標志)組成。其結構如下所示:

typedef struct _IMAGE_SECTION_HEADER {

UCHAR Name[8];?

ULONG VirtSize;

ULONG RVA;

ULONG PhysSize;

ULONG Pyus off;

ULONG PointerToRelocations;

ULONG PointerToLinenumbers;

USHORT NumberOfRelocations;

USHORT NumberOfLinenumbers;

ULONG Flags;

} IMAGE_SECTION_HEADER

  病毒將整個Section Headers讀入內存,取第一個Section?Header,計算出該Section的自由空間(=PhysSize-VirtSize),以確定可存放到該區的病毒塊字節數;計算出病毒塊在該區的物理存放位置(=Physoff+VirtSize);計算出病毒塊在該文件的邏輯存放位置(=VirtSize+RVA+ImageBase);修改VirtSize(=該塊病毒長度+原VirtSize);修改Flags,置該區為已初始化數據區和可讀標志;將該區的病毒塊長度和邏輯指針參數寫入病毒鏈表指針區相應區域;求出病毒剩余長度,并取下一個Section?Header。反復前面的操作,直到病毒全部放入為止。

6.寫入病毒

  病毒程序在前面只是計算出了病毒的分塊、長度和插入到文件的位置等參數,將這些參數用PUSH指令壓入棧中。在計算完所有病毒存放位置后,才從棧中POP出進行寫盤操作。寫盤的步驟如下:

以逆序將各塊病毒寫入文件各區(Section)相應的自由空間中;?
將病毒首塊寫入文件頭自由空間內;?
將病毒塊鏈表指針區寫入文件頭;?
將修改后的Section Headers寫回文件;?
將修改后的PE File Header 和 PE File Option Header寫回文件?
置病毒感染標志,將IFSMgr_Ring0_FileIO程序的第一個字節(通常是55h='U',即PUSH?EBP的操作代碼)寫到PE文件標識符(Signature)'PE'的前一地址內(原為00h),'00PE0000'改為了'UPE0000'。?
 

病毒讀入文件和寫入文件都是通過調用系統內核的IFSMgr_Ring0_FileIO的讀(EAX=0000D600)和寫(EAX=0000D601)功能實現的。

2.病毒的發作?
1.病毒發作條件判斷

在CIHv1.4中,病毒的發作日期是4月26日,病毒從COMS的70、71端口取出系統當前日期,對其進行判斷:

MOV AX,0708

OUT 70,AL

IN AL,71 取當前系統月份->AL

XCHG AL,AH

OUT 70,AL

IN AL,71 取當前系統日->AL

XOR AX,0426 是否為4月26日

JZ 病毒發作程序?

 

如果系統當前日期不是4月26日,則離開病毒程序,回到文件的原正常操作上去;若正好是4月26日,則瘋狂的CIH病毒破壞開始了!

2.病毒的破壞

①通過主板的BIOS端口地址0CFEH和0CFDH向BIOS引導塊(boot block)內各寫入一個字節的亂碼,造成主機無法啟動。

  為了保存BIOS中的系統基本程序,BIOS先后采用了兩種不同的存儲芯片:ROM和PROM。ROM(只讀存儲器)廣泛應用于x86時代,它所存儲的內容不可改變,因而在當時也不可能有能夠攻擊BIOS的病毒;然而,隨著閃存(FlashMemory)價格的下跌,奔騰機器上BIOS普遍采用PROM(可編程只讀存儲器),它可以在12伏以下的電壓下利用軟件的方式,從BIOS端口中讀出和寫入數據,以便于進行程序的升級。

  CIH病毒正是利用閃存的這一特性,往BIOS里寫入亂碼,造成BIOS中的原內容被會徹底破壞,主機無法啟動。

  所幸的是,CIH只能對少數類型的主板BIOS構成威脅。這是因為,BIOS的軟件更新是通過直接寫端口實現的,而不同主板的BIOS端口地址各不相同。現在出現的CIH只有1K,程序量太小,還不可能存儲大量的主板和BIOS端口數據。它只對端口地址為0CFEH和0CFD的BIOS(據有關資料為Intel?
430TX chipset、部分Pentium chipsets)進行攻擊。

②覆蓋硬盤

  通過調用Vxd call?
IOS_SendCommand直接對硬盤進行存取,將垃圾代碼以2048個扇區為單位,從硬盤主引導區開始依次循環寫入硬盤,直到所有硬盤(含邏輯盤)的數據均被破壞為止。

3.病毒的清除?
  目前,檢測和清除CIH病毒的程序已有很多, KV300、瑞星、Norton?Antiviurs,這些殺病毒工具都非常有效。受CIH病毒破壞后系統如何恢復的文章也有不少。這里本文只給出一般的檢測和清除方法和程序。

病毒的檢測?
①利用"資源管理器"進行搜尋

  具體的搜索方法為:首先開啟"資源管理器",選擇其中的菜單功能"工具>查找>文件或文件夾",在彈出的"查找文件"設置窗口的"名稱和位置"輸入中輸入查找路徑及文件名(如:*.EXE),然后在"高級>包含文字"欄中輸入要查找的特征字符串----"CIH?v",最后點取"查找鍵"即可開始查找工作。如果在查找過程中,顯示出一大堆符合查找特征的可執行文件,則表明你的計算機上已經感染了CIH病毒。

  但這種方法中存在著一個致命的缺點,那就是:如果用戶已感染了CIH病毒,那么這樣一個大面積的搜索過程實際上也是在擴大病毒的感染面。

②Debug檢測PE Signature

用/windows/command/debug.com檢測.EXE。

通過"程序"進入"MS-DOS方式",在MS-DOS方式下:

DEBUG XXX.EXE

-D CS:3F 41

如果顯示的值是0x554550("UPE"),則該文件有可能已經感染了CIH病毒。

總結

以上是生活随笔為你收集整理的CIH病毒庐山真面目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。