Manzon
:令人畏懼的行為 姓名:賴昭廷學號B85506001
Manzon
是一個未受控制,多型態,常駐於記憶體的傳染者。它的目標是COM和EXE檔。它的名字取自一個在病毒裡的一個字串,解碼後為:MANZON(c)Sgg1F5PZ'.
當一個受感染的程式被執行,病毒會在宿主程式執行前接管,並將本身的主程式解碼。兩個副程式將其餘的程式碼解譯,至此病毒就準備好執行。那兩個副程式通常一起工作以提供雙重的編碼;第一個程式有時僅僅為第二個程式做設定。
從解碼完的程式返回時,控制會通過第二行的程式碼,包含了一個有效的說明。它是呼叫另一個處理
'Are you there?'的副程式,而且如果必要,還會負責病毒常駐於記憶體部分的裝置和宿主程式最後的執行。
Are You There?
這個病毒首先呼叫
21h的中斷,其AX=DCBAh。如果傳回的DX=DCBAh,病毒認為它已經常駐於記憶體內,會准許宿主程式執行。如果不是,則會使用標準DOS21號中斷呼叫把自己裝置於記憶體內。
下一個呼叫使用
4Ah的功能,它通常是要求DOS去延伸指令節區到FFFFh段。這會直接停止動作,但結果會傳回至
BX內,16-bit的指令節區內最大的大小。
Manzon接著從節區內刪除1744bytes並且重複呼叫以減少節區大小。至此病毒已經在記憶體內創造了一個1744-bytes的洞。
再下一個
48h函式的呼叫,要求了一個1728bytes大小的節區。由DOS提供,傳給病毒新家的位址於AX暫存器。在釋回和那些要求的記憶體大小差別為16bytes。這並不浪費:程式設計師似乎意識到必須准許DOS留住16bytes在新創造出的節區內以保留住記憶體控制區MCB(memory control block).
在開始使用新的節區之前,
Monzon會修改MCB,替換製造者,製造一個顯然是屬於DOS的位址。這是一個很方便的狀態,可以讓病毒避免離開任何的tell-tale信號。使用者應該使用記憶體mapper去審慎的調查記憶體的容積。Manzon接著從主體拷貝超過1712bytes至新的節區去。
Hooking
Manzon
的下一個工作是選擇中斷的媒介.它的目標僅是21h的handle。21h的handle會在檔案執行之後將控制權交給病毒。
首先,
DOS的35h功能通常是去取得中斷21h handle的位址。如果Manzon認得這個位址內的資料,它會將這個從執行鏈的下一個執行程式抽離,使用這個值而不用原本有的。事實上從中斷鏈結中移除'已知'的過程,我並不知道 Manzon在這找什麼,它也許因為防毒程式的常駐而失去作用。
病毒利用獲得的位址去建立一個
JMP指令,它會用來讓控制去到下一個21h中斷handle。然後用DOS的25h功能去將21h中斷的向量指標指向自己的操作者上。一旦完成,之後所有DOS程式的執行都必須經過病毒的檢查。
Manzon in Memory
現在病毒以經常駐,它必須允許宿主可以執行。允許宿主可以執行的動作和
COM&EXE檔不同。病毒依照一個字(work)來決定檔案的形式:如果病毒是100h,表示是COM檔。這個檔案開始的映象(image)是使用病毒感染期間儲存的值。所有的暫存器都被重設成零並且病毒的結構都存回進行中指令節區的offset 100h--足夠去呼叫宿主程式。
對於
EXE檔,the store header value通常去計算程式的進入指標。所有的暫存器都被設為零,然後病毒執行RET指令去啟動EXE的程式碼。
The Interrupt Handler
所有可操作的病毒,包含遭受感染的程式,由它的中斷
handle提供—利用每一次軟底自動產生21h中斷。每一次發生時,管理者的程式碼就會去檢查中斷的要求是否為'Are you there?'的呼叫。如果暫存器AX在開頭包含DCBAh,病毒僅載入相同的值到DX去並將它傳回呼叫者。
如果不是
'Are you there?'的呼叫,Manzon就檢查暫存器AX是否是關檔(3Eh)要求。如果是,這個要求就會被中斷並且執行控制程式已決定是否要感染這個檔案。
當不是一個關檔要求的時候,
Manzon接著會去檢查是否為一個可執行檔(4Bh)的呼叫。如果是,Manzon會中斷這個呼叫,用標準的21h中斷呼叫去開一個檔案,並且在原始呼叫的執行檔執行前立即關檔。
當
Manzon的21h中斷呼叫handle使用21h中斷指令時,會強迫PC製造一個遞回呼叫去呼叫Manzon的中斷handle。就像病毒打開且關上一個檔案,也會滿足自己對上面所提到的3Eh關檔功能要求。
當一個關檔程式被中斷時,
Manzon會檢查以確定這個執行者不是一個標準的DOS執行者,例如CON,LPT,PRN等。這是以測試handle的值(handle value)大於或是等於5來達成的。如果handle的值並沒有通過這個測試,就會被忽略,並且控制會直接到達下一21h中斷的handle。
File Infection
依照這一觀點,
Manzon對它有可能感染的檔案特別有興趣,但是事實上病毒的作者選擇去感染關檔程式使其複雜化。當一個檔案成功的開檔,DOS給他一個handle(一個不同的值)而且只給這個handle。
然而,
Manzon必須知道檔案的名字已確定是一的程式檔,不是一個資料檔。這個回答是去探究DOS的內部結構,在特定的SFT或系統檔案表包含了其他的事:檔案名以及所有的公開的handle。
Manzon
探索所有的表,且獲得指向檔案名的指標。它會紀錄所有檔案的前兩個字母,並且將其編碼,然後對照像是已編碼的值以確定檔案不是和任何相似於防毒的商品。(SC,F-,TB,TO,FV,FI,VI and K-)其他檔案名的最後三個字母,會去測試是否包含'COM'或'EXE'。如果不是,它們也會被忽視。
雖然
Manzon現在有可能會去感染一個檔案,它也顯現了另一個問題。如果那一個檔案沒有開檔以寫入怎麼辦?作者重新排列SFT,它包含了一個byte去控制檔案的持行模式。Manzon插入代表寫入的bit在這個欄位,讓DOS以為這個檔案一直開著以進行讀寫程序。
Manzon
會依照副檔名是否為EXE或COM而將控制權交給兩個程式之一。修正SFT也會閃過那些監視檔案讀寫的軟體。
當一個
COM檔被感染,Manzon會將本身的大小包含在內並且讀前3個bytes到buffer內。病毒接著進行清除,假設所有的COM檔都從JMP指令開始執行,所以會有將這個指令寫到記憶體的程式。
它使用這個虛構的
JMP指令去計算跳到檔案的位置距離結尾有多遠。如果這個值比1398小或大於1670,病毒就會對它有興趣,否則就忽略。這是病毒自我認知的測試:感染之後,一個COM檔並不會更進一步被注意到。
如果這個潛在宿主的檔案超過
62000bytes的長度,一樣會被赦免。除了這些,宿主在記憶體內的3bytes的部分,會被JMP指令所取代,並跳到檔案的末端。一個新創造出來病毒多型態的影像,被寫在宿主檔案的最後。Manzon現在僅僅將連接的跳躍指令寫下,它可以確定宿主程式下次執行時,控制會通過病毒,會在下一個程式的執行之外。
對於
EXE檔的感染是相似的。首先,header的19個bytes會被讀進記憶體內,以方便病毒的感染:這是一個雙重檢查以確定由一個有效的EXE檔開始,它屬於4D5Ah或5A4Dh。自我認知測試的基礎在於從檔案結束的起始指標提供了避免重複感染。這個多型態的程式接著被呼叫去重新將病毒編成密碼,並寫入檔案內。最後,EXE的header已被修正且已被完全的感染。
Summary
Manzon
是一個有小麻煩,依然存在且繁殖快速的檔案病毒例子。它證明了一些非常先進的程式設計技術。從它的多樣和編譯的程式碼來看,應被視為一種非常真實的威脅。幸運的,它並沒有帶有額外和觸動程式。
本名:不詳
型態:常駐於
EXE或COM檔的感染者傳染:少於
62000bytes的COM檔:任何長度的EXE檔自我檢測:定義在
EXE header內的起始指標:或範圍少於1398或大於1670 的初始COM檔的JMPHex Pattern in File:No simple hex pattern is possible.
Hex Pattern in Memory:3DBA DC75 0590 908B D0CF FAFC
80FC 3E74 183D 114B 7403 E95E
攔阻:
Int 21h DOS handler觸動程式:無
Payload:
無移動,除去:在乾淨的系統條件之下,確認並置換受感染的檔案」
原著:
Kevin Powis(C)1998 Virus Bulletin Ltd.