Download presentation
Presentation is loading. Please wait.
1
病毒歷史
2
病毒的起源 電腦病毒並非是最近才出現的新產物 ﹐事實上﹐早在一九四九年﹐距離第一部商用電腦的出現仍有好幾年時 ﹐電腦的先驅者約翰.范紐曼 ( John Von Neumann )在他所提出的一篇論文《複雜自動裝置的理論及組織的進行》裏,即已把病毒程式的藍圖勾勒出來﹐當時 ﹐絕大部份的電腦專家都無法想像這種會自我繁植的程式是可能的﹐可是少數幾個科學家默默地研究范紐曼的所提出的概念 。
3
直到十年之後 ﹐在美國電話電報公司 (AT&T) 的貝爾 (Bell)實驗室中 ﹐這些概念在一種很奇怪的電子遊戲中成形了﹐這種電子遊戲叫做《磁蕊大戰》 (core war)。磁蕊大戰是當時貝爾實驗室中三個年輕程式人員在工餘想出來的﹐他們是道格拉斯.麥耀萊 (H, Douglas McIlroy)﹐維特.維索斯基 (Victor Vysottsky)以及羅伯.莫里斯 (Robert T. Morris)﹐當時三人年紀都只有二十多歲。 磁蕊大戰的玩法如下︰兩方各寫一套程式﹐輸入同一部電腦中﹐這兩套程式在電腦的記憶系統內互相追殺﹐有時它們會放下一些關卡﹐有時會停下來修理(重新寫)被對方破壞的幾行指令﹐當它被困時﹐也可以把自己複製一次﹐逃離險境﹐因為它們都在電腦的記憶磁蕊中遊走﹐因此得到了磁蕊大戰之名。這個遊戲的特點﹐在於雙方的程式進入電腦之後﹐玩遊戲的人只能看著螢幕上顯示的戰況﹐而不能做任何更改﹐一直到某一方的程式被另一方的程式完全消滅為止。
4
磁蕊大戰是個籠統的名稱﹐事實上還可細分成好幾種﹐麥耀萊所寫的程式叫《達爾文》﹐這包含了「物競天擇﹐適者生存」的意思。它的遊戲規則跟以上所描述的最接近﹐雙方以組合語言各寫一套程式﹐叫有機體(organism)﹐這兩個有機體在電腦裡爭鬥不休﹐直到一方把另一方殺掉而取代之﹐便算分出勝負。在比賽時 Morris 經常匠心獨具﹐擊敗對手。 另外有個叫《爬行者》的程式(Creeper)﹐每一次把它讀出時﹐它便自己複製一個副本。此外﹐它也會從一部電腦「爬」到另一部有連線的電腦。很快地電腦中原有資料便被這些爬行者擠掉了。爬行者唯一的生存目的是繁殖。為了對付《爬行者》﹐有人便寫出了《收割者》(Reaper)。它的唯一生存目的便是找到《爬行者》﹐把它們毀滅掉。當所有《爬行者》都被收割掉之後﹐《收割者》便執行程式中最後一項指令︰毀滅自己﹐從電腦中消失。
5
侏儒》(Dwarf)並沒有《達爾文》等程式聰明﹐卻是個極端危險人物。它在記憶體中邁進﹐每到第五個位址(address) 便把那裡所儲存的東西變為零﹐這會使得原本的程式停擺。 在那個年代裡﹐電腦都沒有連線﹐而是互相獨立的﹐如果有某部電腦受到「感染」﹐失去控制﹐工作人員只需把它關掉便可。但是當電腦連線逐漸成為社會結構的一部份之後﹐一個或自我複製的病毒程式便很可能帶來無窮的禍害了。因此長久以來﹐懂得玩《磁蕊大戰》遊戲的電腦工作者都嚴守一項不成文的規定︰不對普羅大眾公開這些戰爭程式的內容。
6
但在一九八三年﹐這項規定被打破了。科恩.湯普遜(Ken Thompson)是當年一項傑出電腦獎的得獎人。在頒獎典禮上﹐他作了一個演講﹐不但公開地證實了電腦病毒的存在﹐而且還告訴所有聽眾怎樣去寫自己的病毒程式。他的同行全都嚇壞了﹐然而這個秘密已經流傳出去了。一九八四年﹐情況愈複雜了。這一年﹐《科學美國人》月刊(Scientific American)的專欄作家杜特尼(A. K. Dewdney)在五月號寫了第一篇討論《磁蕊大戰》的文章﹐並且只要寄上兩塊錢美金﹐任何讀者都可以收到他所寫的有關寫程式的綱領﹐在自己家中的電腦中開闢戰場。
7
在一九八五年三月份的《科學美國人》裡﹐杜特尼再次討論《磁蕊大戰》和「病毒」。在文章的開頭他說︰「當去年五月有關《磁蕊大戰》的文章印出來時﹐我並沒有想過我所談論的是那麼嚴重的題目。」文中並且第一次提到「病毒」這個名稱。他提到說﹐義大利的羅勃吐.歇魯帝(Roberto Cerruti)和馬高.麼魯顧帝(Marco Morocutti)發明了一種破壞軟體的方法。他們想用病毒﹐來使得蘋果二號電腦受感染。歇魯帝寫了一封信給杜特尼﹐信內說︰「馬高想寫一個像『病毒』一樣的程式﹐可以從一部蘋果電腦傳染到另一部蘋果電腦﹐使其受到感染。可是我們沒法這樣做﹐直到我想到﹐這病毒要先使磁碟受到感染﹐而電腦只是媒介。這樣﹐病毒就可以從一片磁碟傳染到另一片磁碟了。」於是病毒氾濫的年代隨著電腦時代的來臨開始發揚光大了。尤其是在蘋果電腦、IBM PC相容的個人電腦成為主流之後﹐一般人更可以不費吹灰之力就取得電腦程式寫作的工具﹐再加上好奇心的驅使﹐病毒程式的出現猶如雨後春筍。
8
病毒簡介 電腦病毒是一種對電腦作業系統的安全造成威脅或破壞的程式﹐它會變更原有系統程式或資料﹐產生損害。並且﹐病毒會在程式之間、系統之間傳播。它是由一連串的指令構成的﹐當它被執行的時候﹐就將它自己散播到其他未感染的程式或檔案之中。 典型的電腦病毒有兩項功能︰第一﹐它會自行繁衍﹐將自己拷貝到其他的檔案或程式中。第二﹐(可能是在特別的執行次數後﹐或是在特定的日期﹐)它開始執行原病毒作者所寫的其他指令﹐至於會做哪些事﹐端看作者本身的動機﹐有些是顯示某個訊息﹐有些是殺掉某些檔案﹐有些是改變電腦原先儲存的資料﹐甚至格式化硬碟。也有可能它根本沒有任何的破壞指令﹐而是吸收磁碟的空間﹐打斷網路的連接等等。 除了病毒之外﹐也有幾種類似病毒﹐但卻稱不上病毒的程式︰蠕蟲(worms)、細菌(bacteria)、兔子(rabbits)等等。與病毒相同的是﹐它們都具有自我複製的丞。而不同的是﹐worm是一種程式﹐它透過網路散播自己的複製品﹐藉著讓網路系統超過負載使其中斷。bacteria 則是當它被執行的時候﹐將自己的複製品散播給系統或是其他的使用者。rabbit主要是被設計用來消耗系統資源的﹐它並不是感染其他的程式﹐而是無限制的複製自己。
9
病毒的生命週期 電腦病毒就好像細菌的生長一般﹐所以我們才將它稱做「病毒」。病毒的成長﹐有下列幾個生命週期︰ A. 創造期(Creation)︰ 當有一些人花了好幾個星期努力地研究出一些可以廣為散佈的程式碼﹐一隻病毒就這樣誕生了。當然﹐他們是不會這樣就算了的。他們通常都會設計一些破壞的行為。 B. 孕育期(Gestation): 這些破壞者將中毒的檔案放至一個容易向外傳播的地方。如BBS或是Internet的FTP站﹐甚至是公司、學校的檔案庫等等。由於許多人會在這些地方帶回許多的檔案﹐因此病毒也就可以更快速地傳播出去。 C. 潛伏感染期(Propagation): 在潛伏期中﹐病毒會不斷地繁殖與傳染。一個完美的病毒擁有很長的潛伏期﹐如此一來病毒就更多的時間去傳染到更多的地方、更多的使用者、一旦開始發病﹐將會造成更大的傷害。例如世界知名的「米開朗基羅病毒」﹐在每年三月六日發作前﹐有整整一年的感染期。 D. 發病期(Activation): 當一切的條件形成之後﹐病毒於是就開始了破壞動作。有些病毒會在某些特定的日期發病﹐有些則是自己有個倒數計時器來決定發病的時間。
10
E. 發現期(Discovery): 雖然大部份的病毒最後都會被發現,但仍然有些病毒在發病之後﹐並沒有被發現出來。其實﹐一般人們只要注意到它﹐通常都會想辦法做好隔離的動作。在美國有一個「國家電腦安全協會」(National Computer Security Association, NCSA)不斷地收集病毒的資料﹐並且將這些文件傳送給全世界的防毒軟體研發單位。對於大多數的狀況來說﹐當一個病毒對全球電腦使用者產生重大威脅前的至少一年之內﹐就會被這些訊息領袖發現。 F. 同化期(Assimilation): 進入發現期之後﹐防毒軟體商新增了新的病毒碼使得他們的產品可以偵測到這些病毒。這個過程通常要花上半年的時間﹐視軟體研發廠商的能力和病毒的複雜度而定。 G. 根除期(Eradication): 如果有夠多的防毒軟體能夠控制這些病毒﹐並且也有夠多的使用者使用防毒軟體﹐那麼這些病毒就可以幾乎完全地連根撲滅。雖然到現在為止﹐並沒有人敢宣稱某某病毒完全絕跡了。但是有一些病毒很明顯地被完全扼止了﹐如早期的Disk Killer等。它們都曾有一段風光的日子﹐並且對多數的電腦使用者造成非常大的威脅。
11
病毒種類 A. 開機型病毒 開機型病毒的感染對象是作業系統的開機區﹐也就是所謂的BOOT磁區。它是藉由開機動作侵入記憶體的﹐如果用了已感染病毒的開機片來開機﹐則病毒將立即感染到硬碟中。開機型病毒又可分為︰ 傳統開機型病毒 經由軟碟傳染﹐進入電腦中再伺機傳染其他檔案。 隱形開機型病毒 感染硬碟開機磁區﹐偽造開機資料﹐使防毒軟體以為系統是正常的。 目錄型病毒 只感染檔案配置表 (FAT)﹐使得檔案讀寫不正常﹐甚至失去檔案。 著名的開機型病毒︰ BRAIN︰感染軟碟開機區﹐會將原來的開機磁區內容放在別的地方。 BLOODY︰感染硬碟的分割紀錄表﹐每使用硬碟開機六次﹐病毒就發作一次。開機128次則顯示六四天安門事件的訊息。 DISK KILLER︰感染軟硬碟的開機磁區﹐會修改BIOS﹐使病毒本身不會被查出﹐會修改檔案配置表﹐以及中斷向量表的INT 13H的位址。 SWAP︰感染軟碟開機磁區﹐開機後常駐在記憶體中﹐病毒載入記憶體十分鐘之後﹐畫面上所有的字會像下雨一樣﹐紛紛掉落到螢幕底部。
12
B. 檔案型病毒 檔案型病毒主要是感染. COM 檔或是. EXE 檔。近年來﹐檔案型病毒的感染目標又擴及到. OVL檔和
B. 檔案型病毒 檔案型病毒主要是感染 .COM 檔或是 .EXE 檔。近年來﹐檔案型病毒的感染目標又擴及到 .OVL檔和.BIN檔。檔案型病毒又有分︰ 傳統檔案型病毒 以破壞檔案為目的﹐通常是把病毒自己放進被傳染的檔案裡。又分為兩種︰ 迅速感染型 進入記憶體後就立即尋找檔案﹐發現沒有中毒的檔案就立刻感染。 常駐型 等待有程式被執行而進入記憶體時﹐才進行感染。 隱形檔案型病毒 把自己植入作業系統中﹐當有程式像作業系統要求中斷服務時﹐它就「順便」感染那個提出要求的程式。
13
著名的檔案型病毒︰ AIDS︰感染. COM及. EXE檔﹐中毒時會在螢幕上顯示很大的AIDS字樣。 MACGYVER︰感染
著名的檔案型病毒︰ AIDS︰感染 .COM及.EXE檔﹐中毒時會在螢幕上顯示很大的AIDS字樣。 MACGYVER︰感染 .EXE檔﹐留在硬碟分割表中﹐但不會破壞啟動區。改變 INT 21H 的內容﹐即使用DIR也看不出檔案長度的變化﹐發作時會發出音樂﹐檔案日期會增加100年。 FRIDAY THE 13TH︰感染 .COM及.EXE檔﹐此病毒為常駐型﹐必在十三號星期五發作。 BEE︰感染 .COM及.EXE檔﹐由十三號星期五病毒演變而來﹐發作時會演奏小蜜蜂的曲子。
14
C. 混合型病毒 混合型病毒具有開機型病毒和檔案型病毒的能力﹐主要是利用檔案感染時伺機感染開機區﹐因而具有雙重行動力。此外它們的傳染、繁殖速度也很驚人。著名的混合型病毒︰ GREENSLEEVES︰感染 .EXE及 .COM的檔案﹐以及軟硬碟的開機磁區。同時也是一種常駐型病毒﹐使用暖開機 (Ctrl + Alt +Del) 時﹐病毒就被引爆。 DARK AVENGER︰感染.EXE、.COM、.OVL的檔案﹐以及COMMAND.COM檔。當中毒的檔案被執行的時候﹐每個磁區有百分之六到七的機率會中毒。
15
D. 隱形飛機型病毒 隱型飛機式病毒又稱作中斷攔截者(Interrupt Interceptors)。它藉由控制DOS的中斷向量來讓DOS以及防毒軟體認為所有的檔案都是乾淨的。在正常的狀況﹐應用程式發出一個中斷要求時﹐通常都會很正常地被導引到一個正常的中斷向量表(Interrupt Table)並正確地執行。一旦病毒截取了這些中斷要求﹐它就可以誤導這些程式﹐去做一些它們想要做的事。隱型飛機式病毒由於可以躲在中斷向量表中﹐所以它可以很有效率地藏起來﹐很難被偵測到。著名的隱形飛機型病毒︰ NATAS︰感染 .EXE及 .COM的檔案﹐以及硬碟的開機磁區。會改變 INT 13H 和 INT 21H。開檔的時候感染﹐感染後並看不出檔案大小變化﹐執行過中毒的檔案後﹐檔案長度會恢復到原來的大小。
16
E. 變體病毒 變體引擎(Mutation Engine)病毒程式每繁殖一次﹐就會以不同的病毒碼傳染到別的地方去﹐每個中毒的檔案中所含的病毒碼都不一樣﹐對於掃描固定病毒碼的防毒軟體﹐便是一種重大的考驗。這類病毒目前已出現在歐洲﹐如WHALE病毒依附於.COM檔時,幾乎無法找到相同的病毒碼;而FLIP病毒則只有2 byte的Pattern可找﹐是非常詭異的病毒。著名的有︰ WHALE︰感染硬碟啟動區﹐軟碟啟動區﹐或是硬碟分割區。會以TSR型式留在記憶體裡。 POGUE︰感染.COM檔﹐發病時會使系統五月一日或每日早上八點到九點發出奇怪的聲音。
17
F. 網路系統病毒 網路是病毒最愛的傳染途徑﹐但只有少數專門針對網路弱點所設計的網路特定病毒﹐才能在NetWare下運作。這類型的網路特定病毒會主動入侵、感染並破壞網路伺服器中檔案﹐其中最有名的為Novell Netware網路系統上的網路特定病毒GP1(Get Password 1)﹐它會利用搜集來的使用者帳號及密碼﹐突破Supervisor的權限﹐更改檔案伺服器上的檔案屬性﹐並進行感染和刪除的動作﹐而且病毒之間還能交換訊息﹐所以一旦病毒在網路上活躍﹐後果將不勘設想。
18
G. 文字巨集病毒 巨集病毒是目前熱門的話題﹐它主要是利用軟體本身所提供的巨集能力來設計病毒﹐所以凡是具有寫巨集能力的軟體都有巨集病毒存在的可能﹐Word, Excel, Amipro 都相繼傳出危害﹐在台灣最有名的例子正是Taiwan No.1。 所謂「巨集」(Macro)是指眾多指令的集合﹐巨集通常可以允許使用者自行設計以便能夠一次執行連串的指令或動作。它的概念就很類似在DOS環境下的批次檔。通常巨集都是伴隨著主程式啟動時一起被載入記憶體中﹐以Microsoft Word為例﹐當我們啟動Word之後﹐Word內定會替我們載入一個Normal.DOT的範本檔以設定如字型﹐行距等等相關資訊。這也正是巨集病毒最愛下手的目標。只要一份文件中夾帶了具有自我複製能力或破壞的行為﹐例如開啟舊檔﹐開新檔案﹐另存新檔等動作同時﹐甚至連Word只要一啟動﹐都會執行到這些巨集。而這些不懷好意的巨集就是所謂的「文件巨集病毒」。 有些程式寫作的專家不認為文件病毒是真正的病毒﹐因為它並非獨立可執行的程式﹐而是一些重量級文書或試算表軟體的「一連串執行步驟」而已。或許只能算是搗蛋的動作﹐但仍能夠造成損壞。著名的巨集病毒︰ DMV Macro︰教人如何寫巨集病毒的Demo病毒。 AAAZAO Macro︰世界第一隻正式發表的巨集病毒。 13號 TAIWAN NO.1︰世界第一隻中文WORD巨集病毒﹐每月13號發作。 RainBow Macro︰世界第一隻會改變視窗桌面顏色的巨集病毒。 G. 反防毒病毒 反防毒病毒專門攻擊特定的防毒軟體。這種病毒幾乎非常地少﹐但是對於一些防毒軟體來說﹐由於它的存在﹐使得整台原來有做防毒措施的電腦頓時失去了保護﹐因此破壞力也不可忽視。
19
深入探討病毒如何感染 A. 開啟電源時 當電源開啟﹐有一段程式位於ROM﹐叫做 POST (Power On Self Test)會開始執行。它會檢查記憶體﹐各種裝置﹐週邊。完成之後﹐它會搜尋軟碟機中是否有磁片﹐如果沒有﹐就嘗試用硬碟來啟動。如果都無法運作﹐它就執行在ROM裡的BASIC中斷。首先讀進RAM的是硬碟或軟碟中的開機程序。因為ROM是只供讀取的﹐所以到目前為止我們都還沒有讓病毒有機可趁。 B. 由硬碟開機 由硬碟啟動的時候﹐必須憑藉兩個地方所存放的程式碼﹐一是主要啟動資料區(master boot record) (!)﹐二是系統啟動資料區(system boot record) (!)。主要啟動資料區記錄有一些程式和資料﹐由這些程式以及資料會指定要執行哪一個系統啟動資料區。通常主要啟動資料區只有一個﹐而系統啟動資料區可能會有很多個﹐每一個供一個分割區使用。 硬碟的啟動區雖然依各硬碟有所差異﹐但通常會保留一整個磁軌以上的空間給它﹐而這些空間大部分都不會被使用到﹐於是給了病毒一個很好的棲身之所。
20
C. 由軟碟開機 硬碟的啟動磁區固定在第0面﹐第0磁軌﹐第1個磁區。它所記錄的程式碼很短﹐其中它做的第一件事就是告訴機器到哪個磁區去找其他的啟動資料。病毒則可以躲在某些磁區中﹐並且把那些磁區標示成損壞的磁區(!)。這樣就可以保障它的程式碼不會被蓋掉。 D. PC-DOS作業系統 啟動資料區的主要工作就是載入作業系統。它必須讀取 IO.SYS﹐MSDOS.SYS﹐以及 COMMAND.COM。因為這些檔案有作業系統所需的資料。作業系統完成之後﹐我們就可以開始讀寫檔案(!)﹐使用記憶體(!)﹐或是使用其他的系統資源(!)。於是病毒就有可能改寫COMMAND.COM或是打斷使用者對系統資源的要求。它把自己放在一個常用的程式裡﹐所以增加了感染的機會﹐另外也可以中斷使用者對系統資源的索取﹐甚或改變原先使用者要做的事。
21
E. 執行程式 當使用者執行程式的時候﹐有哪些程式碼(
E. 執行程式 當使用者執行程式的時候﹐有哪些程式碼(!)被用到了呢?以下舉幾個常用的例子︰ DOS收到鍵盤的敲擊訊息時 BIOS INT 9H, INT 16H, INT 15H, INT 1BH BOS INT 21H的鍵盤功能﹐以及INT 28H 鍵盤的驅動程式或 TSR程式 DOS載入程式時 BIOS INT 13H, INT 40H, INT 15H DOS INT 21H的檔案搜尋功能﹐記憶體配置﹐設定DTA等等 任何的 TSR程式 一般的功能 BIOS INT 8(timer), INT 0FH(printer), INT 1CH(timer) 任何的系統驅動程式或 TSR程式 每當使用者要執行一個程式時﹐都會用到這些程式碼或其他有可能感染的程式碼。
22
F. CONFIG 和 AUTOEXEC 每當啟動系統的時候﹐CONFIG. SYS(. ) 和 AUTOEXEC. BAT(
F. CONFIG 和 AUTOEXEC 每當啟動系統的時候﹐CONFIG.SYS(!) 和 AUTOEXEC.BAT(!)會告訴系統先去讀取某些檔案。如果病毒要侵入其中一個檔﹐附加到其中一個檔裡﹐那麼它將會每天被執行。這也是病毒活躍的好機會。 G. 編譯程式碼﹐使用函式庫 要編譯程式碼的時候﹐我們會用到很多程式﹐其中一個是編譯器的本身(!)。如果編譯器程式感染了病毒﹐很有可能會散播到其他的檔﹐包括它所編譯出的程式。當一個程式被編譯時﹐必須經過 link﹐很有可能會 link 一個函式庫(!)裡的程式﹐如果該程式以感染了﹐則我們編譯出來的程式也就會被病毒感染了。
23
H. 使用巨集文件 處理文件的軟體功能日漸強大﹐但是也因為使用了巨集文件(
H. 使用巨集文件 處理文件的軟體功能日漸強大﹐但是也因為使用了巨集文件(!)而增添了巨集病毒的問題。一般巨集病毒(Macro Virus)常見行為模式有兩種︰ 改變文件格式 一般文件格式並不會含有任何一個巨集指令﹐所以巨集病毒進行感染的首要動作﹐就是將一般的文件格式(doc)改為樣版格式(dot)。縱使如此﹐聰明的巨集病毒為了不讓使用者輕易的發現檔案已經中毒﹐因此﹐它並不會將原本的副檔名(.doc)改掉。所以中毒檔案仍被以為是.doc的副檔名。 執行Macrocopy指令 當文件格式被改變後﹐巨集病毒就開始進行感染。巨集病毒感染的動作是透過執行Macrocopy的指令來完成。Macrocopy會將病毒巨集複製一份到被開啟的檔案或新建立的檔案中﹐以便下一次這些寄主檔案被開啟時﹐可再度散播巨集病毒的種子。 在巨集病毒整個感染過程中﹐normal.dot 扮演了非常重要的角色。當使用者開啟一份中毒的文件時﹐巨集病毒就會藉機感染 normal.dot。之後﹐每當使用者開啟Word編輯新文件時﹐巨集病毒便會將normal.dot上的病毒巨集複製到新文件中。可想而知的是﹐這個新文件在存檔時﹐已經是一個不折不扣的樣版文件﹐該文件的附檔名就是.dot﹐除非使用者在存檔時﹐自行加入附名.doc﹐要不然是沒有例外情形的。
24
病毒程式的寫作 了解了病毒如何感染之後﹐我們再來看看一個病毒程式究竟是怎麼完成的。在這之前﹐首先強調﹐本文以檔案型病毒的寫作為例。既然是檔案型病毒﹐它要感染的主要是.COM和.EXE檔﹐所以首先必須了解這兩種檔案的程式前置區(PSP)﹐記載了哪些有關檔案的資訊。 COM檔的PSP(僅供參考)︰ 0000H dw OCD20H INT 20H 0002H dw ? 可用記憶體最大節位址 0004H db ? 0005H db 5 dup(?) 用於完成DOS INT 21H的功能呼叫﹐此時CL = AH (OOH - 23H) 000AH dd ? 原 INT 22H 中斷的進入位址 000EH dd ? 原 INT 23H 中斷的進入位址 0012H dd ? 原 INT 24H 中斷的進入位址 0016H dw ? 父程式 PSP 位址 0018H db 20 dup(?) 檔案頭銜表 (FHF)﹐決定該行程可以同時開20個檔案 002CH dw ? 環境變數區的節位址 002EH dd ? 堆疊指標紀錄區 0032H dw ? 檔案頭銜表的大小﹐預設值為 H dd ? 檔案頭銜表的起始位址﹐預設為DS︰0018H
25
0038H dd ? 003CH db ? 003DH dw ? 003FH db ? 0040H dw ? 所對應的DOS版本 0042H dw 14 dup(?) 0050H db 3 dup(?) INT 21H retf 0053H dw ? 0055H db 7 dup(?) FCB控制塊的擴充部分 005CH db 16 dup(?) 第一個FCB的控制塊 006CH db 16 dup(?) 第二個FCB的控制塊 007CH dd ? 0080H db 80h dup(?) 磁碟資料傳送區(DTA)
26
EXE檔的PSP(僅供參考)︰ 0000H dw. 'MZ'表示是EXE檔﹐如果沒有DOS就認為是COM檔 0002H dw
EXE檔的PSP(僅供參考)︰ 0000H dw ? 'MZ'表示是EXE檔﹐如果沒有DOS就認為是COM檔 0002H dw ? EXE檔案長度除以512的餘數 0004H dw ? EXE檔案長度除以512的商數 0006H dw ? 重定位表的數目\cell 0008H dw ? 檔頭的para數 000AH dw ? 程式所需最少記憶體 000CH dw ? 程式所需最多記憶體 000EH dw ? 初始化SS值﹐(相對於起始節位址) 0010H dw ? SP 0012H dw ? Checksum 0014H dw ? IP 0016H dw ? 初始化CS值﹐(相對於起始節位址) 0018H dw ? 重定位表起始值﹐(相對於檔頭)
27
當COM檔被載入的時候﹐DS、ES都會指向PSP﹐而 PSP的大小是100H bytes﹐所以 IP會指向 0100H。當病毒要附加到檔案裡﹐會把它自己加在檔尾﹐並且在檔案開始的地方放一道指令 JMP xxxxH指向病毒﹐而病毒尾端再JMP回原本的程式去執行就可以了。如圖所示︰ 如此一來﹐中毒的檔案就會先去執行病毒﹐再把檔案開頭的JMP vir_ 改回原來的程式碼﹐接著就跳回原程式去執行了。也有的病毒是把病毒本體放在檔案的一開頭﹐同樣也是先執行病毒再執行原來的程式。 COM檔的缺點是檔案長度不能超過64K﹐而程式執行的進入點固定在CS︰0100H的位置﹐而EXE檔就沒有這些限制﹐程式碼、資料與堆疊可以利用不同的記憶體節區。病毒感染EXE檔的方法就是﹐將病毒加在檔尾﹐然後將檔頭的CS︰IP與SS︰SP指向病毒的程式開頭與堆疊。執行完病毒﹐再將CS︰IP與SS︰SP恢復﹐最後再執行原程式。
Similar presentations