正文 第三章 剖析病毒(一)(1 / 3)

經過上一章的陳述,我們終於可以在程序員的層次上探討計算機病毒了。對於那些已經掌握了計算機技術細節的人,現在就可以深人到你們所關心、感興趣的問題了,那就是令我們都惱火的東西;病毒究竟是什麼?

3.1一個病毒的解剖

我們首先給出最簡單病毒的流程。

一樣或兩樣病毒,更多的病毒比這要複雜。我們將用一種複雜病毒作為一個例子來說明病毒是怎樣產生的。這個病毒的流程圖。注意圖中的每個框都有一個號碼,而我們將對每個號碼所代表的步驟加以說明。①指出我們在哪裏,並保存有關的信息。以後我們需要這些信息。同時把病毒拷貝計數置為零。②今天是那一天嗎?如果是,則要執行作壞事的程序。如果不是,則繼續進行複製處理。這兒是病毒的邏輯炸彈部分。格式化硬盤,通常是你係統的第三個驅動器(C盤),如果沒有C盤,就格式化我們用於啟動的驅動器盤。一旦格式化已經完成我們就可以退出。沒有必要告訴受害者我們的出現。下一次當他企圖重新引導係統時,自然會認識到這一點。⑦如果不是那一天,就在當前驅動器上把病毒的位置保存起來,這樣當病毒完成後能夠返回。⑧初始化驅動器變量為我們將在其上工作的那個驅動器。這標誌著這個框架的最外層循環的開始。這個循環將我們移過目標係統中所有可用的驅動器。⑨順序地打下一個驅動器,如果沒有下一個驅動器,我們就結束,因為分配驅動器號時,DOS不允許跳過某些數字。如果存在下一個驅動器,裏麵有磁盤嗎?如果沒有,重複這幾步。如果有磁盤,轉移到其上,且進入它的根目錄。初始化指針,使其指向目錄的項部。這一指針用來指出下一次將要工作的子目錄,然後開始第二個循環,它將我們順序地移過每一個子目錄。⑩初始化文件指針。文件指針用來指出我們正在對當前目錄中的哪一個文件進行工作。然後開始第三個循環,它將我們移過當前目錄中的每一個文件。

選擇一個工作文件。保證它不是一個已被刪除的文件,而且判斷它是否為一個子目錄。?如果它是一個子目錄,把它的位置壓進子目錄棧,且找指針加一。

確認文件未被感染,如果文件已被感染,使已找到拷貝數的計數器值加一。

如果計數器值大於或等於50,轉向步驟的破壞子程序。

如果文件還未被感染,保存係統時鍾等存儲器的值以及文件的屬性字節。把屬性字節置為十六進製的“00”以使文件成為“正常”的文件,從而允許對其進行任意的存取。

把病毒複製到文件中某處。消除我們的足跡,以便沒人能注意到我們所做的事情。把係統時鍾等存儲器的值以及文件的屬性字節恢複為我們做這些事情之前時的值。當我們完成複製時,拷貝計數加一,而且查看是否計數值已超過或等於印,如果確實如此,我們應該搗毀係統。

這裏還有文件嗎?如果有文件,則文件指針加一,而且開始重複第三個循環。

還有另外的子目錄嗎?如果有,轉移到該子目錄,並退,開始重複第二個循環。如果沒有,我們結束這個磁盤,並開始重複主循環。

3.2又一個病毒的解剖(小球病毒)

1989年初,“小球”病毒首次在我國出現。它並不通過網絡係統傳播病毒,而是通過磁盤互相傳染。隻要對不帶病毒的軟盤讀盤,便使其傳染上病毒,一旦使用帶有病毒的軟盤啟動係統,無病毒的硬盤立即就染上病毒。在開機後剛好整點或半點時讀盤將會激發病毒,發作時屏幕上有小球不停運動,直到複位係統或關機。“小球”病毒屬於良性病毒,它隻幹擾屏幕顯示,並不破壞計算機內的數據,該病毒程序在病毒的引導、傳染、激活和病發過程等方麵有較高的設計技巧。

“小球”病毒程序在磁盤上分為兩個部分存放。第一部分存在DOS分區的第一扇,即原引導程序的位置。第二部分在盤上某一標為“壞”簇的第一個扇區,而該“壞”簇的第二個扇區則裝有真正的引導程序。

3.3計算機病毒的結構

通過以上對兩個病毒的概括介紹,我們不難發現,計算機病毒結構包括三大功能模塊:引導模塊、傳染模塊和破壞或表現模塊。

3.3.1引導模塊

當被病毒感染的磁盤開始工作時,病毒的主引導模塊將病毒由外存引人內存,並使病毒程序成為相對獨立於宿主程序的部分,從而使病毒的傳染模塊和破壞或表現模塊進入活動狀態。在某些病毒中,尤其傳染引導區的計算機病毒,其引導模塊還負責將―分別存儲的病毒程序鏈接為一體。由“小球”病毒的引導模塊可以看出,引導模塊不僅在計算機啟動時將病毒程序裝入內存,同時還進行一些必要處理,如將病毒程序鏈接在一起,修改待定的中斷向量使其指向病毒傳染部分等初始化工作,從而使病毒的傳染模塊和破壞或表現模塊進入活動狀態。

3.3.2傳染模塊

病毒的傳染模塊的功能是負責把病毒傳染到其它對象上去。病毒的傳染是有一定條件的。首先,病毒的傳染是有針對性的,不同的病毒針對不同的係統或者同一種係統的不同環境。另外,病毒要判斷係統內是否具有已經感染該病毒的標誌。因此,病毒的傳染模塊是由兩個部分組成的:傳染條件判斷部分和病毒傳染程序主體。

病毒通過特有的標識部分來判斷係統或文件是否被感染。病毒標識是病毒傳染時寫人的,而且病毒的標識是唯一的,每種病毒都以自己特定的字符串作為標誌字符串。