The Monkey Virus

B85506043 賴勝華

B85506050 江至軒

Monkey是被報導為在歐洲橫行無阻的一種開機型病毒。在此,我們要討論兩種在內容及病毒碼載入位置皆不相同的例子。不過它們都是同一種病毒的變型,應該是由同一人所寫。由於它的操作方法導致它沒有Trigger Routine,不過卻能造成極大的傷害。它的名字經過編碼的函式編碼後隱藏在這兩個例子的結尾。

Installation and Operation

當用被感染的軟碟開機時,病毒會藉此感染硬碟的MBS磁區。感染過程由初始化各個參數開始。一個取得可用記憶體大小的請求被送到BIOS1 K Bytes會從記憶體頂端被移走,而原系統的Int 13h會被病毒取得,再掛上病毒自己的Int 13h,並且會算出一個節區位置,將病毒碼置於記憶體頂端。下一步,硬碟的MBS會被讀進記憶體。萬一適合感染的特徵被發現,病毒會辨識出原MBS的位置,把它讀進記憶體,把自己解碼,並將控制權交給MBS繼續執行開機動作。如果硬碟的MBS是乾淨的,病毒便會藉著將原MBS的備份編碼並儲存下來。

‘ENcryption’可說是一誇張的解碼過程:在這兩個例子中,都是用把Sector中每一個Byte2EhXOR的動作。這應該是為了逃避偵測的防衛動作,但對一個好的掃描程式來說是沒有用的。

一但掛上後,病毒會攔截對硬碟存取服務函式的呼叫。然而對所有的呼叫中,只有25%的機率Infection Routine會被啟動,這使得病毒的複製工作有點困難。對硬碟中Sector 1Sector 0Head 0或軟碟上Head 1等磁區的讀取請求會由一個Routine來處理,它會完成讀取的請求並測試這些磁區是否已被感染過。如果是的話,病毒會在傳回給Calling Routine之前先將原MBS收集並解碼。而對存取的請求則用稍微不同的處理方式:對於寫入硬碟Sector 1Sector 0Head 0的請求會被換成一個磁碟reset command,藉以保護病毒碼免於被覆寫。

Infection

在感染之前要先做兩個檢查的動作。第一個檢查動作只是為了避免重複感染。第二個就較為有趣了:病毒看來好像要找一個特定的開機磁區(可能是防毒程式的某部分)然後更改它的操作方式。

第一個測試是找出MBSOffset 01Fah的值是否為9129h。如果是的話便放棄感染。如果不是的話便繼續第二個測試(見下文)。如果不存在的話,病毒把它的程式碼拷貝到MBS並且在寫入到另一個磁區(雖然總是在Track 0)之前將現在的MBS編碼。此磁區位置隨著不同的媒體而變:

Head Sector

360 K floppy 1 3

720 K floppy 1 5

  1. 2M floppy 1 14

1.44M floppy 1 14

Fixed Disk 0 3

在軟碟片上這些位置代表了根目錄最後的磁區,病毒的感染將會把任何存在此處的File Entry破壞。

此函數的第二個旗標更是有趣。如果MBSOffset 0119h含有6150h的值,病毒將會把磁碟上第二個磁區當作MBS,並把病毒碼寫到此磁區。

6150h的旗標值可被翻成如下的ASCII“PA這可能是在MBS程式碼常出現的”Partition”這字的一部份。這檢查步驟似乎嘗試跳過某些機器的啟動保護措施。如果欲到這種系統,感染可能會不成功,但病毒碼有一個嚴重的Bug造成系統當機。

Monkey

化名:不知道

類型:主要啟動磁區病毒

感染:硬碟和軟碟

在磁碟的自我辨識:Value 9219h at Offset 01Fah.

記憶體中自我辨識:沒有

Hex pattern(On Master Boot Sector or in Memory)

83F9 0373 3A3A 3475 3680 FC02

740E 80FC 0375 2C80 FA80 7227

攔截:Int 13h讀取要求

Trigger:未發現

移除:需要用特殊軟體來移除