purk
2005-04-23, 11:25 PM
《電腦病毒與防治專題》
從硬碟架構看病毒所在(作者:譚安成)
何謂病毒?病毒的分類、傳播、感染途徑、發病症狀等已在其它
文章發表過,故不在此篇文章討論範圍之內。本文將使各位讀者了
解電腦"開機的過程"、"硬碟的Partition Table"及"DBR(DOS啟動記
錄)"的結構內容,此時各位一定有所疑惑?這些又跟病毒有什麼關
係呢?想想是否曾經聽過周遭的朋友電腦,因中毒而使得硬碟無法
正常開機、硬碟資料亂掉的情形呢?這些情形大多是由於病毒破壞
電腦硬碟的Partition Table(以下簡稱 PT)、DBR、FAT 表或ROOT
(DIR)所導致的結果,然而只要PT 或DBR 遭到損壞將會使你硬碟內
寶貴且重要的資料因無法開機而無法讀取。這也是撰寫病毒之程式
設計師所喜愛下毒的兩個區域,因此如何事先備份PT、DBR 以備中
毒後之復原,將是本篇所研討的重點,除此之外也會介紹FAT 及
ROOT (DIR)架構。
開機的程序
電腦是如何開機的呢?在此我們以DOS 作業系統為例。當我們打
開電腦主機電源時主機板上的BIOS就開始測試電腦硬體及周邊設備
,此時螢幕左上角處將會看到RAM 數字從 0開始累加直至主機板上
DRAM的數目為止,之後你會聽到硬碟測試的聲音,且硬碟指示燈亮
一下表示硬碟測試沒有問題,接下來依序載入MBR(主開機程式)、
DBR(DOS啟動記錄)、IO.SYS、MSDOS.SYS、CONFIG.SYS、
COMMAND.COM、AUTOEXEC.BAT等,待螢幕出現C:>或A:>時即表示開機
成功。以圖式如下。
┌────┐ ┌────┐ ┌────┐
│POWER ON├→ │BIOS測試├→ │載入 MBR├→
└────┘ └────┘ └────┘
┌────┐ ┌────┐ ┌─────┐ ┌───────┐
│載入 DBR├→ │IO.SYS ├→ │MSDOS.SYS ├→│載入CONFIG.SYS├→
└────┘ └────┘ └─────┘ └───────┘
┌────────┐ ┌────────┐ ┌─────┐
│載入AUTOEXEC.BAT├→│螢幕出現C:>或A:>├→ │ 開機成功 │
└────────┘ └────────┘ └─────┘
硬碟的邏輯結構
硬碟的邏輯結構有如倉庫之擺設,為了有效管理倉庫我們將它依
儲存類別畫分區塊,而各區塊間又有其先後順序,就以DOS 作業系
統為例,其將整顆硬碟依序畫分為MBR、DBR、FAT、ROOT (DIR)、
DATA。
HDD 的邏輯結構
┌───────┐
│ MBR │┐
├───────┤├ 開機時的重要程式及資料
│ DBR │┘
├───────┤
│ FAT │┐
├───────┤├ DOS 檔案組織的兩大架構
│ ROOT │┘
├───────┤
│ DATA │─ 使用者儲存在硬碟中的檔案、資料
└───────┘
DOS檔案組織的兩大架構
DOS作業系統在使用者下達DIR指令時是如何在螢幕上顯示其檔案
的階層架構呢?其實DOS 在硬碟中儲存了兩份重要的資訊即FAT和
DIR,它們用來記錄檔案位於硬碟之位址所在,因此FAT 及DIR將
是DOS檔案組織的兩大架構,缺一不可。
何謂 FAT(File Allocation Table) 表
FAT 就是大家所稱的檔案配置表,其位於DBR 之後,而FAT 表中
記錄著硬碟內所有空間的位置,因此當我們欲建立一檔案時,DOS
作業系統將會到FAT 表處尋找何處有空位,如有空位則FAT 表將會
把此空位標成已使用,所以此動作就有如戲院的售票員,當有觀眾
買票入席時則將手上座位表上之空白座位標(上)打勾,簡言之,
FAT 表就是在硬碟中的某一區域,此區域都是記錄硬碟中那些"磁簇
(Clusters)"已被使用而那些磁簇還未被使用。
何謂 ROOT (DIR=Directory)
ROOT又有人稱做DIR,而此DIR並非DOS指令的DIR,而是我們所說
的根目錄區的意思,即然是根目錄區,那就是用來儲存DOS作業系統
根目錄的檔案及目錄,而 ROOT 配合檔案記錄表(FAT)來記錄這些檔
案及目錄,每個檔案或目錄用32 Bytes 表示,ROOT區中一共可記錄
512 個目錄或檔案。
何謂 MBR (Master Boot Record:主開機記錄)
每當我們拿到一顆新硬碟時,第一步驟就是將硬碟做分割
(Partition),並設定那一分割區為可開機磁區,這些設定值連同開
機程式將在執行分割程式後,由分割程式(如:FDISK)寫入MBR ,因
此MBR 是硬碟最重要的開機磁區,這個磁區位於硬碟的磁柱 0,磁
頭 0,磁區1 的位置也是大家俗稱的第0 軌,然而我們再將MBR分成
兩個部份;分別為MBP(主開機程式:Master Boot Program)及
Partition Table(硬碟分割表)。簡言之MBR 就是硬碟的某一區域其
大小為512 Bytes(000 - 1FF),存放著"開機程式"及"硬碟分割表"
因此一旦此區域招受破壞肯定將會無法正常開機。
000┌───┐ ┐ 000┌────────┐ ┐
│ M │ │ │ M B P │ │
│ │ │ │ │ ├ 218
│ │ │ │ │ │BYTES
│ │ │ │ │ │
│ B │ ├ 512 ─→ ├────────┤0D9 ┘
│ │ │BYTES │ 保 留 │ ┐ 228
│ │ │ ─→ ├────────┤1BE ┘BYTES
│ R │ │ │ Partition │ ┐
│ │ │ │ Table ┌──┤ │
│ │ │ │ │55AA│ ├ 66
└───┘1FF ┘ └─────┴──┘1FF ┘BYTES
MBR 的細分
下以DEBUG程式來說明MBR的內容:
1.首先以手動的方式來觀看MBR 的內容,因此就得介紹各位如何
撰寫一段小小的組合語言程式。
STEP1:在DOS 環境下執行DEBUG
STEP2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰
寫組合語言程式依當時ES暫存器值而定(因此會與各位操
作時不同)
↓
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 ├ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:0109 mov dx,80 │ 80)第0 軌(CH = 0)、第0 磁頭(DH = 0)、第1
15C1:010C int 13 │ 磁區(CL = 1)的MBR 資料放至記憶體ES:BX(
15C1:010E int 20 ┘ 15C1:200)
15C1:0110
STEP3:在DEBUG 環境的提示符號(-)下輸入G,則程式從15C1:0100
執行至15C1:010E的INT 20 結束
STEP4:在DEBUG 環境的提示符號(-)下輸入D 200,即看到15C1:200
內容如果的15C1:0280到15C1:02D0,看到"Invalid partition
tale.Error loading...."等字串,則表示主開機程式沒
有被病毒侵入。再比照前面15C1:03CE - 15C1:03FD為00
即表示此顆硬碟只切割了一個分割表。
2.接下來說明如何自行儲存PT,這時你一定會有所疑問為何不儲
存MBP呢?因為當您在使用FDISK時只要附加參數/MBR,則FDISK
將只會自動重寫一份主開機程式(MBP ) 而不會重建PT。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰寫
組合語言程式
15C1:0100 mov ax,12c ┐
15C1:0103 mov cx,0 ├ 呼叫DOS INT 21的3C中斷服務程式開啟一空檔
15C1:0106 mov ah,3c │ PT.DAT
15C1:0108 int 21 ┘
15C1:010A push ax
15C1:010B mov ax,201 ┐ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:010E mov bx,200 ├ 80)第0 軌(CH = 0)、第0 磁頭(DH = 0)、第1
15C1:0111 mov cx,1 │ 磁區(CL = 1)的MBR 資料放至記憶體ES:BX(
15C1:0114 mov dx,80 │ 15C1:200)
15C1:0117 int 13 ┘
15C1:0119 pop ax
15C1:011A mov bx,ax ┐呼叫DOS INT 21的40 (AH)中斷服務程式從記憶
15C1:011C mov dx,3be ├體15C1:03BE(DX)開始寫64 Bytes(CX)資料存入
15C1:011F mov ah,40 │PT.DAT
15C1:0121 mov cx,40 │
15C1:0124 int 21 ┘
15C1:0126 mov ah,3e ┐呼叫DOS INT 21的3E (AH)中斷服務程式關閉己
15C1:0128 int 21 ┘開的檔案
15C1:012A int 20
15C1:012C db 'a:\pt.dat$' → 定義一檔名為PT.DAT
15C1:0136
-n mbr.com → 將上述程式定義一檔名MBR.COM
-rcx
-:0136 → 定義MBR.COM檔案大小為311Bytes
-w → 將MBR.COM存成一可執行檔
-q
C:>
Step3:請將一磁片放入A槽後在C:>下執行mbr.com,當程式執行
後會在A槽的根目錄下產生一大小為64Bytes的Partition
Table備份檔pt.dat。
何謂 DBR (Dos Boot Record:DOS 啟動記錄)
DBR就是存放DOS的啟動程式,主要功能就是用來載入DOS的兩個隱
藏檔(IO.SYS、 MSDOS.SYS。
同樣的底下以DEBUG 程式來說明DBR 的內容
1.首先以手動的方式來觀看DBR 的內容。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 ├ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:0109 mov dx,180 │ 80)第0 軌(CH = 0)、第1 磁頭(DH = 1)、第1
15C1:010C int 13 │ 磁區(CL = 1)的DBR 資料放至記憶體ES:BX(
15C1:010E int 20 ┘ 15C1:200)
15C1:0110
Step3:在DEBUG 環境的提示符號(-)下輸入G,則程式從15C1:0100
執行至15C1:010E 的INT 20 結束
Step4:在DEBUG 環境的提示符號(-)下輸入D 200,即看到15C1:200
內容
2.同樣的我們也事先將DBR 儲存起來。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰
寫組合語言程式
15C1:0100 mov ax,12c ┐
15C1:0103 mov cx,0 ├ 呼叫DOS INT 21的3C中斷服務程式開啟一空檔
15C1:0106 mov ah,3c │ DBR.DAT
15C1:0108 int 21 ┘
15C1:010A push ax
15C1:010B mov ax,201 ┐ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:010E mov bx,200 ├ 80)第0 軌(CH = 0)、第1 磁頭(DH = 1)、第1
15C1:0111 mov cx,1 │ 磁區(CL = 1)的DBR 資料放至記憶體ES:BX(
15C1:0114 mov dx,180 │ 15C1:200)
15C1:0117 int 13 ┘
15C1:0119 pop ax
15C1:011A mov bx,ax ┐呼叫DOS INT 21的40 (AH)中斷服務程式從記憶
15C1:011C mov dx,200 ├體15C1:0200(DX)開始寫512Bytes(AH)資料存入
15C1:011F mov ah,40 │DBR.DAT
15C1:0121 mov cx,200 │
15C1:0124 int 21 ┘
15C1:0126 mov ah,3e ┐呼叫DOS INT 21的3E (AH)中斷服務程式關閉己
15C1:0128 int 21 ┘開的檔案
15C1:012A int 20
15C1:012C db 'a:\dbr.dat$' → 定義一檔名為DBR.DAT
15C1:0136
-n dbr.com → 將上述程式定義一檔名DBR.COM
-rcx
-:0136 → 定義DBR.COM檔案大小為311Bytes
-w → 將DBR.COM存成一可執行檔
-q
C:>
Step3:請將一磁片於入A槽後在C:>下執行dbr.com,當程式執行
後會在A槽的根目錄下產生dbr.dat。
如何救復已中毒的MBR、DBR
我們將如何把未中毒前備份的PT.DAT、DBR.DAT 復原呢?另外需
告知讀者的是因為上文所備份的DBR.DAT只針對單一分割區為準,因
此做完下述步驟只能救回主分割區的資料,以下所做的步驟需特別
小心,否則一不注意將有自己破壞硬碟之虞。
Step1:使用原版DOS 磁片由軟碟開機
Step2:在A:>下執行FDISK/MBR,此時FDISK會重新寫一份新的MBP
至硬碟內。
Step3:執行DEBUG.EXE
Step4:-a
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 │
15C1:0109 mov dx,80 ├ 讀取硬碟MBR(MBP+Partition Table)
15C1:010C int 13 │ 資料進入記憶體且從ES:BX(15C1:0200)
15C1:010E int 20 │ 擺起
15C1:0110 ┘
-g
Program terminated normally
-q
Step5:做完上述步驟已完全恢復硬碟的MBR
Step6:接下來恢復DBR
Step7:在A:>下執行DEBUG.EXE
Step8:-n dbr.dat ┐將事先備份好的資料載入記憶體,且從
15C1:0200放起 -l 200 ┘
-a
15C1:0110 mov ax,301 ┐
15C1:0113 mov bx,200 │
15C1:0116 mov cx,1 │
15C1:0119 mov dx,80 ├ 呼叫BIOS INT 13,AH = 03的中
15C1:011C int 13 │ 斷服務程式,將15C1:0200起之
15C1:011E int 20 │ 資料寫1(AL = 1) 磁區入硬碟
15C1:0110 ┘ (DL =80),第0 磁頭(DH = 0),
第0 磁軌(CH = 0),第1 磁區(CL=1)
-g
Program terminated normally
-q
Step9:救復DBR 後請重新由A 開機,在出現A:>後打入SYS C:
即可殺掉開機型病毒常隱藏的區域
十、結語
了解硬碟的邏輯架構將有助於讀者在自行PC中了開機型病毒後如
何自行救護而不借助掃毒程式,希望此篇文章能讓各位更清楚DOS
環境下硬碟的整體架構,倘若你對組合語言還不是很熟悉,想信"二
、硬碟的邏輯結構"能讓你清楚了解。
http://www.ascc.net/nl/86/1318/05.txt
贊助商連結
從硬碟架構看病毒所在(作者:譚安成)
何謂病毒?病毒的分類、傳播、感染途徑、發病症狀等已在其它
文章發表過,故不在此篇文章討論範圍之內。本文將使各位讀者了
解電腦"開機的過程"、"硬碟的Partition Table"及"DBR(DOS啟動記
錄)"的結構內容,此時各位一定有所疑惑?這些又跟病毒有什麼關
係呢?想想是否曾經聽過周遭的朋友電腦,因中毒而使得硬碟無法
正常開機、硬碟資料亂掉的情形呢?這些情形大多是由於病毒破壞
電腦硬碟的Partition Table(以下簡稱 PT)、DBR、FAT 表或ROOT
(DIR)所導致的結果,然而只要PT 或DBR 遭到損壞將會使你硬碟內
寶貴且重要的資料因無法開機而無法讀取。這也是撰寫病毒之程式
設計師所喜愛下毒的兩個區域,因此如何事先備份PT、DBR 以備中
毒後之復原,將是本篇所研討的重點,除此之外也會介紹FAT 及
ROOT (DIR)架構。
開機的程序
電腦是如何開機的呢?在此我們以DOS 作業系統為例。當我們打
開電腦主機電源時主機板上的BIOS就開始測試電腦硬體及周邊設備
,此時螢幕左上角處將會看到RAM 數字從 0開始累加直至主機板上
DRAM的數目為止,之後你會聽到硬碟測試的聲音,且硬碟指示燈亮
一下表示硬碟測試沒有問題,接下來依序載入MBR(主開機程式)、
DBR(DOS啟動記錄)、IO.SYS、MSDOS.SYS、CONFIG.SYS、
COMMAND.COM、AUTOEXEC.BAT等,待螢幕出現C:>或A:>時即表示開機
成功。以圖式如下。
┌────┐ ┌────┐ ┌────┐
│POWER ON├→ │BIOS測試├→ │載入 MBR├→
└────┘ └────┘ └────┘
┌────┐ ┌────┐ ┌─────┐ ┌───────┐
│載入 DBR├→ │IO.SYS ├→ │MSDOS.SYS ├→│載入CONFIG.SYS├→
└────┘ └────┘ └─────┘ └───────┘
┌────────┐ ┌────────┐ ┌─────┐
│載入AUTOEXEC.BAT├→│螢幕出現C:>或A:>├→ │ 開機成功 │
└────────┘ └────────┘ └─────┘
硬碟的邏輯結構
硬碟的邏輯結構有如倉庫之擺設,為了有效管理倉庫我們將它依
儲存類別畫分區塊,而各區塊間又有其先後順序,就以DOS 作業系
統為例,其將整顆硬碟依序畫分為MBR、DBR、FAT、ROOT (DIR)、
DATA。
HDD 的邏輯結構
┌───────┐
│ MBR │┐
├───────┤├ 開機時的重要程式及資料
│ DBR │┘
├───────┤
│ FAT │┐
├───────┤├ DOS 檔案組織的兩大架構
│ ROOT │┘
├───────┤
│ DATA │─ 使用者儲存在硬碟中的檔案、資料
└───────┘
DOS檔案組織的兩大架構
DOS作業系統在使用者下達DIR指令時是如何在螢幕上顯示其檔案
的階層架構呢?其實DOS 在硬碟中儲存了兩份重要的資訊即FAT和
DIR,它們用來記錄檔案位於硬碟之位址所在,因此FAT 及DIR將
是DOS檔案組織的兩大架構,缺一不可。
何謂 FAT(File Allocation Table) 表
FAT 就是大家所稱的檔案配置表,其位於DBR 之後,而FAT 表中
記錄著硬碟內所有空間的位置,因此當我們欲建立一檔案時,DOS
作業系統將會到FAT 表處尋找何處有空位,如有空位則FAT 表將會
把此空位標成已使用,所以此動作就有如戲院的售票員,當有觀眾
買票入席時則將手上座位表上之空白座位標(上)打勾,簡言之,
FAT 表就是在硬碟中的某一區域,此區域都是記錄硬碟中那些"磁簇
(Clusters)"已被使用而那些磁簇還未被使用。
何謂 ROOT (DIR=Directory)
ROOT又有人稱做DIR,而此DIR並非DOS指令的DIR,而是我們所說
的根目錄區的意思,即然是根目錄區,那就是用來儲存DOS作業系統
根目錄的檔案及目錄,而 ROOT 配合檔案記錄表(FAT)來記錄這些檔
案及目錄,每個檔案或目錄用32 Bytes 表示,ROOT區中一共可記錄
512 個目錄或檔案。
何謂 MBR (Master Boot Record:主開機記錄)
每當我們拿到一顆新硬碟時,第一步驟就是將硬碟做分割
(Partition),並設定那一分割區為可開機磁區,這些設定值連同開
機程式將在執行分割程式後,由分割程式(如:FDISK)寫入MBR ,因
此MBR 是硬碟最重要的開機磁區,這個磁區位於硬碟的磁柱 0,磁
頭 0,磁區1 的位置也是大家俗稱的第0 軌,然而我們再將MBR分成
兩個部份;分別為MBP(主開機程式:Master Boot Program)及
Partition Table(硬碟分割表)。簡言之MBR 就是硬碟的某一區域其
大小為512 Bytes(000 - 1FF),存放著"開機程式"及"硬碟分割表"
因此一旦此區域招受破壞肯定將會無法正常開機。
000┌───┐ ┐ 000┌────────┐ ┐
│ M │ │ │ M B P │ │
│ │ │ │ │ ├ 218
│ │ │ │ │ │BYTES
│ │ │ │ │ │
│ B │ ├ 512 ─→ ├────────┤0D9 ┘
│ │ │BYTES │ 保 留 │ ┐ 228
│ │ │ ─→ ├────────┤1BE ┘BYTES
│ R │ │ │ Partition │ ┐
│ │ │ │ Table ┌──┤ │
│ │ │ │ │55AA│ ├ 66
└───┘1FF ┘ └─────┴──┘1FF ┘BYTES
MBR 的細分
下以DEBUG程式來說明MBR的內容:
1.首先以手動的方式來觀看MBR 的內容,因此就得介紹各位如何
撰寫一段小小的組合語言程式。
STEP1:在DOS 環境下執行DEBUG
STEP2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰
寫組合語言程式依當時ES暫存器值而定(因此會與各位操
作時不同)
↓
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 ├ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:0109 mov dx,80 │ 80)第0 軌(CH = 0)、第0 磁頭(DH = 0)、第1
15C1:010C int 13 │ 磁區(CL = 1)的MBR 資料放至記憶體ES:BX(
15C1:010E int 20 ┘ 15C1:200)
15C1:0110
STEP3:在DEBUG 環境的提示符號(-)下輸入G,則程式從15C1:0100
執行至15C1:010E的INT 20 結束
STEP4:在DEBUG 環境的提示符號(-)下輸入D 200,即看到15C1:200
內容如果的15C1:0280到15C1:02D0,看到"Invalid partition
tale.Error loading...."等字串,則表示主開機程式沒
有被病毒侵入。再比照前面15C1:03CE - 15C1:03FD為00
即表示此顆硬碟只切割了一個分割表。
2.接下來說明如何自行儲存PT,這時你一定會有所疑問為何不儲
存MBP呢?因為當您在使用FDISK時只要附加參數/MBR,則FDISK
將只會自動重寫一份主開機程式(MBP ) 而不會重建PT。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰寫
組合語言程式
15C1:0100 mov ax,12c ┐
15C1:0103 mov cx,0 ├ 呼叫DOS INT 21的3C中斷服務程式開啟一空檔
15C1:0106 mov ah,3c │ PT.DAT
15C1:0108 int 21 ┘
15C1:010A push ax
15C1:010B mov ax,201 ┐ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:010E mov bx,200 ├ 80)第0 軌(CH = 0)、第0 磁頭(DH = 0)、第1
15C1:0111 mov cx,1 │ 磁區(CL = 1)的MBR 資料放至記憶體ES:BX(
15C1:0114 mov dx,80 │ 15C1:200)
15C1:0117 int 13 ┘
15C1:0119 pop ax
15C1:011A mov bx,ax ┐呼叫DOS INT 21的40 (AH)中斷服務程式從記憶
15C1:011C mov dx,3be ├體15C1:03BE(DX)開始寫64 Bytes(CX)資料存入
15C1:011F mov ah,40 │PT.DAT
15C1:0121 mov cx,40 │
15C1:0124 int 21 ┘
15C1:0126 mov ah,3e ┐呼叫DOS INT 21的3E (AH)中斷服務程式關閉己
15C1:0128 int 21 ┘開的檔案
15C1:012A int 20
15C1:012C db 'a:\pt.dat$' → 定義一檔名為PT.DAT
15C1:0136
-n mbr.com → 將上述程式定義一檔名MBR.COM
-rcx
-:0136 → 定義MBR.COM檔案大小為311Bytes
-w → 將MBR.COM存成一可執行檔
-q
C:>
Step3:請將一磁片放入A槽後在C:>下執行mbr.com,當程式執行
後會在A槽的根目錄下產生一大小為64Bytes的Partition
Table備份檔pt.dat。
何謂 DBR (Dos Boot Record:DOS 啟動記錄)
DBR就是存放DOS的啟動程式,主要功能就是用來載入DOS的兩個隱
藏檔(IO.SYS、 MSDOS.SYS。
同樣的底下以DEBUG 程式來說明DBR 的內容
1.首先以手動的方式來觀看DBR 的內容。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 ├ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:0109 mov dx,180 │ 80)第0 軌(CH = 0)、第1 磁頭(DH = 1)、第1
15C1:010C int 13 │ 磁區(CL = 1)的DBR 資料放至記憶體ES:BX(
15C1:010E int 20 ┘ 15C1:200)
15C1:0110
Step3:在DEBUG 環境的提示符號(-)下輸入G,則程式從15C1:0100
執行至15C1:010E 的INT 20 結束
Step4:在DEBUG 環境的提示符號(-)下輸入D 200,即看到15C1:200
內容
2.同樣的我們也事先將DBR 儲存起來。
Step1:在DOS 環境下執行DEBUG
Step2:在DEBUG 環境的提示符號(-)下輸入A,即表示欲開始撰
寫組合語言程式
15C1:0100 mov ax,12c ┐
15C1:0103 mov cx,0 ├ 呼叫DOS INT 21的3C中斷服務程式開啟一空檔
15C1:0106 mov ah,3c │ DBR.DAT
15C1:0108 int 21 ┘
15C1:010A push ax
15C1:010B mov ax,201 ┐ 呼叫BIOS INT 13中斷服務程式讀出硬碟(DL =
15C1:010E mov bx,200 ├ 80)第0 軌(CH = 0)、第1 磁頭(DH = 1)、第1
15C1:0111 mov cx,1 │ 磁區(CL = 1)的DBR 資料放至記憶體ES:BX(
15C1:0114 mov dx,180 │ 15C1:200)
15C1:0117 int 13 ┘
15C1:0119 pop ax
15C1:011A mov bx,ax ┐呼叫DOS INT 21的40 (AH)中斷服務程式從記憶
15C1:011C mov dx,200 ├體15C1:0200(DX)開始寫512Bytes(AH)資料存入
15C1:011F mov ah,40 │DBR.DAT
15C1:0121 mov cx,200 │
15C1:0124 int 21 ┘
15C1:0126 mov ah,3e ┐呼叫DOS INT 21的3E (AH)中斷服務程式關閉己
15C1:0128 int 21 ┘開的檔案
15C1:012A int 20
15C1:012C db 'a:\dbr.dat$' → 定義一檔名為DBR.DAT
15C1:0136
-n dbr.com → 將上述程式定義一檔名DBR.COM
-rcx
-:0136 → 定義DBR.COM檔案大小為311Bytes
-w → 將DBR.COM存成一可執行檔
-q
C:>
Step3:請將一磁片於入A槽後在C:>下執行dbr.com,當程式執行
後會在A槽的根目錄下產生dbr.dat。
如何救復已中毒的MBR、DBR
我們將如何把未中毒前備份的PT.DAT、DBR.DAT 復原呢?另外需
告知讀者的是因為上文所備份的DBR.DAT只針對單一分割區為準,因
此做完下述步驟只能救回主分割區的資料,以下所做的步驟需特別
小心,否則一不注意將有自己破壞硬碟之虞。
Step1:使用原版DOS 磁片由軟碟開機
Step2:在A:>下執行FDISK/MBR,此時FDISK會重新寫一份新的MBP
至硬碟內。
Step3:執行DEBUG.EXE
Step4:-a
15C1:0100 mov ax,201 ┐
15C1:0103 mov bx,200 │
15C1:0106 mov cx,1 │
15C1:0109 mov dx,80 ├ 讀取硬碟MBR(MBP+Partition Table)
15C1:010C int 13 │ 資料進入記憶體且從ES:BX(15C1:0200)
15C1:010E int 20 │ 擺起
15C1:0110 ┘
-g
Program terminated normally
-q
Step5:做完上述步驟已完全恢復硬碟的MBR
Step6:接下來恢復DBR
Step7:在A:>下執行DEBUG.EXE
Step8:-n dbr.dat ┐將事先備份好的資料載入記憶體,且從
15C1:0200放起 -l 200 ┘
-a
15C1:0110 mov ax,301 ┐
15C1:0113 mov bx,200 │
15C1:0116 mov cx,1 │
15C1:0119 mov dx,80 ├ 呼叫BIOS INT 13,AH = 03的中
15C1:011C int 13 │ 斷服務程式,將15C1:0200起之
15C1:011E int 20 │ 資料寫1(AL = 1) 磁區入硬碟
15C1:0110 ┘ (DL =80),第0 磁頭(DH = 0),
第0 磁軌(CH = 0),第1 磁區(CL=1)
-g
Program terminated normally
-q
Step9:救復DBR 後請重新由A 開機,在出現A:>後打入SYS C:
即可殺掉開機型病毒常隱藏的區域
十、結語
了解硬碟的邏輯架構將有助於讀者在自行PC中了開機型病毒後如
何自行救護而不借助掃毒程式,希望此篇文章能讓各位更清楚DOS
環境下硬碟的整體架構,倘若你對組合語言還不是很熟悉,想信"二
、硬碟的邏輯結構"能讓你清楚了解。
http://www.ascc.net/nl/86/1318/05.txt
贊助商連結