by 风般的男人/CVC.GB 数据恢复一直以来都是我们关注的问题,因为你的电脑数据每天都在受着诸如病毒、恶意代码、黑客、误操作等的威胁!那么如何才能恢复你的数据呢?希望本文能对你有所帮助!
一、理论篇
要深入学习数据恢复,并非是一件容易的事,要想成为一个数据恢复专家,没有深厚的理论知识是不可能的,你必须了十分了解磁盘的逻辑结构,就让我们来看看需要学习的理论知识吧。
当我们对文件进行访问时,你有没有想过,操作系统是如何对文件进行操作的呢?这些文件又是如何存放在磁盘当中的呢?先来看看硬盘的总体结构,在介绍硬盘总体结构之前有必要介绍一下硬盘的参数,硬盘是以磁头(Heads),柱面(Cylinders),扇区(Sectors)进行访问的。其中: 磁头数(Heads)表示硬盘总共有几个磁头,也就是有几面盘片, 最大为 255 (用 8 个二进制位存储); 柱面数(Cylinders) 表示硬盘每一面盘片上有几条磁道,最大为 1023 (用 10 个二进制位存储); 扇区数(Sectors) 表示每一条磁道上有几个扇区, 最大为 63(用 6 个二进制位存储). 每个扇区一般是 512个字节,学习过汇编语言的朋友可能想到了,BIOS中断13H的入口参数中,CH是磁道号其值为0H~FEH(最多255个磁道),CL中低6位为扇区号,其值为1H~3FH(最多63个扇区),DH为磁头号的低位,CL中的高2位为磁头号的高位,也就是说,磁头号最多由10位二进制数表示,(1111111111)2=(1023)10,也就是说最多可以表示的磁头数为1024个。请大家记住这些在我们以后的学习中还会用到的,由此可以看出基于这种访问方式我们最大能访问的磁盘容量为:
255 * 1023 * 63 * 512字节=8414461440/1048576=8024.66M
只有大约8G的空间,这是因为早期磁盘还很小,想想当年你拥有一块200M硬盘时的喜悦心情吧!就好象当年的科学家们以为1K内存已经很大了一样,让电脑用户很长一段时间都为配置DOS下的内存而烦恼。而今,你肯定拥有一块大于8G的硬盘了,你能够用她,应该多亏了一种较新的硬盘访问技术——扩展 Int13H 技术。采用线性寻址方式存取硬盘, 所以突破了 8 G的限制, 而且还加入了对可拆卸介质(如活动硬盘)的支持,因为是谈数据恢复不是谈编程,关于扩展INT13H技术我在此就不详述了。
硬盘数据(基于FAT结构)总体结构如下:
1、主引导扇区(Master boot sector) (占用一个扇区)
2、第一个分区的引导扇区(Boot sector)(占用一个扇区)
3、第一个分区的FAT1 (占用空间由磁盘大小和FAT类型来定)
4、第一个分区的FAT2 (占用空间由磁盘大小和FAT类型来定)
5、第一个分区的根目录区
6、第一个分区数据区 (用来存放各种文件的数据)
7、扩展分区表 (占用一个扇区 )
8、第二个分区的引导扇区(Boot sector)(占用一个扇区)
9、第二个分区的FAT1 (占用空间由磁盘大小和FAT类型来定)
10、第二个分区的FAT2 (占用空间由磁盘大小和FAT类型来定)
11、第二个分区的根目录区
12、第二个分区数据区 (用来存放各种文件的数据)
13、扩展分区表
.
.
.
注意:当你的硬盘没有扩展分区的时候,你就没有扩展分区表了;当你只有一个硬盘分区的时候你的硬盘结构到6就完了。
(一)主引导扇区(Master boot sector)的结构:
它是硬盘的第一个扇区, 由主引导程序(MasterBoot Record简称MBR),硬盘分区表(Disk Partition Table简称DPT )和结束标识三部分组成。其结构如下:
1、偏移0H~1BDH 主引导程序(占446个字节,但实际可能并没有到这么多的字节)
2、偏移1BEH~1FDH 硬盘分区表(占64个字节,每个分区项占16个字节,最多可容纳4个分区项)
3、偏移1FEH~1FFH 结束标识 (占2个字节,结束标志,总为55H AAH)
主引导程序我在此就不分析了,需要注意的是在主引导程序中有一些出错信息,一些引导型病毒往往会覆盖这些信息来将自己嵌入到主引导程序中去,并将主引导程序开始的几个字节改为一条跳转指令,通过观察主引导程序的变化,往往可以让我们看出自己的电脑是否有引导型病毒,一旦发现异常,我们可以用FDISK/MBR命令来覆盖原有的MBR。结束标识的两个字节总是55H AAH,该标识只是用于判断这个扇区是否是有效的主引导扇区,如果主引导程序发现没有这个结束标识,将会认为操作系统丢失,并显示“Missing Operating System”。
硬盘分区表:
从偏移1BEH~1FDH的64个字节存放的是硬盘分区表,其中最多包含4个分区项,每个分区项由16个字节构成,其结构如下:
1、1BEH~1CDH 分区项1
2、1CEH~1DDH 分区项2
3、1DBH~1EDH 分区项3
4、1EFH~1FDH 分区项4
注意:没有用到的分区项上的记录总是16个十六进制码00H
我们再来看看每个分区项的详细含义,假设我们的一个分区占用的16个字节被标为00H~0FH,其结构如下:
00H 引导标识字节,其值只能为00H或80H,为00H时表示该分区不可引导,为80H时表示该分区可用于引导 。在许多诸如BOOT MAGIC之类的软件都是利用了这一原理,实现多操作系统引导的,了解了这一原理,你也可以写出你自己的多操作系统引导程序了。
01H 分区起始磁头号
02H 其高2位为分区起始柱面号的高位,底6位为分区起始扇区号
03H 分区起始柱面号的低位
04H 分区系统标志,当该值为00H时,表示此分区为不可识别的系统;为04H时该分区为FAT16分区;为05H或0FH该分区为扩展分区;为0B时该分区为FAT32分区 ;为83H时表示该分区为Linux分区, 为07时该分区为NTFS分区等等。一些如PQMAGIC磁盘软件在隐藏分区操作时就是将此字节的内容保存后在把它改为00H。
05H 分区结束磁头号
06H 其高2位为分区结束柱面号的高位,底6位为分区结束扇区号
07H 分区结束柱面号的低位
08H~0BH 此4个字节为在线性寻址方式下的分区的扇区地址。当分区大于8G时,扩展INT13H是通过该信息进行寻址的,我们可以发现在这种方式下寻址最多可访问的空间为:FFFFFFFFH扇*512B/扇=2048G,也就是说我们用扩展INT13H最大可以访问的空间为2048G,这个数字现在对我们来说是非常大的,但谁都不能想象计算机的发展之快,到时到底要如何来突破这个限制呢?现在谁也不知道。注意:此4个字节是从高位到低位排列的!例如我的分区表第一个分区项此4字节的内容为“3FH 00H 00H 00H”,它代表该分区是从0000003FH开始的,也就是从线性地址63扇开始的(线性地址把硬盘的第一个扇记为0H扇)
0CH~0FH 此4个字节为以扇区为单位的该分区大小(总扇区数),此4个字节同样是从高位到低位排列的 !
(二)引导扇区(Boot sector)的结构:
当主引导程序找到了带有引导标识为80H的分区后,就会将该分区的引导扇区读入到内存地址为0000:7C00处,并把控制权交给引导扇区中的引导程序,让我们来看看其中一些需要了解的地方:
1、0H~02H 一条跳转指令,指针指向后面的引导程序
2、03H~0AH 厂商名和系统版本
3、0BH~0CH 每扇字节数,一般为512字节
4、0DH 每簇扇区数(有关簇的概念我们在后面会详细介绍),对于FAT32的磁盘该字节一般为08H,既每簇为8H*512B=4K。
5、0EH~0FH 保留扇区数
6、10H 磁盘FAT的个数,一般为2个
7、11H~12H 对于FAT16的磁盘为根目录的最大目录项,对于FAT32的磁盘该值总为“00H 00H”
8、13H~14H 对于软盘或早期小硬盘该处为分区总扇区数,对于硬盘一般此值为“00H 00H”
9、15H 介质描述,对于1.44软盘此处长为“F0H”,对于硬盘此处长为“F8H”
10、16H~17H 对于软盘或早期小硬盘该处为每个FAT占用的扇区数,对于硬盘一般此值为“00H 00H”
11、18H~19H 每道扇区数,一般为“3FH 00H”,即每道有63个扇区
12、1AH~1BH 磁头数,一般为“FFH 00H”,即每个柱面有255个磁头
13、1CH~1FH 隐含扇区数
14、20H~23H 对于大硬盘来说该处存放的是该分区占用的扇区数
15、24H~27H 对于大硬盘来说该处存放的是每个FAT占用的扇区数
16、40H 该处为磁盘BIOS信息,第一块硬盘为“80H”,一般软盘为“00H”
17、47H~51H 用户设置的卷标,如果没有卷标此处常为字符串“NO NAME ”
18、52H~59H 文件系统,对于FAT32文件系统此处常为“FAT32 ”
19、1FEH~1FFH 结束标识,和上文提到的主引导区的结束标识一样为“55H AAH”
以上是引导扇区的一些信息,在上面我们可以获得一些有用的信息,我们也可以想象一下为什么当我们在分区上单击右键在分区属性中可以看到一些分区信息,比如分区大小,文件系统等等,知道原理,你也可以直接调用这些参数了。
(三)磁盘文件分配表(FAT)
在介绍FAT之前,我们要先了解有关簇的概念,簇(Cluster)是文件数据区被划分成的具有大小相等的区域用于磁盘文件的计量分配单位。一个簇可能有1、2、4、8、16、32、64或128(必须是2的幂)个扇区构成,但对于一种磁盘系统是其值往往是一定的,比如FAT16中每簇一般为32K(占64个扇),FAT32中每簇一般为4K(占8个扇)。
要理解操作系统为什么要用簇对磁盘进行管理,还是得学习FAT,FAT32磁盘中在系统引导区之后有一些保留未用的扇区,再后面有一个以 F8H FFH FFH 0FH 开始的FAT表,(对于FAT16是以F8H FFH开始的),每个FAT项占32位(4个字节),FAT16的每个FAT项占16位(2个字节),不同的FAT值有不同的含义:
FAT12的表项值 FAT16的表项值 FAT32的表项值 值的含义
000H 0000H 00000000H 未用的空簇
001H~FEFH 0001H~FFEFH 00000001H~0FFFFFEFH 文件已使用的簇
FF0H~FF6H FFF0H~FFF6H 0FFFFFF0H~0FFFFFF6H 系统保留簇
FF7H FFF7H 0FFFFFF7H 坏簇
FFF8H~FFFH FFF8H~FFFFH 0FFFFFF8H~0FFFFFFFH 文件的最后一簇
注意:在FAT表项中的16进制码总是从高向底排列的。
我们再来看看系统是如何利用FAT表来管理和访问文件的。系统在创建一个新文件时,逐一扫描FAT,跳过已经分配的簇,将该簇分给文件,其簇号作为该文件的起始簇号被放在该文件的文件目录项中(关于文件目录项我们将在后面详谈),如果此文件的大小只需要一个簇就可以放下的话,在该簇对应的FAT项中将放文件最后一簇的标志(一般是FFH FFH FFH F0H,即其值为0FFFFFFFH),如果文件大小一个簇放不下,系统就会在继续寻找FAT表中未用的簇,找到后将该簇的簇号写到上一簇对应的FAT项中,如果此时已经可以存下该文件的数据,系统就会在此簇对应的FAT中记上最后簇的标志,否则就继续找下一空簇......
也就是说FAT和簇是一一对应的关系,对于FAT32的FAT来说每4个字节为1个FAT项(对于FAT16的FAT每2个字节为一个FAT项),从0~N个FAT项分别对应0~N个簇,在我们对文件进行访问时,总是先访问文件的目录项,找到首簇簇号,再找到该簇号对应的FAT项,在其中找到下一簇的簇号,再在下一簇对应的FAT项中找到再下一簇的簇号......一直到在FAT项中找到有文件最后一簇的标志,我们对该文件的查找才结束。(当然也可能在首簇对应的FAT中该文件就结束了)这样就形成了一个链,我们把它称为盘簇链。
简要介绍一下FAT12系统,FAT12现在只用于软盘,因为是每个FAT占12位所以是每2个字节含有3个FAT项,我们来看看FAT12系统在寻找簇链的过程:将10进制簇号*1.5并取整,该值为FAT相对位移,在该处存放的是下一簇的簇号,以此类推。
一个问题:到底每簇占多少扇区合适?文件所占簇数为:
文件占用的簇数=[文件长度/每簇所占空间]取整+1
文件在最后一个簇存放的时候不可能刚好放满,没有放满的空间就浪费了(就好象我们打电话不可能每个电话都打到X分59.99秒,即使你通话时间为X分1秒你也要付出X+1分的电话费),我们可以来计算一下你的FAT系统磁盘空间浪费的大小:
浪费的空间大小=文件个数/2*每簇字节数(平均每个文件浪费半个簇的空间)
这样看来好象簇越小浪费的空间也越小,但是有个矛盾的地方是簇越小FAT所用的空间就会越大,同时簇小了,簇链就越长,访问文件的时间就会加长,这又是一种资源上的浪费,因此,簇的大小应该是以提高文件的访问时间和充分利用磁盘空间为原则的。
(三)目录项的结构
在第2个FAT表(系统一般有两个同样的FAT表)后我们可以找到该分区的根目录区,在上面有许多目录项(注意:目录项并非根目录才有),让我们先来复习一下FAT16的目录项各个字节的含义:
由32个字节构成:
00H~07H 文件的文件名,其中00H为以下值时有些特定含义:
00H 表项为空表项
E5H 文件已被删除
05H 实际该字节为的值为E5H
08H~0AH 文件的扩展名
0BH 文件属性 8位文件属性字节含义如下:
B7~B6 未用
B5 归档位
B4 子目录(代表该文件是一个目录或叫文件夹)
B3 卷标(卷标也解释为一种特殊的文件)
B2 系统文件
B1 隐藏文件
B0 只读文件
0CH~15H FAT16系统保留未用
16H~17H 系统最后修改时间,其中:
16H字节的0~4位是以2秒为增量的秒
16H字节的5~7位和17H字节的0~2位是分钟
17H字节的3~7位是小时
18H~19H 文件最后修改的日期,其中:
18H字节0~4位是天号
18H字节5~7位和19H字节0位是月份
19H字节的1~7位为年号,0~119分别代表1980~2099
1AH~1BH 文件的起始簇号(我们在之前已经介绍了)
1CH~1FH 文件的长度(单位为字节)
我们知道用在FAT16系统下的文件名有一些弊端,如:文件名最多只能有8个字符(或4个汉字),扩展名最多有3个字符,不分大小写,不能用一些特殊字符等。在FAT32系统这些问题已经得到解决,我们来看看FAT32系统是如何解决长文件名问题的。假如在你的电脑中有一个文件名为abcdefghijklmnopqrstuvwxyz111111.txt的文件名,那么该文件在磁盘目录中就占用了4个已32字节为单位的目录项,其中有3个目录项是用来描述长文件名的,有1个目录项是用来兼容老的FAT系统的,我们来看看例子中前3个用于描述长文件名的目录项:
43H 31H 00H 31H 00H 31H 00H 31H 00H 31H 00H 0FH 00H 27H 31H 00H
2EH 00H 74H 00H 78H 00H 74H 00H 00H 00H 00H 00H FFH FFH FFH FFH
02H 6EH 00H 6FH 00H 70H 00H 71H 00H 72H 00H 0FH 00H 27H 73H 00H
74H 00H 75H 00H 76H 00H 77H 00H 78H 00H 00H 00H 79H 00H 7AH 00H
01H 61H 00H 62H 00H 63H 00H 64H 00H 65H 00H 0FH 00H 27H 66H 00H
67H 00H 68H 00H 69H 00H 6AH 00H 6BH 00H 00H 00H 6CH 00H 6DH 00H
不难看出描述长文件名的目录项中的一些规则:
在每个目录项的32个字节中,(1)、偏移0H处:代表了长文件描述目录项的序号,其中高4位如果为0100则表示此项为最后一个目录项,低4位表示此长文件名的目录项的序号。如果此长文件名描述目录只用到了1个目录项,则此值为41H,如果此值为E5H代表此文件已被删除;(2)、偏移0BH~0CH处:其值总为0FH 00H;(3)、偏移0D处:该长文件目录项的标号,同一个长文件目录的不同目录项该值总相同(比如本例中3个目录项该值都为27H);(4)、偏移1AH~1BH处:该值总为00H 00H;(5)从偏移01H~1FH跳过前4项提到的字节,总是一个文件名的ASCII码接一个00H排列的,如果文件名的ASCII码在一个目录项还未写完,则会接到下一个目录项(实际上这些目录项都是从高到低排列的)同样的位置继续写,如果已经写完,则系统会在最后一个ACSII码后写00H,最多写3个00H,如果3个00H写完后,目录项还有空余位置,则系统会把这些位置全部写上FFH。
同时FAT32系统还有一个类似与FAT16的目录项(紧接着长文件名的目录的后面),同样占32个字节:
00H~07H 文件的文件名
08H~0AH 文件的扩展名
0BH 文件属性
0CH 保留未用
0EH~0FH 文件创建时间
10H~11H 文件最后访问日期
12H~13H 文件创建日期
14H~15H 文件起始簇号的高16位
16H~17H 系统最后修改时间,其中:
16H字节的0~4位是以2秒为增量的秒
16H字节的5~7位和17H字节的0~2位是分钟
17H字节的3~7位是小时
18H~19H 文件最后修改的日期,其中:
18H字节0~4位是天号
18H字节5~7位和19H字节0位是月份
19H字节的1~7位为年号,0~119分别代表1980~2099
1AH~1BH 文件的起始簇号的低16位
1CH~1FH 文件的长度(单位为字节)
注意:其中文件名为DOS兼容文件名,比如上例中在DOS下的文件名为ABCDEF~1.TXT;其首字节含义同FAT16系统;文件属性字节含义同FAT16系统;在FAT32系统中增加了最后访问日期和文件创建时间日期,其计算原理同FAT16中的最后修改的时间和日期。
(四)扩展分区表
我们已经学习了在主引导扇区中的分区表的偏移04H,是分区系统标志,当该值为05H或0FH表示该分区为扩展分区,其实它并非一个真正意义上的分区项,此分区项只是指向一个扩展分区表,这样做是为了解决分区表中最多只能有4个分区项的问题,扩展分区表也是从扩展分区表所在的扇区偏移1BEH~偏移1FD,该扇区0H~1BDH一般为1BEH个00H,同样要以结束标志55H AAH结束。
同样,在扩展分区表中也可能存在指向下一个扩展分区表的分区项。
二、手工恢复篇
学习了有关的理论知识之后我想你一定和我现在一样头晕眼花了,如果你已经掌握了相关理论,就该和我一起来实战数据恢复了。
(一)重建硬盘分区表
总有些这样的时候,你的系统不能够引导了,你连忙用软区引导,键入C:\,电脑却无情的告诉你“Invalid drive specification”,打开FDISK你发现你的分区表项已经全部消失,你几乎要哭了,你在想这一切是病毒、无聊的骇客还是自己的误操作造成的,但是不管此时你在想什么,都没什么意义了,你正打算重新分区重装系统,这时你要是刚好遇到我,或是象我一样热心的朋友,就会问你:“你难道就这样甘心和你多年来下载的资料说88么?”你此时肯定是象落水者抓住了一根救命稻草,说:“不啊,我希望能拯救硬盘数据,求求你帮我恢复好么?”此时,我会笑笑说:“不好,我不想帮你恢复数据,但是我会教你如何来恢复你的硬盘数据的,呵呵!”
首先,得找到一块被病毒或是恶意程序破坏的硬盘,可是这样一块硬盘并非马上就能找到的啊!怎么办?为了能够写完这篇文章,为了那位朋友能够恢复自己的数据,我只能用我自己的硬盘来做这个实验了(不禁想起了当年释加摩尼以身喂虎的故事),所谓我不入地狱谁入地狱。首先,把我的一块40G的硬盘主引导扇区备份一下,以防不测(关于如何备份主引导扇区,看我在11月份的《黑客X档案》中的文章),然后,将我的硬盘主引导区包括分区表给完全清零,(旁白:这样做非常危险,希望广大小朋友不要效仿!)然后干什么呢?大厨师回答:“备用。”
好了,先来介绍两个磁盘编辑工具,一个是Norton utility 8.0工具包中的Diskedit.exe,一个不错的老牌磁盘编辑工具,在DOS下执行,可惜用的是磁头(Heads),柱面(Cylinders),扇区(Sectors)方式对硬盘进行访问的,所以只能访问最多8G的磁盘空间,如果你的磁盘小于8G或是你只需要对8G内的磁盘进行访问,可以用它,但如果你需要访问8G以上的空间就推荐你用另一个工具:WinHex V10.47 SR1 汉化版,这个工具可能大家较为熟悉(在第5期《黑客X档案》光盘中可以找到),是一个不错的16进制文件编辑与磁盘编辑软件,磁盘编辑支持FAT16、FAT32和NTFS,可以在WIN9X和WIN2K、WINXP下运行,并且它的使用非常简单。
不再多说了,赶快拯救我的硬盘吧,上面还有MM发给我的照片呢!对了还有我写个MM的信还赶着发呢!幸好我还有一块小点的硬盘,用它作成主盘,把那块可怜的40G的硬盘挂上,启动成功!看看“我的电脑”里有没有我那块40G硬盘的分区?(画外音:做梦!),找到第5期《黑客X档案》光盘,安装WinHex V10.47 SR1 汉化版,打开WINHEW,刚启动会有一个“启动中心”的东西,选择“物理驱动器“中的”硬盘2“(标号为81H),(如果你在这都找不到你需要修复的硬盘的话,十有八九会是硬件问题,这时你要检查一下硬盘的数据线和电源线是否没接好,如果不是这些原因,我想你的硬盘不是需要修复数据了,而是需要真正物理意义上的修理了。)
此时你已经看到了被我完全清零的主引导区了,不用再复习主引导区的结构吧(什么老师没教过?这位同学你可以下课了),让我先回忆一下我的分区的大致情况吧,分了4个区,第一个区装的是WIN98,FAT32系统,大约5G;第二个区装的是WINXP,NTFS系统,大约5G;第三个区是FAT32系统,大约15G;第四个区是FAT32系统,大约15G。
注意:因为我的分区用PQMAGIC进行操作过,我将原来的第二个分区变为了主分区(即在主引导区中的非扩展分区的分区,可以用来引导系统),并且激活该分区(将引导标识字节的值改为80H,并将原来的引导标识改为00H),然后用光盘来安装WINXP,把它安装到第二分区,本来想装一个BOOTMAGIC实现多系统引导的,还没来得及就被拿来做实验了。第三和第四分区其实只是在同一个扩展分区表中的,也就是说,在主引导分区中,我们只要建一个扩展分区项指向后面的扩展分区表就可以把第三和第四分区全部找到了。如果你的硬盘只是用分区工具直接分区的话那么你可能只要恢复两个分区项就可以了,一个用于引导的分区项,和一个扩展的分区项。而我这块盘做了两个主分区,所以要重建三个分区项,两个主分区项和一个扩展分区项。
我们需要知道的信息有,1、该分区开始的磁头,柱面,和扇区号 2、该分区的所用的系统(这个好办) 3、该分区结束的磁头,柱面,和扇区号 4、该分区开始的扇区地址 5、该分区所占用的总扇区数。好了,回到WINHEX,单击下拉菜单中的“搜索”找到“寻找十六进值数值”,在对话框中添上“55AA”,在代码偏移量余数前打钩,并添入510(结束标志的偏移量)单击“OK”(知道为什么要找它么),你可能会找到许多“55AA”但是我们已经学习了引导分区的结构,上面有一些明显的特征,比如有厂商名和系统版本的ASCII码(FAT32的分区为MSWIN4.1,NTFS的分区为MSNTFS),分区开始字节为EBH开始的跳转码,第三字节为90H(NOP指令的机器码),在扇区后面有些出错信息等等。很快,我就在0柱1头1扇找到了符合我的要求的扇区其逻辑扇区号是63,也就是说我们已经找到了第一个分区开始的地址了,好象有些兴奋哦!但是凭我的经验每块硬盘第一个分区开始的位置都是0柱1头1扇(除非你的硬盘因为坏道把一部分空间屏蔽了),那么该分区结束的地址又要怎么来找呢?其实很简单,只要再找到下一个分区的开始向前推一个扇区,不就是这个扇区的结束位置了呀!哦原来啊,那就继续按F3键找“55AA”,靠~GG,我都等了N分钟还没找到要找的下一个NTFS的分区啊,说实话,你还是真的有些笨啊,既然告诉你了我的第一个分区大小,居然不知道利用,5G,对了,忘了告诉你了,有些厂家的40G的硬盘是以1K=1000字节算出来的,也就是说1G=1000000000字节,而实际上1000000000字节只有0.93G,,40G的硬盘实际上只有37G了(是不是有种被欺骗的感觉,3G啊,都可以装下五张VCD了),而5G只有大约4.6G了,我们就从4.2G开始找吧4.2G开始的扇区号=[4.2G/512字节]取整+1=8808039。废话少说,又回到WINHEX在,下拉菜单中选“定位”中的“转到扇区”,在“逻辑扇区”中填入“88080.39”,单击“OK”,然后继续搜索十六进制值“55AA”,搜到了大约十来个“55AA”,但在我的火眼晶睛下大部分都PASS掉,只有一个符合我的要求的,这就是下第二个扇区的开始处,记下了其地址609柱1头1扇,其逻辑扇区号是9783648。同样的方法我找到了第三个分区项指向的扩展分区表的位置,在1225柱0头1扇,其逻辑扇区号是19679625,因为柱数大于1023,这里就牵涉到一些问题,我们等会再说。最后记住一下最后一个扇区的位置,只需要按一次END键,我们就找到了最后一个扇区,记住4865柱254头63扇,其逻辑扇区号是78172289。
万事具备,只欠东风,就让我们来看看如何利用我们找到的和我之前说过的理论知识来重建分区表吧。先来重建第一个分区项:
1、00H 我不想用WIN98引导系统,所以我在此把值设为十六进制码“00”
2、01H 分区起始磁头号为1磁头,因此把值设为十六进制码“01”
3、02H 其高2位为分区起始柱面号的高位为(00)2,底6位为分区起始扇区号(000001)2,把值设为十六进制码“01”
4、03H 分区起始柱面号的低位,因为是0柱面,所以把值设为十六进制码“00”
5、04H 该分区系统为FAT32, 把值设为十六进制码“0B”
6、05H 分区结束磁头号为0,把值设为十六进制码“00”
7、06H 其高2位为分区结束柱面号的高位,因为柱面号为609=(1001100001)2,高两位为(10)2,底6位为分区结束扇区号,扇区号为63=(111111)2所以该值为(10111111)2,十六进制码为“BF”
8、07H 分区结束柱面号的低8位为(01100001)2,十六进制码为“61”
9、08H~0BH 分区开始的扇区为63,其4字节十六进制码为“3F 00 00 00”(从高位向低位排列)
10、0CH~0FH 总扇区数=[9783647(第一分区的结束扇)-63(第一分区的开始扇)]+1 = 9783585,十六进制码为:“21 49 95 00”
最后得到我的第一个分区项为十六进制值:“00 01 01 00 0B 00 BF 61 3F 00 00 00 21 49 95 00”,用同样的方法得到我的第二分区项的0H~05H为十六进制值“80 01 81 61 07 FE”但是到了06H~07H字节处有些困难了,柱面号为1224,已经超出了十位二进制数所能表示的范围,怎么办?其实方法很简单,就是只要是大于1023的柱面号,一律把它认为是1023,这样就好办了,1023柱63扇,十六进制值当然是“FF FF”
(就好象我们在玩星际争霸时你有个英雄口水兵杀死了1000个敌人,可是在记录上永远只记录了255)。其他的问题就好办多了,分区开始的扇区是9783648,那么08H~0BH处就是十六进制值“06 49 95 00”。分区总扇区为19679624-9783648+1=9895977,那么0CH~0FH处就是十六进制值“29 00 97 00”。同样的方法我很快算出了第三分区项的十六进制的分区信息“00 00 C1 FF 0F FE FF FF 89 49 2C 01 F9 86 7C 03”。到此重建分区表的工作就基本结束,还不赶快把这些千辛万苦得到的十六进制码写进你的主引导区,不要忘了把结束标志写上,存盘退出。然后关机,把我们恢复的盘设为主盘,引导一下看看!激动人心的时候就要到了,等啊等,为什么黑屏?呵呵~,这正是我要问你的问题,为什么呢?因为主引导程序还没有呢!连忙用软盘重启动,打个“F:\”看看,哈!熟悉的提示符“F:\>” 找到我的WIN98目录,进入COMMAND子目录,飞快的键入“FDISK/MBR”,学习过DOS的朋友一定还记得这个命令(这个参数居然还被微软保密了很久),用于重新写入主引导程序(MBR)。
再用这个硬盘重新启动试试。熟悉的XP桌面上又出现了MM的照片!打开我的电脑看看有没少什么,哈,一件不少,我的硬盘终于从噩梦中醒了过来。
本来可以就这样把这段结束的,可是不说出来我总是不安,虽然我的硬盘数据完全恢复了,可是当我用PQMAGIC的时候却报错,说我的硬盘分区表有个错误,我苦思冥想,最后和我备份的分区表比对才发现,原来的第一项分区表中结束地址是608柱面254磁头63扇区,逻辑扇区号是9783584,不是我所认为的609柱面0磁头63扇区,逻辑扇区号9783647,这样,从逻辑扇9783584到9783647的63个扇,没有被任何一个扇区用到。而且我们企图用它的时候PQMAGIC都报错(但是我用FDISK查看扇区正常),分析原因可能是因为我曾经用PQMAGIC把第二个分区从扩展分区中的第一个分区变为一个主分区时,删除了原来的扩展分区表,这样扩展分区表到后来的保留扇(即逻辑扇9783584到9783647)都没用到!当我认为9783647这个扇区号就是第一分区的结束扇区号时,和第一分区引导扇区上的“分区总扇区数”对不到,所以PQMAGIC才会报错,得出个结论,分区的结束定位我们应该根据引导扇上的“分区总扇区数”来计算,而不要象我一样凭经验武断的认为就是下一个分区开始的前一个分区。在恢复中我们记得一些规律,第一扇区的开始一般是0柱1头1扇,一般某分区结束总是在N柱254头63扇(也就是N柱的最后一扇)这些只是个人多年来重建分区的经验,并非理论!
一点补充:如果这是块被CIH病毒破坏的硬盘,往往到了这一步还没完,因为虽然我重建了分区表,但是我的首分区的FAT表被破坏了,但是不要紧,记得系统有两个FAT么?只要把第二个FAT覆盖到第一个FAT就可以了。可是我们要怎么才找得到第二个FAT呢?一般的办法是寻找偏移0的十六进制值“F8 FF FF 0F”,判断是不是FAT可能需要你有一定的经验,(没事用WINHEW观察你的硬盘会是一个好办法),如果找到第二个FAT,如何判断FAT的长度呢?这个有些困难,本来是通过引导扇的FAT长度字节来看的,但此时引导扇也被病毒覆盖了!我的方法是一般第一个FAT是从该分区的32扇开始的(FAT32系统),找到了第二FAT的开始,又知道第一FAT的开始,要算每个FAT的长度,还不好办么?恢复了FAT后,要恢复引导扇区就更好办了,除了分区占用的扇区数和每个FAT占用的扇区数要自己计算,其他都可以到别人的机器上拷贝一个过来。你可能要问我,要是它的第二个FAT也被覆盖了怎么办?唯一的办法是重建盘簇链,当然你要将大到以G为单位的分区用手工来建分区链,我想是没有可行性的!
(二)恢复软盘上的数据
软盘的逻辑结构有点象硬盘某分区的结构:
引导扇区(Boot sector)(占用一个扇区)
第一个FAT (用的是FAT12系统)
第二个FAT
根目录区
数据区 (用来存放各种文件的数据)
不知道你有没有遇到这样的情况,一分钟前还打得开的软盘,一分钟后就说“该软盘没有格式化,要格式化么?”如果该软盘没有重要数据,我想就是丢掉这块盘也没有什么,但是,如果这张盘有你辛辛苦苦一个月写的文章,又找不到其他备份,怎么办?难道就这样算了?我想你一定有兴趣了解一下如何恢复软盘数据!
(1)出现这种情况往往是软盘的0面0道1扇坏的原因,有一个传统的方法来恢复你的软盘的0面0道1扇:
1、将一张好的软盘插入软区
2、在DOS下执行DEBUG,在DEBUG提示符下做如下操作:
-L 100 0 0 1 (将好盘的逻辑扇区0读入内存DS:100处)
3、将好盘取出,插入需要恢复的盘,再在DEBUG提示符下做如下操作:
-W 100 0 0 1 (将内存DS:100处的好盘的逻辑扇区0写入需要恢复的软盘)
(2)以上方法适合0面0道1扇只是逻辑坏的盘,如果0面0道1扇是物理坏的话,DEBUG会告诉我们不能写盘,这是我们可以这样的来做:
1、需要的工具HDCOPY,一个比较强大的整盘复制工具。WINHEX(或其他16进制编辑器)上面已经提过了,在此我们要用的是其文件编辑功能;
2、用HDCOPY读功能将一张好的软盘读入内存,并用其写文件的功能建立一个软盘镜象文件“1.IMG”,然后取出坏盘,换上待恢复的盘,用同样的方法建立软盘镜象文件“2.IMG”
3、用WINHEX打开“1.IMG”和“2.IMG”,将“1.IMG”的前512个字节的内容覆盖“2.IMG”的前512个字节。
4、打开HDCOPY,将文件“2.IMG”读入,并准备一张好的软盘,插入软区,在HDCOPY中用写命令将磁盘镜象文件“2.IMG”写入软盘。
(3)如果你需要恢复的只是象我一样的文档的话,即使你的软盘被格式化了(但一定要是快速格式化,不是完全格式化),也有方法可以恢复的,要知道,快速格式化只是将文件系统的两个FAT区清零,实际上文件内容还在的。看看我是如何来恢复一个丢失的文档的:
1、用HDCOPY将需要恢复的磁盘做一个镜象文件“2.IMG”,用WINHEX打开“2.IMG”,如果你的文件格式是“TXT”此时你前后翻叶已经可以看到你写的东西了,你所要做的就是在WINHEX中选择你要恢复的内容,并将它保存成为一个新的文件(文件名当然由你来定了)。
2、如果你的文件格式不是“TXT”,而是“DOC”之类的,就用相应的程序打开“2.IMG”,比如是“DOC”的话用MSWORD来打开,WORD会提示你的文件中有非法的字符要不要删除?这时你选择“是的”,你会发现,你的文章的绝大部分内容都在,不过你的排版信息没了,不过没关系,大不了我们重新排过,总比重新写过要快多了。
三、工具篇
数据恢复软件有许多,我不敢说它们都是有用的,但是如果你实在是不愿意学习那些深奥的理论,身边又没有有数据恢复经验的人,你可以试试这些软件,但是有一点,我还是希望你能多多了解一些理论知识,因为要充分利用好别人的软件,你同样需要知道你在做什么,这样做会有什么样的后果,我相信一定有这样的时候,本来一块完全可以恢复的盘被你倒弄完就变得难以恢复了。所以即使你信任这些恢复工具,在你操作的过程中也最好有对磁盘数据结构比较熟悉的人在你的身边(不要告诉我最好是个MM)。下面来介绍几个较为有名的恢复工具。
1、Harddisk Data Recovery 3.0 硬盘文件系统恢复工具,该工具不象其它修复工具需要写入数据从而有可能把您的硬盘搞得更糟,它可以在内存重建文件系统,并可以安全的把数据传输到另外一个设备,支持FAT16/32、NTFS。
2、Disk Genius(DiskMan) 2.0 国产全中文硬盘分区表维护软件,软件主要功能及特点:1、仿WINDOWS纯中文图形界面,支持鼠标操作;2、提供比fdisk更灵活的分区操作,支持分区参数编辑;3、提供强大的分区表重建功能,迅速修复损坏 了的分区表;4、支持FAT/FAT32分区的快速格式化;5、在不破坏数据的情况下直接调整FAT/FAT32 分区的大小;6、自动重建被破坏的硬盘主引导记录;7、为防止误操作,对于简单的分区动作,在存盘之 前仅更改内存缓冲区,不影响硬盘分区表;8、能查看硬盘任意扇区,并可保存到文件。9、可隐藏FAT/FAT32 及NTFS分区。10、可备份包括逻辑分区表及各分区引导记录在内的所有硬盘分区信息。11、提供扫描硬盘 坏区功能,报告损坏的柱面。12、具备扇区拷贝功能。13、可以彻底清除分区数据。
3、File Scavenger 2.1 能够恢复在NTFS格式下意外删除的文件工具,能够救回的文件不只单一文件,还包括整个目录及压缩文件,也支持救回来的文件选择在原来所在位置恢复或储存到其它的硬盘。
4、EasyRecovery Pro 6.0是威力非常强大的硬盘数据恢复工具。能够帮你恢复丢失的数据以及重建文件系统。EasyRecovery不会向你的原始驱动器写入任何东东,它主要是在内存中重建文件分区表使数据能够安全地传输到其他驱动器中。你可以从被病毒破坏或是已经格式化的硬盘中恢复数据。该软件可以恢复大于8.4GB的硬盘。支持长文件名。被破坏的硬盘中像丢失的引导记录、BIOS参数数据块;分区表;FAT表;引导区都可以由它来进行恢复。
5、Recover98 用来在 WIN 98 下搜索并恢复误删除的文件和子目录的工具,可惜它的试用版,仅能救回3个文件。
6、TiraMisu Data Recovery deMo FAT32 4.03 是恢复硬盘因病毒感染,意外格式化或其它因素所导至的资料损失恢复工具软件,即使电脑以无法开机启动,仍可利用本身所作的启动盘开机来找出所失去的硬盘资料,并让你将这些资料拷贝到其它的硬盘.
7、FinalData 是一个文件恢复程序,利用它能够恢复被删除的重要信息,甚至还能从已经格式化或者已经损坏的磁盘中抽取文件,允许恢复完整的目录并尽量保持其原有的目录结构。
8、多数杀毒软件都有重建分区表的功能。
本文到此就已经结束了,如果你发现文章中有什么错误,或是你有什么更好的方法和补充的话,请发E-MAIL或是在QQ上告诉我,当然如果你有什么疑问也可以咨询!
|