B85506066 黃京光 資訊二 電腦病毒概論 & 電腦病毒的起源 根據一些文獻上的記載,電腦病毒的觀念最早是由電腦界的大師馮紐曼(Von Neuman)所引發出來的,在當時他並不是用來設計電腦病毒的,在經過了數年之後,才在貝爾(Bell)實驗室中,言借然原利用這種概念所設計出來,其命名為磁蕊大戰(Core War)。電腦病毒在整個發展的過程當中,起先只是一些具有開玩笑性質的病毒,(例如:兩隻老虎以及大榔頭病毒等等),他們的目的只是要讓那些隨便拷貝軟體的使用者能夠有所警惕。再來就有人設計出覆蓋型的電腦病毒出來(例如:NEKO病毒、癌症病毒以及512病毒等),他們認為既然你不尊重智慧財產權的觀念,就乾脆不要讓你的程式執行。在早期的電腦病毒只是用來懲罰那些沒有道德的使用者,但是近幾年來,這些病毒好像是自認為能夠突破防毒軟體的防護,就代表著自己的設計功力就算比較高,其實這些心態都是不正確的因此,電腦病毒就一直這樣發展下去了。 & 電腦病毒的總類 檔案型病毒:檔案型病毒最大的特色就是他會附著在原來的檔案程式裡面經由程式的執 行來感染更多其他的檔案。 開機型病毒:開機型病毒一般又稱為系統型病毒。這種病毒會利用電腦正在開機時趁機 將自身的程式拷貝到軟/硬碟中(這就是病毒的感染動作)。 混合型病毒:談到混合型病毒,從字面上去想想,他應該是病毒與病毒之間的混合,其 實我們應該明確的說他是具備了檔案型病毒與開機型病毒的特性這樣我 們稱他為混合型病毒,又稱作複合型病毒。 & 電腦病毒的感染方式 常駐型病毒:所謂常駐型病毒是指當您在執行到被感染的病毒程式時,這個帶毒的程式 會將自己常駐在記憶體中,等到下一個程式要執行時躲藏在記憶體中的電 腦病毒就會去感染目前所要執行的程式。對於這一類型的電腦病毒會去攔 截中斷向量來加以感染,相對的此時用CHKDSK去檢查記憶體會少了幾 K。 既然病毒會去攔截中斷向量,所以病毒程式只要利用INT 21h功能就 可以去修改檔案的屬性了。 直接感染型病毒:直接感染型病毒則並不需要暫存在記憶體當中就可以對現在所要執行 的檔案來加以感染,真的是名符其實的直接感染。由於這類型病毒病不需 要常駐在記憶體中,所以其又稱為「非常駐型病毒」。他的特色是因為不 佔用記憶體空間,所以就不用去攔截中斷向量了。 & 電腦病毒檔案結構分析與處理 ◎ 檔案型病毒: 所謂檔案型病毒,顧名思義就是針對檔案而來的,尤其是.COM檔與.EXE檔等。就一般而言,檔案型病毒是最常見到的,一不小心可能您的電腦就會感染病毒。以下我們將重點放在.COM檔及.EXE檔上: COM型病毒: 在還沒研究病毒結構之前,我們先來瞭解一下.COM檔的結構,他到底存在哪些特性?我們用圖一稍微解釋一下。COM黨羽EXE檔最大不同處是在COM檔有64K Bytes的 圖一COM檔之結構 長度限制。COM檔會在執行的時候從100h的位址開始執行,及程式進入點由這個位址開始,當然第一道指令還必須是可以執行的指令。從DEBUG後我們發現FORMAT.COM程式的運作的確是由100h的位址開始執行的。 一、COM型病毒結構分析: 我們在前面已經介紹過.COM檔的結構,接著我們要來討論感染COM檔的病毒結構,為什麼我們的程式中了覆蓋型病毒之後,就無法再使用解毒程式把他還原回來呢?以下會一一解釋。 狀況一:以耶路撒冷(Jerusalem)病毒為例(圖三a)種狀況的病毒最為常見也是最好 處理的一種,在稍後的部份中,我們會來介紹這種病毒的處理。因為.COM檔 必須從CS:0100h的地方開始執行,又由於病毒存在檔案的開頭部份,使得原 始程式在病毒程式的下方。 圖三a COM型病毒結構圖(一) 狀況二:(圖三b)這種狀況稍回複雜了一點首先病毒同樣是先執行病毒程式的前半部, 然後可能利用JMP指令跳到病毒程式的後半部,也就是說要在病毒程式執行玩 時,才會去執行原始程式。請照著箭頭追蹤。 圖三b(二) 狀況三:以Trivial系列病毒及Leprosy系列病毒為例(圖三c),此種情形就是小有名 氣的覆蓋型病毒,病毒程式佔去了原始程式的一小部份,在這種情況下,誰也 無法將這個原始程式還原回來。 圖三c COM型病毒結構圖(三) 狀況四:以Connie系列病毒(圖三d),此種狀況通常在檔案的開頭就加上一道JMP 的指令,也就是一開始是先去執行完病毒程式,然後再去執行原始程式。現在 實際拿一隻Connie2病毒用DEBUG程式 反組譯出來。通常Connie病 毒的第一道指令都是JMP指令雖然這隻病毒在結構上並不怎麼起眼,但是他卻 利用了編碼的技巧,使病毒程式達到千變萬化的地步。 圖三d COM型病毒結構圖(四) 二、 使用DEBUG程式解釋COM型病毒原理介紹: 我們以上面的狀況一為例(圖五)只要將位址1388h的地方搬到位址100h之處,然後緊接著更改檔案的長度,再把他存檔起來就可以了。此檔案結構較為簡單,用DEBUG來解獨輕鬆多了,另外病毒程式的長度為我們自己假設,並沒有意味著是指哪些電腦病毒。 圖五COM型病毒解毒原理圖示 EXE型病毒: .EXE型病毒的結構就比.COM型病毒複雜多了,而且其長度也沒有64K Bytes的限制。另外其比COM檔多了一個檔頭(header),其主要記載著檔案的長度及一些站存器得初值等,所以其程式進入點由此檔頭內的指標(IP)來指定。 一、EXE型病毒結構分析 各位讀者有了這個觀念之後,我們隨即介紹EXE型病毒的結構,請看下圖六的說明。 圖六 由於.EXE檔執行之程式進入點由IP來控制,所以此種病毒結構先將IP指向病毒程式的位址等到病毒程式執行完成之後,再將IP指向原始程式來執行。 二、 使用DEBUG程式解EXE型病毒原理介紹: 由於目前所發現到的EXE型病毒的結構只有一種,或許是跟其檔案結構有關,不像COM型病毒有那麼多種類。因為此種檔案在結構上就比較複雜,他比起COM檔多出一個檔頭(header),所以用DEBUG來解讀就沒有像.COM檔那麼簡單了!我們僅將解EXE型病毒的原理之步驟介紹如下: 1. 先將副檔名更改成其他副檔名(.BIN或其他非.COM之副檔名)。 2. 利用公用程式(如:PC Tools)找出病毒所在的位址。 3. 找出病毒的位址之後,再計算出原始程式的真正長度。 4. 然後還原其檔頭之暫存器(Register)的內容,如:CS、IP與SP等。 5. 2接著在修改期內容為原始檔案的長度。 6. 最後把副檔名更改回來就可以囉。 ◎ 開機型病毒: 開機型病毒也有人稱作系統型病毒,稱他為系統型病毒可能會來的比較傳神一點,也就是說他是針對系統部位來的。在軟碟上只感染啟動磁區(Boot Sector);而在硬碟部份則是感染啟動磁區之外,還多加感染了分割磁區(Partition Sector)。所以我們必須用硬碟分割管理表之手動解毒法來解毒,步驟如下: 1. 在有毒的情況下用C開機。 2. 利用Norton Utility所提供的DISKEDIT程式把分割磁區叫出來。 3. 將分割管理表從80 81到55 AA用抄下來。 4. 用乾淨且與硬碟同版本的DOS磁片重新開機。 5. 執行FDISK/MBR。 6. 再次利用DISKEDIT程式把分割磁區叫出來,現在從下半部80 01開始天入剛才所抄下來的分割管理表。 7. 存檔之後重新開機,此時解讀完成。 & 中斷向量vs電腦病毒: ◎INTERRUPT(中斷)與中斷向量: 在介紹中斷向量之前,必須要先瞭解中斷是什麼意思?在電腦系統中,當有中斷的訊號發出的時候,CPU(中央處理器)便會暫停目前所處理的工作,而去執行所指定程式。所以簡單的說,中斷可以說是暫停的意思。而中斷的來源有哪些呢?一般來說中斷有硬體中斷與軟體中斷兩種。就硬體中斷而言,鍵盤的中斷就是一個典型的例子。就軟體中斷而言,則是我們使用者在程式裡面所使用的,也就是待會要介紹的主題。 我們知道,在MS-DOS系統中提供了256個中斷來供給我們使用,而每一個中斷都會獨自對應到自己所屬的副程式,我們稱他為中斷副程式。而中斷副程式所扮演的角色為:當使用者要去撰寫TSR(常駐程式)時,其必須與中斷副程式連結起來,以便能順利執行使用者的常駐程式。另外。,每一個中斷副程式都會有一個十進位的編號,也就是說當我們要執行他所提供的某種功能時,我們在組合語言中利用INT指令加上一個十六進位的編號,這樣一來我們便可執行每個中斷向量了。 而當有些電腦病毒利用INT 03h、INT13h、INT 21h來感染執行檔案或者修改啟動磁區時,這裡所謂的INT就是指中斷向量啦!當然不同編號之中斷向量所提供的功能也會有所不同。 ◎ 電腦病毒利用中斷向進行感染: 我們知道要在INT指令之後加上一個十六進位的編號就可以執行中斷編號所提供的功能。現在,我們要來介紹大部份病毒所常用的中斷向量及其使用的功能編號。在此,我們再次的強調,我們沒有要教各位寫作病毒的打算,取代而之的是讓你們瞭解這些之後,可以融合我們先前所學過的防毒概念,進而能夠想出一套完整的防毒理念。下面我們針對病毒常使用的中斷向量及其所使用到的功能編號作一個介紹,並且舉出一些實際的病毒實例來介紹,至於其他未介紹到的部份請參考相關的組合語言書籍。 INT 21h介紹: 此中斷向量為目前電腦病毒最常使用到的中斷向量,此向量為MS-DOS作業系統的服務中斷功能,由於目前電腦病毒絕大部份都是DOS作業系統下的產物。所以電腦病毒不得不去使用到這個向量。 功能編號 Function 43h, Subfunction 01h:修改檔案的屬性 在早期的防毒方法,我們只要將檔案的屬性改成唯讀性或許可以避免一些病毒的侵害。但是就目前的病毒寫作技術而言,這些伎倆對他來說是產稱不了作用的。你有辦法更改檔案屬性病毒相對的也利用倒在執行中斷向量之前,設定一些所要執行的功能編號,再去使用中斷向量服務這樣就可以取消您所設定的唯讀性,然後再感染你的檔案。 e實例:Mummy, Sunny等。 Function 31h: 將程式常駐在記憶體中 此項功能使用於常駐電腦病毒,對於非常駐式的電腦病毒則不會使用到這項功能。 e實例:Connie, NATAS(4744), CVEX系列病毒。 Function 2Bh與2Dh:分別為設定系統的日期和時間。 這項功能也是目前大部份的電腦病毒所使用到的,可以作為病毒本身是否要發作及本身是否要常駐在記憶體等等。 e實例: 以米開朗基在三月六日發作為例。 Function 4Bh,Subfunction 00h - 04h:程式再執行的時候,再以呼叫的方式執行其他程式。 e實例:Hammer與Jerusalem為例。 Function 17h:使用FCB方式來更改檔名。 這個病毒很強,連DOS已經宣佈停用的功能還特地拿出來用,目前能夠防止這種病毒只有少數防毒軟體能做到。 e實例:Bad Head為例。 Function 4Eh與4Fh: 找尋第一個及下一個特定的檔案。 有些病毒只針對.EXE檔案感染,有的則只要是.COM檔及.EXE檔都加以感染,病毒就是利用這個功能做到的。 INT 13h介紹 定義: 這個中斷向量就比較少被電腦拿來使用,但是一旦拿來使用,其破壞力是您所無法想像的,就是病毒會格式化您的硬碟。 功能編號: Function 05h:格式化硬碟。 e實例:HAMMER Function 03h:寫入硬碟的磁區。 病毒以這個功能破壞您的硬碟分割區(Partition Sector),當常駐在記憶體的時候,只要對磁片有任何I/O動作都會感染啟動磁區(Boot Sector),有些時候病毒也會利用功能編號0Bh去感染 e實例:Stoned, TEQUILA, MONKEY。 INT 1h介紹 定義: 主要是使用CPU除錯程式作單部執行用,所以又叫單步中斷。病毒利用他還取得BIOS的13h進入點。 INT 3h介紹 定義: 此作用為產生一個中斷,以取得DOS的INT21h的原始進入點。 ◎ 報告心得: 由於製造病毒的人以讓解毒軟體無法破解為目標來撰寫病毒程式碼,使得現在病毒的能力越來越強悍,也越來越令人恐慌,身為資訊系學生的我們,不可不正視這個日趨嚴重的問題,更不能沒有這方面的常識。希望能夠透過此篇報告讓大家瞭解病毒得製作過程以及如何破解一些病毒程式,雖然內容不勝豐富,但願能帶給大家一絲絲的幫助。 ◎ 參考書目及網頁: http://cc.weber.edu http://www.geocities.com 電腦病毒與資訊安全 作者:黃文杰 旗標出版社