Diamond

Diamond屬於在MS-DOS運作且有一定危險性的TSR檔案寄生病毒，作者為Dark Avenger。此病毒以部分變種的觸發行為所顯示的ASCII圖形命名。

已知的變種有28個並分5個版本：

* Virus.DOS.Diamond.444
* Virus.DOS.Diamond.568
* Virus.DOS.Diamond.607
* Virus.DOS.Diamond.978
* Virus.DOS.Diamond.1013

另有3個變種屬於此族。

## 感染行為

執行病毒後，其程式會留在記憶體中保持運作，並會使用INT 8和21h，藉此感染任何執行的應用程式。

在EXE的應用程式中，檔頭有分「MZ」和「ZM」兩種，當病毒偵測到這個檔頭時，儘管檔案格式是COM（COMMAND.COM就是以MZ作為檔頭的DOS應用程式），它仍會當此為EXE格式，並在感染之後將檔頭改為「MZ」。

此病毒在感染檔案時有機會損毀它們，令它們不能正常工作甚至會當掉系統。

部分變種（不等於666位元組而且小於978位元組）不會檢查自己的TSR程式是否已經在RAM，再次執行或感染檔案後它就會再放置一份到RAM中，使之佔用更多空間。也就是感染越多的檔案，可用的記憶體也會越來越少。

此病毒在感染檔案時從寄主中抽取8個位元組到自己的程式碼後尾作為辨識，在不同內容的檔案這個字串都可以不同。如果病毒在RAM時，帶有這字串的受感染的檔案會被顯示成原本的檔案大小，也就是把感染大小隱藏。

以下為抽取的位置：

 從寄主抽取的位置（16進制）

雖然所有變種都存在這個機制，但只有部分的變種有應用到。

### Diamond.444和465

開始時會設一個倍率基數1，每感染一個程式後增加。而且增加的方法都不同。這些變種不檢查檔案是否曾被感染過故會重複感染。

這些變種利用迴圈檢查感染後的新檔案大小，如果感染後的總大小超過或等於65,024位元組，那麼它會跳出迴圈。對於感染DOS應用程式，在上述情況會在執行該程式後回到DOS，但不感染；而在EXE格式的情況下則是感染後當掉系統。

在感染一個DOS應用程式後，倍率基數每次加1，所以感染的大小的增長倍數就是1、2、3、4、5、6...。因為它不感染比自己本身小的檔案，所以最大的倍率可達145（Diamond.444）或138（Diamond.465）。

而在感染EXE應用程式，倍率增長方式稍為不同，可用以下公式計算：

所以感染大小增長倍數就是1、2、5、13、34、89。89之後的倍數已經變的非常大而且已經遠超過感染大小上限。

如果使用者重啟電腦，當病毒再次載入RAM後，倍率就會還原到1。

被這些變種感染的DOS應用程式將無法執行原本的程式內容，而部分EXE應用程式則可。

### Diamond.485

每次感染執行的程式後不會回到DOS，也就是當掉系統。

這變種不會檢查檔案是否曾被感染過所以會重複感染。

### Diamond.568、584、594、602、606、608、609、614和620

每次感染執行的程式後不會回到DOS，也就是把系統當掉。不過會檢查是否曾被感染，如是，則只當掉系統。

Diamond.602感染檔案後不當掉系統。

Diamond.606、609和614不感染比自己小的檔案。

### Diamond.607、621至978、1013至1110、Greemlin.1146和RockSteady.666

這些變種利用8位元組字串檢查機制來自我隱藏，在感染檔案後不會看到檔案大小改變，而且不感染比自己小的檔案。受感染的程式執行時可能會出問題。

### Diamond.Lucifer.1086

此變種也會利用8位元組字串檢查機制來自我隱藏，如果受感染的檔案原本的時間戳記為上午12:00:00，此變種將其移除使之沒有修改時間。

## 進階資料

下表列出所有變種的TSR在記憶體所佔用的空間。

MD5：

註：以上部分變種需更改檔案二進位內容方能正常執行測試。

### Diamond.568、584、594、602、606、608、609和620

當使用者嘗試輸入DIR或複製檔案的指令，這些變種會令相關指令跑進無效的程式碼，從而會當掉系統，並可能會癱瘓CPU的運作。事後必須冷重啟。

DOS版本7.1有比較安全的機制，在這個情況發生時不一定會當掉系統，而是中止有關操作並回到DOS。

### Diamond.666.b和RockSteady.666

如果在任何月份的13日執行受感染的程式，這些變種以INT 13h將Head 0的首10個柱面格式化，並以垃圾訊息覆寫C:首32個邏輯磁區，之後再以INT 19h重啟系統。

### Diamond.891

此變種在任何時間的59分50秒至0分14秒期間嘗試在畫面上顯示不同顏色的ASCII 04h字元（階磚），但失敗。

### Diamond.978

此變種會在星期二將C:格式化，但因編程出錯，它指向第三個軟碟機。

此變種亦會在付小時的59分50秒至0分14秒期間嘗試在畫面上顯示不同顏色的階磚字元，但因為當中有嚴重錯誤的程式碼，如果在這段期間執行任何程式，系統會跑進這段錯誤程式碼的無限迴圈，硬碟也會無法被讀取（不過其當中的資料沒受影響）。

### Diamond.1013、1014、1024、1050、1063、1096, 1110和Lucifer.1086

這些變種會在星期二嘗試將C:格式化，但因編程出錯所以指向第三個軟碟機。

如果病毒已在RAM中又或者受感染的程式在每小時的59分50秒至0分13秒期間執行，它會在畫面上顯示不同顏色的階磚字元所組成的大階磚圖案，之後會散開不停彈跳並逐點清除畫面上的文字。任何指令都無法清除這些階磚字元。

Diamond.1013的階磚字元不會彈跳，可以容易的清除掉。

### Diamond.Greemlin.1146

這變種同樣會顯示和彈跳階磚字元，同時減慢系統約10%的處理速度。如果在7月14日執行受感染的程式，它會存取插入的軟碟，並覆寫當中部分的磁區。

變種
--

Diamond總共有31個變種：

* Virus.DOS.Diamond.444
* Virus.DOS.Diamond.465
* Virus.DOS.Diamond.485
* Virus.DOS.Diamond.568
* Virus.DOS.Diamond.584
* Virus.DOS.Diamond.594
* Virus.DOS.Diamond.602
* Virus.DOS.Diamond.606
* Virus.DOS.Diamond.607
* Virus.DOS.Diamond.608
* Virus.DOS.Diamond.609
* Virus.DOS.Diamond.614
* Virus.DOS.Diamond.620
* Virus.DOS.Diamond.621
* Virus.DOS.Diamond.624
* Virus.DOS.Diamond.626
* Virus.DOS.Diamond.666.b
* Virus.DOS.Diamond.891
* Virus.DOS.Diamond.978
* Virus.DOS.Diamond.994
* Virus.DOS.Diamond.1013
* Virus.DOS.Diamond.1014
* Virus.DOS.Diamond.1024.a/b
* Virus.DOS.Diamond.1050
* Virus.DOS.Diamond.1063
* VIrus.DOS.Diamond.1096
* Virus.DOS.Diamond.1110
* Virus.DOS.Diamond.Greemlin.1146
* Virus.DOS.Diamond.Lucifer.1086
* Virus.DOS.Diamond.RockSteady.666

## 其他資料

Ah和Rocko屬Diamond的族。

Diamond.666.b和RockSteady.666是Rocko的後繼版本。

Diamond.994的TSR程式碼中存在無效執行緒，執行後會在短時間內鎖死系統，而且也不能觸發。

自我隱藏的變種能互相偵測，對於存在多於一個變種感染的檔案，在其中一種在RAM時顯示的檔案大小會有可見的差異。

Diamond.444和465包含以下內部字串：

```
9090909090

```

Diamond.485、568至626、891、978、994、1013、1024和1096包含以下內部字串：

```
7106286813

```

Diamond.666.b和RockSteady.666包含以下不完整的內部字串：

```
RocK STeaDY

```

Diamond.1050包含以下內部字串：

```
NEWDIAMOND

```

Diamond.1063包含以下內部字串：

```
DAMAGE!!!!

```

Diamond.1110包含以下內部字串：

```
Jump for joy!!!
DAMAGE-B!!

```

Diamond.Greemlin.1146包含以下內部字串：

```
greemlin

```

Diamond.Lucifer.1086包含以下內部字串：

```
Lucifer (C) by C.J.
C.J.

```

## 參考來源

1. 在VX Heaven上記載的Diamond源始碼
2. Diamond在VX Heaven上的變種清單
3. Diamond在Online VSUM和F-secure上的描述（僅部分變種）