The Monkey Virus
B85506043 賴勝華
B85506050 江至軒
Monkey是被報導為在歐洲橫行無阻的一種開機型病毒。在此,我們要討論兩種在內容及病毒碼載入位置皆不相同的例子。不過它們都是同一種病毒的變型,應該是由同一人所寫。由於它的操作方法導致它沒有Trigger Routine,不過卻能造成極大的傷害。它的名字經過編碼的函式編碼後隱藏在這兩個例子的結尾。
Installation and Operation
當用被感染的軟碟開機時,病毒會藉此感染硬碟的MBS磁區。感染過程由初始化各個參數開始。一個取得可用記憶體大小的請求被送到BIOS:1 K Bytes會從記憶體頂端被移走,而原系統的Int 13h會被病毒取得,再掛上病毒自己的Int 13h,並且會算出一個節區位置,將病毒碼置於記憶體頂端。下一步,硬碟的MBS會被讀進記憶體。萬一適合感染的特徵被發現,病毒會辨識出原MBS的位置,把它讀進記憶體,把自己解碼,並將控制權交給MBS繼續執行開機動作。如果硬碟的MBS是乾淨的,病毒便會藉著將原MBS的備份編碼並儲存下來。
‘ENcryption’可說是一誇張的解碼過程:在這兩個例子中,都是用把Sector中每一個Byte跟2Eh做XOR的動作。這應該是為了逃避偵測的防衛動作,但對一個好的掃描程式來說是沒有用的。
一但掛上後,病毒會攔截對硬碟存取服務函式的呼叫。然而對所有的呼叫中,只有25%的機率Infection Routine會被啟動,這使得病毒的複製工作有點困難。對硬碟中Sector 1或Sector 0,Head 0或軟碟上Head 1等磁區的讀取請求會由一個Routine來處理,它會完成讀取的請求並測試這些磁區是否已被感染過。如果是的話,病毒會在傳回給Calling Routine之前先將原MBS收集並解碼。而對存取的請求則用稍微不同的處理方式:對於寫入硬碟Sector 1或Sector 0,Head 0的請求會被換成一個磁碟reset command,藉以保護病毒碼免於被覆寫。
Infection
在感染之前要先做兩個檢查的動作。第一個檢查動作只是為了避免重複感染。第二個就較為有趣了:病毒看來好像要找一個特定的開機磁區
(可能是防毒程式的某部分)然後更改它的操作方式。第一個測試是找出
MBS上Offset 01Fah的值是否為9129h。如果是的話便放棄感染。如果不是的話便繼續第二個測試(見下文)。如果不存在的話,病毒把它的程式碼拷貝到MBS並且在寫入到另一個磁區(雖然總是在Track 0)之前將現在的MBS編碼。此磁區位置隨著不同的媒體而變:
360 K floppy 1 3
720 K floppy 1 5
1.44M floppy 1 14
Fixed Disk 0 3
在軟碟片上這些位置代表了根目錄最後的磁區,病毒的感染將會把任何存在此處的
File Entry破壞。此函數的第二個旗標更是有趣。如果
MBS在Offset 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:未發現
移除:需要用特殊軟體來移除