|
數據恢復與軟故障處理基本指南 第二篇
第二篇、數據恢復的準備知識
1、系統工作機理的簡單介紹(本節由lowpower縮寫)這一部分在原作中是最重要的一章,考慮到篇幅關係,進行了大量的刪節。
①、 DOS(DOS兼容系統)硬碟數據的構成
DOS磁碟系統,可以按照邏輯分區的概念管理物理空間,不同分區可以裝載不同的OS系統。示意如下:
硬碟空間
第一扇區 | 分區1 | 分區2| 分區3 |分區4 |
主引導扇區|引導扇區|引導扇區|引導扇區|引導扇區|
各分區公用|各個分區相對獨立,可安裝不同操作系統。
對FAT結構的分區每一分區都有獨立的引導記錄,FDT表,FAT表等。同時,系統還有一個最為重要的主引導記錄。在0柱0面1扇區,今後我們用CYL代表柱、SIDE代表面,SEC代表扇區。以下一個FAT結構分區的簡圖。
保留區--磁碟參數表、DOS引導記錄
控制區--FAT表1、FAT表2根目錄區
數據區--數據區
以下簡單介紹一下重要的部分:
主引導記錄又稱主分區表、MBR等等:MBR佔一個扇區,在CYL 0、SIDE 0 、SEC 1,由代碼區和數據區構成。其中代碼區是一端標準的程序,完成 BIOS自舉到OS BOOT之間的工作,為OS啟動做最後的準備。標準代碼區可以由FDISK/MBR重建,但對於多系統引導的不標準MBR,將被這一操作破壞。MBR的數據區記錄了分區情況。
系統扇區:CYL 0、SIDE 0 、SEC 1-CYL 0、SIDE 0 、SEC 63,共62個扇區引導區又稱BOOT區:CYL 0、SIDE
1 、SEC 1 這是我們過去稱的DOS引導區。也佔一個扇區。
文件分配表又稱FAT:是記錄文件佔用簇的情況和連接關係的地方。一般有兩個FAT表,起到備份的作用。FAT12、FAT16的第一FAT表一般均在0-1-2,FAT32的第一FAT表在0-1-33。由於FAT表記錄文件佔用扇區連接的地方,如果兩個FAT表都壞了,後果不堪設想。
由於FAT表的長度與當前分區的大小有關所以FAT2的地址是需要計算的。
根目錄區(ROOT、FDT):這裡記錄了根目錄里的目錄文件項等,ROOT區跟在FAT2後面。
數據區:跟在ROOT區後面,這才是數據內容。
其實, MBR、隱含扇區、BOOT區,重建都比較容易。數據恢復的關鍵在於恢複數據文件。由於FAT表記錄了文件在硬碟上佔用扇區的鏈表,如果2個FAT表都完全損壞了。那麼恢復文件,特別是佔用多個不連續扇區文件就相當困難了。
②、 主引導記錄簡單說明:
主引導記錄是硬碟引導的起點,關於代碼區不多說了,其數據區,比較重要的是2個標誌,80H和55AA,80H一般在偏移1BE處,80是分區激活的標誌的標記表示系統可引導,且整個分區表只能有一個80標記。另一個就是結尾的55AA標記,用來表示主引導記錄是一個有效的記錄。另外,各個分區自身的引導記錄,也是以55AA結束,這是我們查找分區的標誌。我們後面在介紹如何主引導記錄中,給出了一個完整的分區表的例子,大家可對照查看。數據區中,用10H位元組表示一個分區,最多可表示4個分區,分別從1BE、1CE、1DE、1EE開始,我們後面給出了分區表項對應地址的含義。大家可以對應分析一下以下分區的情況。
80 01 01 00 0B FE BF FC 3F 00-00 00 7E 86 BB 00
① ② ③ ④ ⑤ ⑥
①:激活標記,80表示可引導分區
②:分區開始的磁頭號為01、開始的扇區號為01、開始的柱面號為00,由於開始的扇區號為2進位6位,而開始的柱面號為2進位10位,因此扇區號所用位元組的高兩位要加在柱面號高兩位。
③:分區的系統類型FAT32(0B),01是FAT12,04為FAT16,06為BIGDOS,07為NTFS,其他參見分區類型表。
④:分區結束磁頭號254、分區結束扇區號63、分區結束柱面號764
⑤:首扇區的相對扇區號63
⑥:總扇區數12289622
2、常見手工處理工具與DOS外部命令介紹
DEBUG:古老和最為常見的調試跟蹤軟體,始終捆綁在微軟的DOS/WIN9X操作系統中。有19個子命令。有編寫執行彙編指令,直接讀寫絕對扇區和內存單元等功能,可以在最艱苦的條件下工作。DOS6.22以下的系統,DEBUG.EXE在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
DISKEDIT:常見16進位編輯軟體,字元界面,可以以文件方式和扇區方式讀寫邏輯內容,可以讀寫絕對扇區,可以方便的查找編輯分區表、FAT表、ROOT區等重要扇區。這一點要比DEBUG更方便。但在一些重要扇區損壞的情況下,DISKEDIT可能無法啟動。DISKEDIT軟體可以在著名的Norton Utilities軟體包中找到。最新的DISKEDIT出現在NU4中。
NDD:常見的FAT文件結構磁碟修復工具,就是著名的NORTON磁碟醫生,可以自動修復分區丟失等情況,可以搶救軟盤壞區中的數據,強制讀出后搬移到其他空白扇區。希望大家不要再使用NORTON FOR DOS7或8的NDD,這個版本由於不支持大分區、FAT32、長文件名等技術,會給你帶來大量的麻煩。建議大家使用Norton Utilities4或更高版本中的NDD.EXE,這是純DOS下的工具。在硬碟崩潰或異常的情況下,他可能可以帶給用戶以希望。WIN9X下的磁碟醫生調用的並不是這個程序,而是NDD32.EXE.
FDISK:FDISK當然是個危險的命令,很多人非常恐懼,事實上,FDISK命令的運行並不影響任何分區內的硬碟數據,他對分區的設置操作,只改變主分區表的數據區。而特別是FDISK異常重要的隱含參數/MBR,可以重建主分區表的代碼區,清除主引導型病毒等。這是非常有用的操作。DOS6.22以下的系統,FDISK.EXE在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
FORMAT:在一些人眼中,FORMAT是最可怕的命令,但他並不是對硬碟清零,特別值得注意的是,很多文件恢復工具都建議你恢復前先FORMAT該分區起到保護的餓作用。DOS6.22以下的系統,FORMAT.COM在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
HD-COPY:傳統的軟盤COPY工具,2.0版本以後加入了強制讀的功能,可以讀出一些損壞扇區的內容。
SYS:SYS命令是重建BOOT區的最簡潔的手段,也可以殺除BOOT區病毒。DOS6.22以下的系統,sys.COM在DOS目錄下,WIN9X系統中它在WINDOWS\COMMAND目錄下,它也出現在WIN9X所生成的應急盤中。
令我非常遺憾的是,至今我沒有發現比較出色的扇區級備份鏡象工具,我曾寫過一個HD-MIRROR,但由於錯誤較多,我提供下載的第二天就停止了發布,另外fixc的作者noz寫過一個clone.exe,但可惜只適合相同的硬碟。我也曾以為GHOST可以做到這點,事實上,你目前還不能指望他為你備份一塊深度破損的硬碟。。如果有一個有效的能以按扇區機制(而不是文件機制)壓縮備份一塊硬碟將之做成一個鏡象文件的話,那麼我們的恢復工作就擁有了更多的保證和餘地。我們可以更大膽的做恢復的嘗試。
3、一些自動處理工具或軟體包
首先介紹國內的一些免費修復工具
FIXMBR:何公道先生寫的一個修復MBR的工具,適合處理邏輯分區丟失的情況, 有一些可選參數,支持FAT32、FAT16,不支持NTFS、LINUX等分區,支持8.4G以上硬碟。可修復CIH發作后的擴展邏輯分區。
VRVFIX:北信源公司的推出的修復硬碟共享工具,適合處理邏輯分區丟失的情況,處理的基本比較準確。支持FAT32、FAT16,不支持NTFS、LINUX等分區。也不支持8.4G以上硬碟。
FIXC:國內最早出現的可以修復部分被CIH破壞的C盤的工具,作者是NOZ,新版本也加入了修復分區信息的功能,支持FAT32、FAT16,有限支持NTFS,不支持8.4G以上硬碟。目前的版本已經比較完善。
FIXHDPT:TBSOFT工作室的分區信息修復工具。支持FAT32、FAT16,不支持NTFS和LINUX,不支持8.4G以上硬碟,是歷史比較長的工具之一。
RE(ReapirEasy):本人早期寫的分區表修復工具,支持FAT32、FAT16,有限支持NTFS,不支持8.4G 以上硬碟,和某些BIOS不兼容。其整體水準低於前面列舉的工具。國外一些系統維護的工具目前已經達到了非常強大的程度。
Norton Utilities:歷史最悠久的系統維護工具。不僅可以數據恢復,還可以系統加速和修補內存錯誤。目前最新的版本是NU4.5 FOR 9X、NU2 FOR NT等。
Tiramint:最為出色的災難恢復工具之一,有NTFS、FAT32、FAT16、NOVELL4種版本。生成急救軟盤,可以對深度破壞的磁碟進行交叉恢復。
4、常用的基本操作
① 讀出主引導記錄:這是系統級數據恢復可能涉及最多的程序之一。例:
DEBUG
-a100 ;從此處開始彙編
126C:0100 mov ax,201; 讀操作一個扇區
126C:0103 mov bx,300; 送入地址300
126C:0106 mov cx,1 ;0面1扇
126C:0109 mov dx,80 ;80H為硬碟,頭為0
126C:010C int 13
126C:010E int 3
126C:010F
-g=100 ;執行
AX=0050 BX=0300 CX=0001 DX=0080 SP=FFEE BP=0000 SI=0000 DI=0000 DS=126C ES=126C SS=126C CS=126C IP=010E NV UP EI PL NZ NA PO NC
這裡用了I/O中斷13,涉及的寄存器含義為ah,操作方式,02H為讀,03H為寫,al送扇區數,bx送準備裝入扇區的內存偏移地址,cx送從哪一道哪一扇區開始,我們一般依靠改換CX來讀寫不同邏輯盤某個邏輯扇區。dx送盤符和頭數INT 3是斷點中斷,使程序運行到此停止。
② 顯示引導區內容:我們把扇區讀到某個內存地址並不是目的。而是為了看到他的內容,在DEBUG中D命令可以方便的查看內存單元的內容。續前例,如果我們要看到主引導區的內容的話,既然裝載到300。-d300 l200就可以查看了,一個引導區的映象類似如下,可以直觀的看 到我們前面所提到的代碼區和數據區。是否正常請大家自行分析一下
126C:0300 33 C0 8E D0 BC 00 7C FB-50 07 50 1F FC BE 1B 7C 3.....|.P.P....|
126C:0310 BF 1B 06 50 57 B9 E5 01-F3 A4 CB BE BE 07 B1 04 ...PW...........
126C:0320 38 2C 7C 09 75 15 83 C6-10 E2 F5 CD 18 8B 14 8B 8,|.u...........
126C:0330 EE 83 C6 10 49 74 16 38-2C 74 F6 BE 10 07 4E AC ....It.8,t....N.
126C:0340 3C 00 74 FA BB 07 00 B4-0E CD 10 EB F2 89 46 25 .}U
126C:03B0 AA 74 5A 83 EF 05 7F DA-85 F6 75 83 BE 27 07 EB .tZ.......u..'..
126C:03C0 8A 98 91 52 99 03 46 08-13 56 0A E8 12 00 5A EB ...R..F..V....Z.
126C:03D0 D5 4F 74 E4 33 C0 CD 13-EB B8 00 00 00 00 00 00 .Ot.3...........
126C:03E0 56 33 F6 56 56 52 50 06-53 51 BE 10 00 56 8B F4 V3.VVRP.SQ...V..
126C:03F0 50 52 B8 00 42 8A 56 24-CD 13 5A 58 8D 64 10 72 PR..B.V$..ZX.d.r
126C:0400 0A 40 75 01 42 80 C7 02-E2 F7 F8 5E C3 EB 74 49 .@u.B......^..tI
126C:0410 6E 76 61 6C 69 64 20 70-61 72 74 69 74 69 6F 6E nvalid partition
126C:0420 20 74 61 62 6C 65 00 45-72 72 6F 72 20 6C 6F 61 table.Error loa
126C:0430 64 69 6E 67 20 6F 70 65-72 61 74 69 6E 67 20 73 ding operating s
126C:0440 79 73 74 65 6D 00 4D 69-73 73 69 6E 67 20 6F 70 ystem.Missing op
126C:0450 65 72 61 74 69 6E 67 20-73 79 73 74 65 6D 00 00 erating system..
126C:0460 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
126C:0470 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
126C:0480 00 00 00 8B FC 1E 57 8B-F5 CB 00 00 00 00 00 00 ......W.........
126C:0490 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
126C:04A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
126C:04B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 80 01 ................
126C:04C0 01 00 0B FE BF FC 3F 00-00 00 7E 86 BB 00 00 00 ......?...~.....
126C:04D0 81 FD 0F FE FF FF BD 86-BB 00 E0 A9 75 00 00 00 ............u...
126C:04E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
126C:04F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA ..............U.
③ 反彙編主引導區內容:判定MBR的代碼區是否正常,對於數據區的基本情況,我們可以通過直觀觀察得出,但對於存在引導型病毒,或者引導區出現異常代碼的情況,我們可能需要分析MBR中代碼區的指令。這一般要對已經讀入內存的引導區進行反彙編。反彙編用指令U,續前例:
-u300 l15D ;反彙編主引導扇區代碼區內容
126C:0300 33C0 XOR AX,AX
126C:0302 8ED0 MOV SS,AX
…………
126C:045C 65 DB 65
126C:045D 6D DB 6D
④ 寫內存單元,在我們的前例中,主分區類型是0B是FAT32的,假定這個類型實際是NTFS的,我們該如何修改呢?由於主分區類型的偏移是4C3H,我們可以用E命令寫到內存單元中,從附表中查得NTFS的類型為07。因此-e4c3 7再比如說,假定我們想把無效的分區表清零,那麼,我們應當用另一個命令F,這個命令可以用填充一個內存地址範圍。清零分區表的操作就是-f4be 4ff 00,以下兩個操作也比較常見。
重置80標記,-e4be 80
重置55AA標記,-f4ff 4fe 55 aa
不要忘記了,此時僅僅是改動了內存中的數據,並未寫到硬碟上。因此需要用int 13中斷把改寫的結果,寫回硬碟。續前例,
-a100
126C:0100 mov ax,301 ; 寫操作一個扇區
-g=100 ;執行
其實,我們相當於修改了剛才輸入的讀主引導扇區程序,使程序變為。
126C:0100 mov ax,301 ; 寫操作一個扇區
126C:0103 mov bx,300 ;從內存地址300
126C:0106 mov cx,1 ;0面1扇
126C:0109 mov dx,80 ;80H為硬碟,頭為0
126C:010C int 13
126C:010E int 3 ;斷點
⑤ 絕對磁碟內容的讀出與寫入
類似操作在FAT32結構硬碟被CIH破壞的修復中比較常見,我們後面將講到恢復的基本思路就是用第二FAT表覆蓋第一FAT表。那麼無疑要讀出第二FAT表的內容,再回寫到第一FAT表的位置上。一般的來說,大量連續扇區的讀出寫入DISKEDIT進行非常方便,如果用DEBUG做則要寫一段子程序,不過程序的主要技巧就是利用int 25絕對磁碟讀中斷讀出的內容,而用int 26絕對磁碟寫做內容寫入。
5、數據可恢復的前提
有人覺得這個題目說法比較奇特,但數據恢復,作為一個數據再現的過程,一定要解決兩個問題,第一是從哪裡恢復的問題,第二是怎麼恢復的問題。解決了這兩個問題,我們事實上就把握了數據恢復的全部思想脈絡。而這一部分就是從哪裡恢復的問題。
①、 有效而及時的備份中是數據恢復最可靠的來源,在許多人倡導備份到秒的今天,恐怕不會有人懷疑這點。而有些備份機制則是系統內建的,比如兩份FAT表。
②、 數據的實際有效性的判定是關鍵,對我們來說,硬碟無法自舉、文件找不到、文件打不開等現象,其實並不與數據丟失畫等號。因為此時往往數據只是從操作系統的角度是一種邏輯丟失,而從物理扇區意義上,它仍然存在或部分存在。最明顯的就是文件刪除的例子,事實上,這只是把文件首位元組,改為0E而已。而此時文件體依然存在。
③、 數據損壞過程的可逆性分析:對數據的改變無非兩種,取代和變換,前者是不可逆的,而後者則是可逆的。我們以殺毒為例,對於大多文件性病毒來說,那些以附加而非代換方式感染的文件型病毒,理想的殺毒過程就是感染的逆過程。這種分析也常見與重要信息被隱藏搬移或者被加密的情況,但分析將比較複雜。
④、 數據本身是否是標準信息:有些信息實際是通用或局部通用的,你無須考慮如何從本機搶救。只要相同或相近的系統版本就可以了,比如BOOT區、隱含扇區、WINDOWS的DLL文件等等。典型的例子如分區表的代碼區,這是一段標準代碼,事實上,它就放在你的FDISK程序裡面,你可以用DEBUG把他提取出來。
⑤、 數據本身是否可以由其他信息統計再生:有些信息儘管丟失了,也沒有備份。但它實際可以從其他數據中間接求得。最典型的就是主分區表中的分區信息,即使你把他清零也不必害怕,因為你可以從你幾個分區中計算再生。
⑥、 破壞的完成程度:事實上,FDISK、FORMAT都不會徹底破壞數據,一般只有低格和扇區覆蓋操作才會徹底破壞數據。但有時,破壞過程或者誤操作過程會因人工終止、死機等原因不能完成。最明顯的就是CIH病毒的例子,由於CIH是以1024位元組為單位覆蓋扇區,這當然是不可逆過程,於是我們最初都認為,破壞是很難恢復的,除非人工終止。事實上,當病毒覆蓋某些扇區時會與9X系統發生衝突,從而造成死機,使數據得到了保護。 |
|