winhex 比较详细的图文使用教程
数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就是硬盘本身没有物理损伤,而是由于人为或者病毒破坏所造成的数据丢失(比如误格式化,误分区),那么这样的数据恢复就叫软恢复。
这里呢,我们主要介绍软恢复,因为硬恢复还需要购买一些工具设备(比如pc3000,电烙铁,各种芯片、电路板),而且还需要懂一点点电路基础,我们这里所讲到的所有的知识,涉及面广,层次深,既有数据结构原理,为我们手工准确恢复数据提供依据,又有各种数据恢复软件的使用方法及技巧,为我们快速恢复数据提供便利,而且所有软件均为网上下载,不需要我们投资一分钱。
数据恢复的前提:数据不能被二次破坏、覆盖!
关于数码与码制:
关于二进制、十六进制、八进制它们之间的转换我不想多说,因为他对我们数据恢复来说帮助不大,而且很容易把我们绕晕。如果你感兴趣想多了解一些,可以到百度里面去搜一下,这方面资料已经很多了,就不需要我再多说了。
数据恢复我们主要用十六进制编辑器:winhex (数据恢复首选软件)
我们先了解一下数据结构:
下面是一个分了三个区的整个硬盘的数据结构
mbr | c盘 | ebr | d盘 | ebr | e盘 |
mbr,即主引导纪录,位于整个硬盘的0柱面0磁道1扇区,共占用了63个扇区,但实际只使用了1个扇区(512字节)。在总共512字节的主引导记录中,mbr又可分为三部分:第一部分:引导代码,占用了446个字节;第二部分:分区表,占用了64字节;第三部分:55aa,结束标志,占用了两个字节。后面我们要说的用winhex软件来恢复误分区,主要就是恢复第二部分:分区表。
引导代码的作用:就是让硬盘具备可以引导的功能。如果引导代码丢失,分区表还在,那么这个硬盘作为从盘所有分区数据都还在,只是这个硬盘自己不能够用来启动进系统了。如果要恢复引导代码,可以用dos下的命令:fdisk /mbr;这个命令只是用来恢复引导代码,不会引起分区改变,丢失数据。另外,也可以用工具软件,比如diskgen、winhex等。
但分区表如果丢失,后果就是整个硬盘一个分区没有,就好象刚买来一个新硬盘没有分过区一样。是很多病毒喜欢破坏的区域。
ebr,也叫做扩展mbr(extended mbr)。因为主引导记录mbr最多只能描述4个分区项,如果想要在一个硬盘上分多于4个区,就要采用扩展mbr的办法。
mbr、ebr是分区产生的。
比如mbr和ebr各都占用63个扇区,c盘占用1435329个扇区……那么数据结构如下表:
63
|
1435329
|
63
|
1435329 | 63
|
1253889
|
mbr
|
c盘
|
ebr
|
d盘
|
ebr
|
e盘
|
|
|
扩展分区
|
而每一个分区又由dbr、fat1、fat2、dir、data5部分组成:比如c 盘的数据结构:
c 盘 |
||||
dbr |
fat1 |
fat2 |
dir |
data |
winhex
winhex是使用最多的一款工具软件,是在windows下运行的十六进制编辑软件,此软件功能非常强大,有完善的分区管理功能和文件管理功能,能自动分析分区链和文件簇链,能对硬盘进行不同方式不同程度的备份,甚至克隆整个硬盘;它能够编辑任何一种文件类型的二进制内容(用十六进制显示)其磁盘编辑器可以编辑物理磁盘或逻辑磁盘的任意扇区,是手工恢复数据的首选工具软件。
首先要安装winhex,安装完了就可以启动winhex了,启动画面如下:首先出现的是启动中心对话框。
这里我们要对磁盘进行操作,就选择“打开磁盘”,出现“编辑磁盘”对话框:
在这个对话框里,我们可以选择对单个分区打开,也可以对整个硬盘打开,hd0是我现在正用的西部数据40g系统盘,hd1是我们要分析的硬盘,迈拓2g。这里我们就选择打开hd1整个硬盘,再点确定.然后我们就看到了winhex的整个工作界面。
最上面的是菜单栏和工具栏,下面最大的窗口是工作区,现在看到的是硬盘的第一个扇区的内容,以十六进制进行显示,并在右边显示相应的ascii码,右边是详细资源面板,分为五个部分:状态、容量、当前位置、窗口情况和剪贴板情况。这些情况对把握整个硬盘的情况非常有帮助。另外,在其上单击鼠标右键,可以将详细资源面板与窗口对换位置,或关闭资源面板。(如果关闭了资源面板可以通过“察看”菜单——“显示”命令——“详细资源面板”来打开)。
最下面一栏是非常有用的辅助信息,如当前扇区/总扇区数目……等
向下拉拉滚动条,可以看到一个灰色的横杠,每到一个横杠为一个扇区,一个扇区共512字节,每两个数字为一个字节,比如00。
下面我们来分析一下mbr,因为前面我们说过,前446个字节为引导代码,对我们来说没有意义,这里我们只分析分区表中的64个字节。
分区表64个字节,一共可以描述4个分区表项,每一个分区表项可以描述一个主分区或一个扩展分区(比如上面的分区表,第一个分区表项描述主分区c盘,第二个分区表项描述扩展分区,第三第四个分区表项填零未用)
每一个分区表项各占16个字节,各字节含义如下:(h表示16进制)
字节位置 |
内容及含义 |
第1字节 |
引导标志。若值为80h表示活动分区;若值为00h表示非活动分区。 |
第2、3、4字节 |
本分区的起始磁头号、扇区号、柱面号 |
第5字节 |
分区类型符: 00h——表示该分区未用 06h——fat16基本分区 0bh——fat32基本分区 05h——扩展分区 07h——ntfs分区 0fh——(lba模式)扩展分区 83h—— linux分区 |
第6、7、8字节 |
本分区的结束磁头号、扇区号、柱面号 |
第9、10、11、12字节 |
本分区之前已用了的扇区数 |
第13、14、15、16字节 |
本分区的总扇区数 |
此硬盘的第一分区表(即mbr)分析如下:
第一个分区表项(c盘)
第1字节80:表示此分区为活动分区;
第5字节0b:表示分区类型为fat32;
第9、10、11、12字节 系统隐含扇区3f 00 00 00:所谓系统隐含扇区就是本分区(c盘)之前已用了的扇区数,这是一个十六进制数,但要注意:真正的隐含扇区数应该反过来填写(比如:隐含扇区数为3e 4d 5a 6f,则反过来就是6f 5a 4d 3e ,这才是实际的隐含扇区数)。那么,3f 00 00 00反过来写就是00 00 003f,也就是3f,将他转成十进制数我们才能知道实际的隐含扇区数是多大。这可以使用计算器来算,单击工具栏上的“计算器”按钮,如下图:
这样就启动了计算器
计算器有两种型号,我们要进行进制转换,就要选择“科学型”
比如我们要将十六进制3f转换为十进制,就要先选中“十六进制”,然后输入3f
再选中“十进制”,十六进制3f转为十进制等于63。想一想我们前面所讲的,mbr占用63个扇区,也就是c盘之前已用了的扇区数为63,第64个扇区就是c盘的第一个扇区,但要注意的是,整个硬盘的lba地址是从零开始的,0~62的扇区为mbr。
第13、14、15、16字节本分区总扇区数(当然,这也就是c盘的大小):c1 e6 15 00,同样,实际的十六进制数也要反过来才对,也就是00 15 e6 c1,将它转换成十六进制数是1435329。给你出个题,你知道d盘的ebr在哪个扇区吗?我们一起来算一下,还记得前面数据结构那个表吗?c盘后面不就是d盘的ebr吗?d盘ebr的第一个扇区=mbr+c盘的大小,也就是 63+1435329=1435392。
我们来看看对不对,单击工具栏上的“转到扇区”按钮,出现一个“转到扇区”对话框
然后输入1435392,再点“确定”,就到了1435392扇区了(你可以使用它再转回到0扇区)
这个就是d盘的ebr,也就是d盘的分区表了,怎么知道的呢?因为mbr和ebr的结构是完全一样的,都是占用了63个扇区,但只用了第一个扇区,其余62个扇区填零不用。第一个扇区前446个字节都为引导代码,后64个字节为分区表,最后2个字节为55aa结束标志。因为ebr不是活动分区,不需要引导代码,所以前446个字节为零。
还有另一种方法直接找到d盘的ebr,单击“访问”下拉按钮——“分区二”——“分区表”,直接就到1435392扇区.
这样,分区表中的第一个分区表项共十六个字节分析完毕,下面我们再来看看第二个分区表项(扩展分区)。
第1字节00:表示非活动分区
第5字节05:表示扩展分区
第9、10、11、12字节00 e7 15 00:本分区之前的扇区数(扩展分区前面也就是mbr和c盘,好像我们前面算过这个数?)同样,先将它反过来,就是00 15 e7 00 ,再转为十进制是1435392,看来我们前面真的算过这个数。
第13、14、15、16字节40 09 29 00:本分区的总扇区数。也就是扩展分区的总扇区数。转为十进制应该是2689344。想一想,用这个数加上前面的1435392,不正好是整个硬盘的总扇区数4124736吗?
这样,如果分区表被破坏,我们只要把这些数值都计算出来并填上,分区表不就恢复了?那么,这里我们为什么不分析第2、3、4字节(本分区的起始磁头号、扇区号、柱面号)和第6、7、8字节(本分区的结束磁头号、扇区号、柱面号)呢?这是因为c/h/s(柱面/磁头/扇区)是老式硬盘的寻址方式,这种寻址方式来管理硬盘效率很低;而现在几乎所有的硬盘都支持lba(全称是logic block address,即扇区的逻辑块地址)寻址方式,这种管理方式简单高效。在lba方式下,系统把所有的物理扇区都统一编号,按照从零到某个最大值排列,这样只用一个序数就确定了一个唯一的物理扇区。
小知识:具体一个硬盘有多少个lba(扇区)不需要我们去记忆,因为用各种工具软件(如mhdd winhex等)都可以检测到。我们只要知道个大概就行了:如10g的硬盘大概有2000万个扇区;20g的硬盘大概有4000万个扇区;40g的硬盘大概有8000万个扇区……那么,2g的硬盘大概有400万个扇区。
那么,你可能要问了:如果要恢复分区表,这个起始磁头号、扇区号、柱面号还有结束磁头号、扇区号、柱面号应该怎么填呢?简单得很,在后面恢复分区表的时候我会告诉你,直接填,都不用计算。
还有兴趣来分析一下d盘的ebr吗?
其实d盘的ebr和e盘的ebr我们不分析也罢,因为无非也是分区表,跟mbr的结构是一样的,但却很容易把我们绕晕,又因为ebr一般不容易被破坏,所以我不建议分析ebr。
但如果你一定要分析,那就分析吧。
单击“访问”下拉按钮——“分区二”——“分区表”,直接就到1435392扇区,即d盘的分区表ebr。
第一个分区表项(d盘):
第1个字节00:表示非活动分区
第5个字节06:表示fat16分区
第9、10、11、12字节3f 00 00 00:本分区之前已用了的扇区数,也就是ebr的数目,63个。
第13、14、15、16字节c1 e6 15 00:本分区的总扇区数,也就是d盘的扇区数,先反过来排列就是00 15 e6 c1,转为十进制就是1435329。
第二个分区表项(d盘后面的):
第1个字节00:表示非活动分区
第5个字节05:表示扩展分区
第9、10、11、12字节00 e7 15 00:本分区之前已用了的扇区数,也就是d盘的ebr加d盘总共的大小, 63+1435329=1435392
第13、14、15、16字节40 22 13 00:本分区的总扇区数,1253952,也就是e盘的大小再加上一个ebr的数目。
单击“访问”下拉按钮——“分区三”——“分区表”,直接就到2870784扇区,即e
盘的分区表ebr。因为e盘后面没有分区了,所以没有第二个分区表项。这里我们就不再研究了,有兴趣的话可以自己多备一块硬盘作从盘,然后自己分分区研究研究。
通过以上的研究我们总结一下,mbr在定义分区的时候,将多余的容量定义为扩展分区,指定该扩展分区的起止位置,根据起始位置指向硬盘的某一个扇区,作为下一个分区表项,接着在该扇区继续定义分区,如果只有一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区描述扇区,在该分区上按照上述原则继续定义分区,直至分区定义结束。这些用来描述分区的扇区形成一个“分区链”,通过这个分区链,就可以描述所有的分区。系统在启动时按照分区链的连接顺序查找分区,直至找出所有分区。这个链显然是个开链结构,如果形成一个环,系统本身并不会去判断它,它只是按照这个链忠实的查找分区,而不进行任何额外的检测与处理。所谓硬盘逻辑锁,就是让分区链形成一个环,这样系统在启动时就在分区表内循环,表现为系统无法引导,就是从软盘启动,也不能进入硬盘。明白了其结构原理,解决这个问题就简单了,目前有很多种方法解决这个问题,后面我们还会讲到。系统就是利用这种方法使一个硬盘分区后看起来象多个硬盘。系统能够找到c盘以外的其他逻辑盘的唯一办法就是,沿着ebr所描述的分区链查找分区。
其实,通常情况下ebr是不会被破坏的,或者破坏的几率极低极低,通常情况下,都是只有mbr被破坏,那么这种情况下,我们只要把mbr的分区表64个字节复原,其他的分区顺着分区表所提供的链自然而然就出来了。那么,如何才能将分区表复原呢?这就要通过计算结合winhex强大的功能来实现了。