Ground Control to Major Tom

B85506001 賴昭廷

Major.1644是一個會影響執行檔,常駐於記憶體的病毒。當一個中毒的檔案在PC上執行時,這種病毒的解把器便受到控制並將其餘病毒解碼的回圈中。

 

病毒利用密碼來防止掃毒器發現用於搜尋位元的一個固定順序。這種程序與Major.1644一起作用,但是這種程序的過程式冗長且固定的,所以能備用來作為搜尋自串。

 

The Major Moves In

 

一旦這種病毒被解碼之後,進一步的檢厭結果便會出現Virus在解碼後的第一項指示便是一個經由int 21h,AX=ABCDh的呼叫Are you there?

 

1234h在AX暫存器中只有在病毒的複製被載入之後會有結果回傳。如果一旦有結果回傳,這個病毒就不在做任何動作。從病毒本身便能夠得到宿主程式的起始點,並且控制經過的位址,允許員宿主程式能繼續正常執行。

 

如果這個傳回值並不是1234h,那這病毒就必須把它自己放入記憶體內。Major.1644在載入宿主程式時,藉由取代由DOS初始化的節區來達到上述目的。

如此便可以使病毒去檢諺語這節淤有關的MCB。

 

MCB(或稱為記憶體控制區怪)是藉由一組在記憶體中連結的指標所串連起來的。在任何一個MCB的第一個BYTE指出是否這個特殊的MCB是在這個練節中的最後一個。這個病毒將一直通過這一個練節值到他到達最後一個MCB。如果他到達這個MCB鏈結的末端之前遇到影像記憶節區,那他便會放棄他常駐的企圖。一旦MCB鏈結的末端被發現之後,他便會直接的改變。

 

Major.1644降低了29kb與最後一個MCB相關的記憶體容量。當我第一次發現這個數值,我必須去確定它~我不知道有任何理由去減少這麼巨量的記憶體,除非程式設計師並不瞭解存在於MCBs的值,是在存在於區段內,(16bytes的倍數)裡。

 

一旦MCB被修改過後,病毒便在記憶體中做了一個可以常駐的巨大空間。然後,他便複製1643(非1644)屬於他自己影像的bytes到記憶體中的這個新位址。

下一個工作便是準備變成常駐程式,並且將它的病毒碼連結到系統的節段中,如此一來便可使病毒在適當的時機中取得控制。

 

這種病毒先使用非被文件化但被常用的功能去獲得TSR,程式設計師稱為INDOS旗標的東西。這是一個TSR程式可以用來在後來發現是否可以安全的去中斷DOS的指標。DOS保持這種旗標並且設定其值當他在一個不穩定的狀態及不願被中斷的情況之下為一。Major.1644呼叫int 21h,AH=34h,這兩者傳回一個指標到旗標。

 

中斷21h(都是services)和08h(系統計時器),藉由病毒而連結在一起。這兩種媒介的原始目的是被用來為後來的使用者架構遠端呼叫到原始路徑。這兩個媒介隨後被依在病毒體內的24Ah及407h順序修改,並指向病毒的handle。

 

從這時開始,病毒中斷handlers是積極主動的,所以這一個病毒在暫時宿主體內的複製所做的,便是允許宿主能繼續執行。病毒其他所有的程序都被上述兩種中斷handler所控制。

 

Interrupt 21h (DOS Services)

 

當這個handler被利用,病毒就會檢查暫存器AX,如果它被設定為ABCDh,Major會認出並僅僅將它設為1234h為顯示它已經在記憶體內並且回去(return)。這個病毒唯一有興趣的函數是4B00h(叫出並執行程式)(Load and Execute Program)

 

如果並不是它感興趣的,病毒會讓控制經過經由遠端呼叫,建構在初始DOS的handler的安置(installation)上。所以那裡沒有潛在的能力,而且所有檔案大小的增加(increases)和檔案內容改變都可以在目錄的列表中看到。

 

在函數4B00h的情況中,handler會在允許目標檔案如平常執行之前設定有關感染的事。Major.1644接著建立並儲存檔案的特性,然後清除它們。這可讓只可讀的檔案被感染。依循這個,一個嚴重錯誤的handler就被裝置,嘗試去防止那些當DOS偵測到硬體錯誤(例如,磁碟防寫),DOS所發出的錯誤信息。

 

由於程式設計者的錯誤,病毒病沒有如預期的作業。所以,當在PC上使用防寫的軟碟時,當寫入保護錯誤發生時,就是被然感染了。

 

在這之前,病毒會讀目標檔案的前18h bytes。病毒只對EXE檔有興趣,而且在這一層在測試中的檔案會被檢測以確定頭兩個bytes是EXE的特徵(signature)(4D5Ah)。

 

如果檢查通過,病毒會檢查看看是否檔案已經被感染,測試一個沒用過,稱為CHECKSUM背景的EXE header記錄。如果已被感染,這背景會包含六進位數字DEADh。

 

如果檔案沒有被感染,接著檔案的指標會被移到檔案的結尾,而且對病毒編碼複製,完全解碼的程式會被寫出。修改過的EXE header,包含DEADh特徵會被寫回去。檔案的日期,時間和特徵接著被重新儲存。最後,嚴重錯誤的handler is unhooked and the new host-現在被感染的-可以執行了。

 

Interrupt 08h (Timer Tick)

 

08h中斷的handler每秒接受十八次的控制:這是由時間晶片所控制的硬體中斷。

 

病毒由使用遠端呼叫原始的計時器程式開始,如同所有好的TSR。然後Major.1644從低記憶體取出一個最小記憶體-另一方面也是一方面也是計時器的功能性。這個最小記憶體幾乎一小時增加一個。

 

這病毒檢查這現在值如果不是二,病毒就不做任何事,然後這handler程序就完成了。這最小記憶體的值確實是二是如此罕見的,以致於我相信它被意圖打算允許這位程式設計師以人工開關這個程式。

 

如果被找到的值是二,病毒檢查本身內部的旗標,它會顯示病毒是否已經在執行中。如果這些裡的任何旗標或INDOS系統的旗標被設定,病毒就不能繼續,而且handler會結束程序。假定這些旗標被清除,病毒會立即設定內部的旗標以顯示08h中斷的handler正在執行,以防止handler這部分的循環的紀錄。

 

在繼續之前,一個新的堆疊被分配,而且嚴重錯誤的handler被裝置,如同之前在21h中斷所敘述。

 

病毒現在進入程式的邏輯區可以使任何的PC比作者所有的PC來的沒有用處或目標。病毒在正在執行磁碟中找尋兩個檔案:BBV6\BBSAUDIT.DAT和BBV6\BBSUSR.DAT這些檔案的名字對以下的原文有反應,可在解碼號的病毒內見到:

The Major BBS Virus created by Major tom

如果相關的檔案並不存在,handler的中斷工作就完成了,而且PC的控制會交還給使用者。如果檔案被找到,它們看起來擁有嚴謹的格式,就像病毒在記錄中包含第一次所讀到的,並且在檔案中醫次一個的執行這些記錄。對每個記錄,Major.1644會嘗試對照記錄在病毒內使用者的名字去配對。這些名字是Puppet,Image,Gnat,Minion,Cindy和Fnor。

 

當病毒找到的使用者名字和這些字串一樣,它會對記錄作一小小的修正:將第一個byte改成1。

 

不幸的,指出這有什麼影響並不可能-在沒有那些特定檔案(任何MajorBBS versions 6的setup)格式的詳細說明下。

 

儘管這樣,一些有根據的猜測是可以做到。例如,有理由的認為病毒嘗試由特定的方式去增加符合的使用者的權限。也許一個1在記錄的特定位置以顯示這個使用者是系統管理員。

 

根據這個理論,作者或是它的朋友可以在BBS上創造一個使用者,然後上傳一個受到感染的檔案。如果真的系統管理者在同一台機器上測試了上傳的檔案,它就會(有時)改變作者的使用權限,使他在任何布告欄中有最大的權力。

 

Summary

 

這個病毒包含那些其它會設定除外的,那應該容易被偵測到,縱使內部經過編碼而且容易且快速的感染。所以,綜合Major.1644的事實,它是未受拘束而且要視為一種威脅。

 

Major.1644

 

本名:不詳

型態:EXE檔的感染者

感染途徑:EXE檔

自我檢測:在EXE的header checksum field的值DEADh

Hex Pattern:這個式樣會存在檔案和記憶體內

1E33 DB0E 8BC3 03C1 1F8B

D18B F38A 8730 008B D080

攔阻:DOS 21h中斷的handler:08h中斷計時器的紀錄

觸動程式:無

移除:刪除受感染檔案,從備份複製並蓋過

 

原著:Kevin Powis

Precise Publishing Ltd.