發信人: Bugger.bbs@bbs.ee.nthu.edu.tw. ( 期待突破她心防的一刻 ), 信區: zvirus 標 題: TarMax 有關開機型病毒解法 發信站: ☆清華電機☆ (Wed Aug 24 06:20:05 1994) 轉信站: star (local) ******************************************************************************* * * * 【引言】 * * 本篇文章所含內容,皆是以國立中央大學電機工程系二年級傅冠彰(TarMax) * * 所撰寫並公佈的開機型病毒解法中所轉載的。請體諒他人用心並尊重智慧財產權。 * * BM Bugger (鍾元凱) * * 【索引】 * * 01. TarMax 開機型病毒解法:觀念篇 * * 02. TarMax 開機型病毒解法:實作篇 * * * ******************************************************************************* =============================================================================== * 01. TarMax 開機型病毒解法:觀念篇 * 開機型病毒解毒辦法 前提: 有不少病毒是開機型(或混合型)的, 但無論如何, 它們總要修改一下磁碟的 第零磁區才能生存。本文所提重點無它,就是要把第零磁區的〞內容〞給改 回來,同時提供一些常用的防毒、解毒技巧。唯一要注意的是:任何防毒程 式都會被破解!所以一個好的使用習慣比好的毒程式更加重要! 本文不是什麼教材,只是一種經驗之談。所以文中可能會提到很多新手不知 道,偏偏老手又不愛說的東西。只能說病毒這玩意沒有相當的功力是玩不起 來的。最近Novell公司即將推出Mulity-tasking DOS,希望這是一個好的開 始,protect mode下的OS擁有絕對的SystemResource控制權。希望檔案型的 病毒能大幅減少!(不要冀望它們會消失...連UNIX都會被破解...) 本文中大量提到debug和一些DOS下的工具,但是絕少提到trace和Assembly ,對新手而言可建立觀念,對老手而言不免失之淺薄,還希望大家多多指教 !!   I.開機型病毒 一般開機型病毒運作原理: 1. 進入電腦中,把可用的傳統記憶體-1k∼3k 2. 檢查軟、硬碟是否可以傳染 (可) 修改軟碟的第零磁區 >>> 2.5 I/O大轉向....攔int13h,並且在你要求讀取BOOTSECTOR 或0sector的時候,把原本正常的磁區傳給你。有些病毒 不”支援〞這項功能。 3. 利用DISK I/O之機會進行傳染 4. 隨作者高興....... 簡而言之,反正它就是在你一開機就要占領系統的控制權。所以唯一的選擇 只有占領磁碟上的0sector。由於IBM PC BIOS的設計,這一個磁區的內容在 機器一開機後就會被載入記憶體的0:7C00執行。所以一般開機型病毒 都會對處進行〞翻修〞。最簡單的方法:把原開機程式搬走,換上病毒。好 一點的手法:修改開機程式的一小部分,利用那一小部分把病毒載入記憶體 。最機車的做法:病毒內附開機功能,你的開機程式就bye!bye!了...... 開機程式一般都很短,只有100 BYTE左右。所以如用debug等程式看0sector 大多是前面一段小小的程式,後面都是0,然後是paritition table的內容 。如果你那天看到0sector堛熊{式碼一大串,超過128 byte,一定是開機 程式被換了(不一定是被病毒換的喔!),如果你確定你沒有用過任何的程 式替換過它,那明顯的是有問題啦! 現在給各位看一下典型的BOOT-SECTOR: 100 EB 3C 90 4D 53 44 4F 53-35 2E 30 00 02 04 01 00 .<.MSDOS5.0..... 110 02 00 02 78 98 F8 27 00-22 00 0E 00 4C 09 00 00 ...x..'."...L... 120 00 00 00 00 80 01 29 F9-0F 26 1D 44 4F 53 20 20 ......)..&.DOS 130 20 20 20 20 20 20 46 41-54 31 36 20 20 20 FA 33 FAT16 .3 140 C0 8E D0 BC 00 7C 16 07-BB 78 00 36 C5 37 1E 56 .....|...x.6.7.V 150 16 53 BF 3E 7C B9 0B 00-FC F3 A4 06 1F C6 45 FE .S.>|.........E. 160 0F 8B 0E 18 7C 88 4D F9-89 47 02 C7 07 3E 7C FB ....|.M..G...>|. 170 CD 13 72 79 33 C0 39 06-13 7C 74 08 8B 0E 13 7C ..ry3.9..|t....| 180 89 0E 20 7C A0 10 7C F7-26 16 7C 03 06 1C 7C 13 .. |..|.&.|...|. 190 16 1E 7C 03 06 0E 7C 83-D2 00 A3 50 7C 89 16 52 ..|...|....P|..R 1A0 7C A3 49 7C 89 16 4B 7C-B8 20 00 F7 26 11 7C 8B |.I|..K|. ..&.|. 1B0 1E 0B 7C 03 C3 48 F7 F3-01 06 49 7C 83 16 4B 7C ..|..H....I|..K| 1C0 00 BB 00 05 8B 16 52 7C-A1 50 7C E8 92 00 72 1D ......R|.P|...r. 1D0 B0 01 E8 AC 00 72 16 8B-FB B9 0B 00 BE E6 7D F3 .....r........}. 1E0 A6 75 0A 8D 7F 20 B9 0B-00 F3 A6 74 18 BE 9E 7D .u... .....t...} 1F0 E8 5F 00 33 C0 CD 16 5E-1F 8F 04 8F 44 02 CD 19 ._.3...^....D... 200 58 58 58 EB E8 8B 47 1A-48 48 8A 1E 0D 7C 32 FF XXX...G.HH...|2. 210 F7 E3 03 06 49 7C 13 16-4B 7C BB 00 07 B9 03 00 ....I|..K|...... 220 50 52 51 E8 3A 00 72 D8-B0 01 E8 54 00 59 5A 58 PRQ.:.r....T.YZX 230 72 BB 05 01 00 83 D2 00-03 1E 0B 7C E2 E2 8A 2E r..........|.... 240 15 7C 8A 16 24 7C 8B 1E-49 7C A1 4B 7C EA 00 00 .|..$|..I|.K|... 250 70 00 AC 0A C0 74 29 B4-0E BB 07 00 CD 10 EB F2 p....t)......... 260 3B 16 18 7C 73 19 F7 36-18 7C FE C2 88 16 4F 7C ;..|s..6.|....O| 270 33 D2 F7 36 1A 7C 88 16-25 7C A3 4D 7C F8 C3 F9 3..6.|..%|.M|... 280 C3 B4 02 8B 16 4D 7C B1-06 D2 E6 0A 36 4F 7C 8B .....M|.....6O|. 290 CA 86 E9 8A 16 24 7C 8A-36 25 7C CD 13 C3 0D 0A .....$|.6%|..... 2A0 4E 6F 6E 2D 53 79 73 74-65 6D 20 64 69 73 6B 20 Non-System disk 2B0 6F 72 20 64 69 73 6B 20-65 72 72 6F 72 0D 0A 52 or disk error..R 2C0 65 70 6C 61 63 65 20 61-6E 64 20 70 72 65 73 73 eplace and press 2D0 20 61 6E 79 20 6B 65 79-20 77 68 65 6E 20 72 65 any key when re 2E0 61 64 79 0D 0A 00 49 4F-20 20 20 20 20 20 53 59 ady...IO SY 2F0 53 4D 53 44 4F 53 20 20-20 53 59 53 00 00 55 AA SMSDOS SYS..U. 各位可以發現,在這麼短的sector中,不但放得下開機程式,連Message 都放得下!要是病毒硬把它蓋了,因為病毒要做的事很多,通常message 會只剩一行: Non-system disk or disk error.(在軟碟上尤其明顯) 再看看典型的HD 0sector(電腦一開機便會執行的磁區): 00 FA 33 C0 8E D0 BC 00 7C-8B F4 50 07 50 1F FB FC .3.....|..P.P... 10 BF 00 06 B9 00 01 F2 A5-EA 1D 06 00 00 BE BE 07 ................ 20 B3 04 80 3C 80 74 0E 80-3C 00 75 1C 83 C6 10 FE ...<.t..<.u..... 30 CB 75 EF CD 18 8B 14 8B-4C 02 8B EE 83 C6 10 FE .u......L....... 40 CB 74 1A 80 3C 00 74 F4-BE 8B 06 AC 3C 00 74 0B .t..<.t.....<.t. 50 56 BB 07 00 B4 0E CD 10-5E EB F0 EB FE BF 05 00 V.......^....... 60 BB 00 7C B8 01 02 57 CD-13 5F 73 0C 33 C0 CD 13 ..|...W.._s.3... 70 4F 75 ED BE A3 06 EB D3-BE C2 06 BF FE 7D 81 3D Ou...........}.= 80 55 AA 75 C7 8B F5 EA 00-7C 00 00 49 6E 76 61 6C U.u.....|..Inval 90 69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62 id partition tab A0 6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67 le.Error loading B0 20 6F 70 65 72 61 74 69-6E 67 20 73 79 73 74 65 operating syste C0 6D 00 4D 69 73 73 69 6E-67 20 6F 70 65 72 61 74 m.Missing operat D0 69 6E 67 20 73 79 73 74-65 6D 00 00 74 51 88 17 ing system..tQ.. E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ C0 01 05 04 0D 22 56 4C 09-00 00 78 98 00 00 00 00 ...."VL...x..... D0 01 57 05 0D E2 EB C4 A1-00 00 0C A9 06 00 80 01 .W.............. E0 01 00 0A 0D 22 04 22 00-00 00 2A 09 00 00 00 00 ...."."...*..... F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. 再看看古早以前的stone片段..... 0000 E9 AC 00 F5 00 80 9F 02-07 00 93 A2 00 F0 1E 50 擛.?? ..?P 0010 0A D2 75 1B 33 C0 8E D8-F6 06 3F 04 01 75 10 58 烔 3?徥 ? u X 0020 1F 9C 2E FF 1E 0A 00 9C-E8 0B 00 9D CA 02 00 58 ?. . . .X 0030 1F 2E FF 2E 0A 00 50 53-51 52 1E 06 56 57 0E 1F ... .PSQR VW 0040 0E 07 BE 04 00 B8 01 02-BB 00 02 B9 01 00 33 D2 ?.? ? ?.3? 0050 9C FF 1E 0A 00 73 0C 33-C0 9C FF 1E 0A 00 4E 75 ? .s 3?. .Nu 0060 E4 EB 43 33 F6 FC AD 3B-07 75 06 AD 3B 47 02 74 儇C3籙? u ?G t 0070 35 B8 01 03 B6 01 B1 03-80 7F 15 FD 74 02 B1 0E 5? ?? t ? 0080 89 0E 08 00 9C FF 1E 0A-00 72 1B BE BE 03 BF BE ? .? .r 噢 蕪 0090 01 B9 21 00 FC F3 A5 B8-01 03 33 DB B9 01 00 33 ?.韞 3蛫 .3 00A0 D2 9C FF 1E 0A 00 5F 5E-07 1F 5A 59 5B 58 C3 33 ?. ._^ ZY[X? 00B0 C0 8E D8 FA 8E D0 B8 00-7C 8B E0 FB 1E 50 A1 4C ?惌?|?P‥ 00C0 00 A3 0A 7C A1 4E 00 A3-0C 7C A1 13 04 48 48 A3 .?|、.?|? HH? 00D0 13 04 B1 06 D3 E0 8E C0-A3 05 7C B8 0E 00 A3 4C ?豻?|?.Ι 00E0 00 8C 06 4E 00 B9 BE 01-BE 00 7C 33 FF FC F3 A4 .?N.嗾 ?|3.? 00F0 2E FF 2E 03 7C 33 C0 8E-C0 CD 13 0E 1F B8 01 02 ... |3?櫛 ? 很明顯的,病毒只要一占住0sector我們就可以馬上發現... 以上情況一定要用確定無毒的磁片開機才可以知道...否則病 毒作者都不用混了... 當然,各下毒高手絕對不會只用二、三招就走遍天下..... 上面的判斷法是很容易沒錯,可是要是病毒不是”整隻〞攻占 Boot Sector呢??或是一個很詭異的問題:既然要用〞無毒〞 的磁片開機才能發現病毒,那誰又能確定他的磁片無毒? 對付這種麻煩問題我一向是用”引蛇出洞〞的方法.... 我們可以知道:病毒一定要傳染的。既然如此,我們就做一片 〞誘餌〞,例如把軟碟的BOOTSECTOR一大部分全填 0,再把軟碟放入測試機器中,就可以很容易看出有沒有被更 改的跡象.....這方法是吃定了軟碟的空間小,病毒不易玩”I/O 大轉向〞的遊戲(即如同病毒在硬碟上一般,可以把真正的第零 磁區搬到硬碟上其它地方,以〞供您使用〞)。那要是有這麼一隻 毒會在FD上玩這套呢? 正如前述,軟碟上的空間實在太小,硬要 玩這套,一定會有許多漏洞:如軟碟上出現新的BAD SECTOR、開機 磁區在軟碟上其它地方出現....等,只要你夠小心,一定能找到! 您也可以在受測機器上用PCTOOLS修改軟碟的BOOTSECTOR,如果發 現了BOOTSECTOR有"被大幅修改後還可自行回復的情形",您也不用 高興,很有可能是病毒....... 當然,我一直想不通:為什麼單純的開型病毒也能到處傳染??? 只要使用者的原版DOS沒有病毒,應該不可能會受到傳染才是。 (原版DOS有病毒的情況甚少,而且可以要求賠償)...... 有些人很喜歡拿著一片軟碟放入A槽,關機時不拿出來。偏偏BIOS 又不設定成只由HD開機,這種人中了毒也是活該!!有的人更X ,拿著自己有毒的軟碟去別人有硬碟的電腦上開機....這種人乾脆 列入十大槍擊要犯算了..... 當然啦!如果是比較難應付的複合型病毒,就得要靠自己隨時小心 了... II.639k之謎 我可不是在玩RPG.....這639K之謎的確困擾過不少人...... 前面一大段"如何辨識開機磁區上的程式是否為病毒",就是要和這 個步驟相配合的.... 各位網在一般情況下一定會多少注意MEMORY的大小問題,事實上 有不少朋友也一定是由memory是否滿足640k來確定有記憶體中是否 存在病毒。但是最近的BIOS很XX,往往動不動就會在記憶體末端 占個1∼3K, 所以也要稍加區分。 就我的立埸而言,我認為還是拿個debug進記憶體中亂殺一陣比 較實在。記憶體的637K位置正好是9f40:0000(639k是9fc0)。我們 不妨利用debug看看媕Y到底有什麼東東。 -d 9f40:0 9F40:0000 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0010 9A 14 04 00 EC 00 D8 0F-00 00 88 9F 00 F0 E0 01 ................ 9F40:0020 00 00 00 56 00 00 00 00-00 00 81 09 55 57 04 00 ...V........UW.. 9F40:0030 00 00 15 00 40 9F 03 08-00 00 00 32 00 EC 00 00 ....@......2.... 9F40:0040 5E 9F 00 00 00 00 00 00-02 FF 00 FF FF FF FF FF ^............... 9F40:0050 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF ................ 9F40:0060 FF 40 9F 00 00 00 00 00-00 00 00 00 00 00 00 00 .@.............. 9F40:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ -d 9F40:0080 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0090 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:00F0 00 00 00 00 00 00 00 00-00 00 00 00 7C 76 03 00 ............|v.. -d 9F40:0100 03 01 00 06 00 3C 00 F7-03 29 3B 0A 00 94 02 0B .....<...);..... 9F40:0110 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0120 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0130 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0140 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0150 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0160 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:0170 00 00 00 00 00 F7 03 0B-00 00 00 00 00 00 00 00 ................ -d 9F40:0180 00 00 00 3C 00 00 00 00-00 00 00 00 00 00 00 97 ...<............ 9F40:0190 F5 09 00 97 01 40 9F FF-44 20 30 36 20 20 20 51 .....@..D 06 Q 9F40:01A0 55 41 4E 54 55 4D 20 4C-50 53 33 34 30 53 20 20 UANTUM LPS340S 9F40:01B0 20 20 20 20 20 20 20 00-7C 76 03 00 00 00 00 56 .|v.....V 9F40:01C0 00 60 05 00 04 01 00 00-5E 9F 20 02 40 9F 00 00 .`......^. .@... 9F40:01D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 9F40:01E0 00 00 01 07 09 00 00 00-E0 F5 09 00 00 C0 0E 00 ................ 9F40:01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 EC ................ -d 以上是我的記憶體列表...嗯,有人開始替我緊張了嗎?? 什麼, 替我高興?? 想中我的新作品嗎?? .....開個玩笑....這是我的SCSI BIOS所加的,各位可以看到我的第一台SCSI HD是QUANTUM LPS340S.. 如果是病毒所占又會如何呢?? 我不好做實例,不過想想病毒原理所 提,應該可以推得:你應該會在處見到病毒本體。看起來的感覺會像 在看你的開機磁區一樣(記得前面的STONE II嗎??)有的病毒為了做IO 轉向還會把真正的開機磁區也接在後面放,那又更明顯了。 那是不是只要中了開機型的病毒就會只剩639K呢?? 我不敢說,不過 至少在以前版本的DOS上病毒可以做到不會少那麼1K,我太久沒試 了......現在的DOS上就不得而知了...各位可以問問其他高手吧!! 在觀察MEMORY 的使用情形上,我全力推薦QEMM的MFT。 III.哇!我中了.... 要是您某一天忽然發現您〞中〞了.....您該怎麼辦?? 對我而言,要殺開機型病毒只有唯一方法: 1. 要有確定無毒的開機軟碟。 2. 有NDD....等可以寫回開機磁區的程式或解毒軟體。 3. DEBUG 新手預備接招,組合語言終於出現啦! 首先更正一個觀念:中了開機型病毒可以不用無毒軟碟重開機就進行 殺毒? 凡是有經驗的人都知道,攔截in13h有二種模式: (I) (II) int13_entry: int13_entry: pushf my_int13_isr: call far:old_int13h : my_int13_isr: : : jmp far:old_int13h : 第二種模式會先進行病毒的動作再進行你的動作。而第一種模式則會 先進行你的動作再進行病毒的動作。於是在(I)中,你的程式先把病毒 殺了,沒錯,病毒緊接在後又把自己填回去了...白忙一場。 所以無論如何一定要用無毒的軟碟重開機才可以。 接下來,要是您中的是新的病毒,而解毒軟體找不出來時怎麼辦? 您可以在重開機後使用DISKEDIT之類可以讀寫硬碟第零磁區的程式 把它讀出來,送給他人..(哇!好狠)..做解藥...再把第零磁區 用隨便什麼資料蓋掉再立刻用NDD修復即可。如果你平時有備分第零 磁區等重要磁區的話,這時把它直接填回又更快了。 VI.發作 我前一陣子發現,有一類病毒發作時會format磁碟的第零磁軌。 如果你的HD被format了,NDD和一些解毒軟體是救不回來的。這時唯有 用手動的方式把第零磁軌format回原格式才可以進行搶救。 int 13h使用法概要: ah=02--read ah=03----write ah=05---format al=磁區數量 bx=資料位置offset cl=sector ch=cyclender dl=DiskDrv (0=floppy1,1=floppy2,80=HD0...) dh=head 如,我的HD要把第零磁軌format回來(設一軌有十七個磁區): -a 100 cs:100 mov ax,0511 cs:103 mov bx,200 cs:106 mov cx,1 cs:109 mov dx,80 cs:10C int 13 cs:10E int 3 寫完這一段程式後,再在DS:BX所指的位置上填好一分表格 -E 200 參數表的內容是C,H,R,N, c:磁柱編號,h:磁頭編號,r:磁區編號 n:每個磁區的byte數(0=128,1=256,3=512...通常是3) 所以在ds:200的地方要填入: 00 00 01 03 00 00 02 03 00 00 03 03 00 00 04 03........ ----------- ----------- ----------- ----------- 一直到 00 00 11 03 00 00 00 00 ----------- ----------- 寫完後執行,你的電腦就不會無法讀寫HD了。 這時立刻用NDD修復開機磁區。 ps.以上動作十分危險,無經驗者少做為妙!! ps2.誰能助我工數、微積分全pass者,重賞無數!!!                     TarMax                  frankfu@mbox.ee.ncu.edu.tw =============================================================================== * 02. TarMax 開機型病毒解法:實作篇 * 開機型病毒解毒法(實作篇) 前言:    先感謝各位看倌在看完上一篇文章後還沒把小弟五馬分屍...... 本篇主要就是把上一篇文章中有關”解毒法〞的部分做一個完整 的交待。同時比較各解毒法的優劣。順便透露給各位幾招妙招, 還請各位父老兄弟姐妹們多加教!!文中各段內容皆以上一篇文 章為基礎,各位接招啦!! 一.預防勝於治療 老生常談,可是很有用....各位怕中開機型或複合型病毒的人在 平時一定拜託準備好下列救命工具:     1.DOS開機片一片(附debug、fdisk等工具程式)     2.在軟碟上的NDD、DISKEDIT(或等效       的程式)。 以上二樣就足夠應付很多病毒了。但是仍不夠完善!所以再加幾 項:    1.把BIOS中的開機順序設為C,A 2.把硬碟的開機磁區存到軟碟上。可以用DISKEDIT之類 的程式做到。也可以用debug來做。如:讀出第一台HD 的0sector: C:\DOS>debug -a 100 15AE:0100 mov ax,0201 15AE:0103 mov bx,200 15AE:0106 mov cx,1 15AE:0109 mov dx,80 15AE:010C int 13 15AE:010E int 3 15AE:010F -g AX=0001 BX=0200 CX=0001 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000 DS=15AE ES=15AE SS=15AE CS=15AE IP=010E NV UP EI PL NZ NA PO NC 15AE:010E CC INT 3 -rcx CX 0001 :300 -rbx BX 0200 :0 -n a:part.sav -w 以上步驟會在A碟中產生一個叫part.sav的檔,長768 Bytes。它的後 512bytes就是你的0sector。如果要把它寫回0sector就再用: debug part.sav,讀入後把mov ax,0201改為mov ax,0301再執行即可。 對debug不熟的人儘量使用DISKEDIT操做。 二.解毒法    1.不變的step1:用無毒的軟碟開機    2.把病毒去掉:      有以下數種理: 1.放棄原來的開機磁區,填入新的。  做法:     1.使用解毒程式 2.把中毒後的0sector用亂七八糟的東東蓋掉再用NDD填回。 如把第一磁區的內容寫入第零磁區再用NDD去check HD, 結果會發出要求修復Partition table的訊息,接下來就 看著辦啦! 3.FDISK /MBR 以上做法有一個大缺陷:如果你的HD不是用標準的分割法,那 麼病毒殺掉的同時,你的HD也可能出問題。最典型情況就是如 果您用了OS/2、Win NT、Linux的MulityBoot之後開機程式已經 不是標準的..... 2.反其道而行: 做法:   病毒既然可以把真正的第零磁區搬走,我們當然可以把它搬 回來!用DISKEDIT找到原來的第零磁區,再把它寫回原位即 可(通常會在第一軌的第7或17磁區,也有可能不在第一軌 ,找不到也沒關係,反正還有別的方法.....:)) 以上做法的缺點就是你有可能會找不到原開機磁區!因為有的病 毒內含開機的功能。而有一種情況最妙了:如果你中了一隻病毒 ,它把你的原0sector搬到第7 sector,沒想到又中了一隻不同 的病毒,它又把你的0sector(此時為病毒1)搬到了第7sector ....那你的真正0sector就此byebye了...這時你便無法再從HD開 機,而且也找不到原0sector在那裡....。 3.把您已經備分好的0sector放回來: 做法:   前面大略說過。可以用debug做,也可用DISKEDIT做。 這個方法一向為各病毒作者大力推薦。因為它最符合反病毒原理 。我們在前一篇文中已然說過:開機病毒首要之務乃是要修改( 占領)第零磁區。其它的部分都可以任由病毒作者耍花招。我們 用中毒前的原0 sector放回來自然是最穩當的囉! PS.關於BOOT SECTOR...... 病毒在軟碟中就是會占住BOOT SECTOR!而在HD中占住BOOT SECTOR 的我還未見過,不過理論上是可以做的。遇到這種情況,我們可用 DISKEDIT把BOOT SECTOR用亂七八糟的東東把BOOT SECTOR蓋掉,再 "馬上"用NDD寫回(一定要立刻做,否則要是重開機後MediaType無 法辨認,NDD也救不回BOOT SECTOR...)! 硬碟的0 sector解說: 00 FA 33 C0 8E D0 BC 00 7C-8B F4 50 07 50 1F FB FC .3.....|..P.P... 10 BF 00 06 B9 00 01 F2 A5-EA 1D 06 00 00 BE BE 07 ................ 20 B3 04 80 3C 80 74 0E 80-3C 00 75 1C 83 C6 10 FE ...<.t..<.u..... 30 CB 75 EF CD 18 8B 14 8B-4C 02 8B EE 83 C6 10 FE .u......L....... 40 CB 74 1A 80 3C 00 74 F4-BE 8B 06 AC 3C 00 74 0B .t..<.t.....<.t. 50 56 BB 07 00 B4 0E CD 10-5E EB F0 EB FE BF 05 00 V.......^....... 60 BB 00 7C B8 01 02 57 CD-13 5F 73 0C 33 C0 CD 13 ..|...W.._s.3... 70 4F 75 ED BE A3 06 EB D3-BE C2 06 BF FE 7D 81 3D Ou...........}.= 80 55 AA 75 C7 8B F5 EA 00-7C 00 00 49 6E 76 61 6C U.u.....|..Inval 90 69 64 20 70 61 72 74 69-74 69 6F 6E 20 74 61 62 id partition tab A0 6C 65 00 45 72 72 6F 72-20 6C 6F 61 64 69 6E 67 le.Error loading B0 20 6F 70 65 72 61 74 69-6E 67 20 73 79 73 74 65 operating syste C0 6D 00 4D 69 73 73 69 6E-67 20 6F 70 65 72 61 74 m.Missing operat D0 69 6E 67 20 73 79 73 74-65 6D 00 00 74 51 88 17 ing system..tQ.. 以上的部分就是開機程式。BOOT Strap的第一步!相當簡短。 E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 10 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 20 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 30 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 50 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 60 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 70 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 80 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................ 以上未使用。(要是有使用,表示你的開機程式和別人的不一樣,或是 .....中毒了!!!) C0 01 05 04 0D 22 56 4C 09-00 00 78 98 00 00 00 00 ...."VL...x..... D0 01 57 05 0D E2 EB C4 A1-00 00 0C A9 06 00 80 01 .W.............. E0 01 00 0A 0D 22 04 22 00-00 00 2A 09 00 00 00 00 ...."."...*..... F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U. 以上是partition table,詳細的內容不贅述。最後的55 AA是BIOS的判 別碼,BIOS以此判別第零磁區放的是否是開機程式。如果把它去掉,就 會有無法從硬碟開機的錯誤訊息發生。不論是否中毒,此二個BYTE都會 存在。 上一篇文章中提到,有些病毒會把HD給format掉。而這些病毒大多也 會把軟碟format掉(事實上,這些病毒的徵兆之一就是原來可以用的 軟碟莫名其妙地不能用了)。這些軟碟要是有什麼重要資料也可以用 BIOS把它format回來。(我本人還未如此做過,所以不知道NDD會不會 修復這類軟碟的BOOT SECTOR....如果NDD拒修,可以把別張同容量軟碟 的BOOT SECTOR拷過來用) 如,我的FD要把第零磁軌format回來(設一軌有十七個磁區): -a 100 cs:100 mov ax,0511 cs:103 mov bx,200 cs:106 mov cx,1 cs:109 mov dx,1 (0=A,1=B) cs:10C int 13 cs:10E int 3 寫完這一段程式後,再在DS:BX所指的位置上填好一分表格 -E 200 參數表的內容是C,H,R,N, c:磁柱編號,h:磁頭編號,r:磁區編號 n:每個磁區的byte數(0=128,1=256,2=512...軟碟是2) 所以在ds:200的地方要填入: 00 00 01 02 00 00 02 02 00 00 03 02 00 00 04 02........ ----------- ----------- ----------- ----------- 一直到 00 00 11 02 00 00 00 00 ----------- ----------- 寫完後執行,你的電腦就不會無法讀寫FD了。 這時立刻用NDD修復開機磁區。 實際操做如下: C:\DOS>debug -a 100 15AE:0100 mov ax,0511 15AE:0103 mov bx,200 15AE:0106 mov cx,1 15AE:0109 mov dx,1 15AE:010C int 13 15AE:010E int 3 15AE:010F -e 200 15AE:0200 4D.0 E2.0 4D.1 ED.2 4D.0 F8.0 4D.2 03.2 15AE:0208 4E.0 0E.0 4E.3 19.2 4E.0 24.0 4E.4 2F.2 15AE:0210 00.0 00.0 4E.5 3A.2 4E.0 45.0 4E.6 50.2 15AE:0218 4E.0 5B.0 4E.7 66.2 4E.0 71.0 4E.8 7C.2 15AE:0220 4E.0 87.0 00.9 00.2 4E.0 92.0 4E.a 9D.2 15AE:0228 4E.0 A8.0 4E.b B3.2 4E.0 BE.0 4E.c C9.2 15AE:0230 4E.0 D4.0 4E.d DF.2 00.0 00.0 4E.e EA.2 15AE:0238 4E.0 F5.0 4E.f 00.2 4F.0 0B.0 4F.10 16.2 15AE:0240 4F.0 21.0 4F.11 2C.2 4F.0 37.0 7A.0 03.0 15AE:0248 4F. -g 後記:    我病毒的看法一向是:只要有許多人會它的原理、技術,它就沒什    麼可怕的了....我也很鼓勵辦法的人自己寫防毒程式。我在前面已    說過:公開的防毒程式一會有很多病毒作者想辦法破解,不如自己    寫的好用。我有一個學弟就很不錯,他自己寫了一個第零磁區的開    機程式,會直接CALL BIOS(不經由INT 13)來檢查是否有病毒入 侵0 sector。這麼做當然只有他的電腦才能用!!我以前也寫過一 個開機程式(放在軟碟上的),會問密碼,還把硬碟的partitiontable 也搬到軟碟上了。沒有那片母片和密碼電腦連C碟都找不到。(相 信從前雄中電腦社的同學有不少人吃過這個防護鎖的虧........) 當然組合語言功力不夠的人也有一招可用:你可以把0 sector用 DISKEDIT放到一片空白磁片的BOOT SECTOR,把防寫貼上,以後就 用這片軟碟開機即可。不過這招當然沒有前二招狠。 到此為止,對付開機型病毒的招式大多都說完了。如果各位還有什 麼指教的,歡迎隨時和我討論。                     TarMax                  frankfu@mbox.ee.ncu.edu.tw