数据恢复工具 winhex

数据恢复工具 winhex 使用教程

出处:多特软件站   时间:2008-06-26   人气:21663我要提问 我来说两句

核心提示: 一个很不错的16 进制文件编辑与磁盘编辑软件。WinHex 以文件小、速度快,功能不输其它的Hex 十六进位编辑器工具得到了ZDNet Software Library 五颗星最高评价,可做HexASCII 码编辑修改,多文件寻替换功能,一般运算及逻辑运算。

      数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就是硬盘本身没有物理损伤,而是由于人为或者病毒破坏所造成的数据丢失(比如误格式化,误分区),那么这样的数据恢复就叫软恢复。

 

这里呢,我们主要介绍软恢复,因为硬恢复还需要购买一些工具设备(比如pc3000, 电烙铁,各种芯片、电路板),而且还需要懂一点点电路基础,我们这里所讲到的所有的知识,涉及面广,层次深,既有数据结构原理,为我们手工准确恢复数据提供依据,又有各种数据恢复软件的使用方法及技巧,为我们快速恢复数据提供便利,而且所有软件均为网上下载,不需要我们投资一分钱。

数据恢复的前提:数据不能被二次破坏、覆盖!

关于数码与码制:

关于二进制、十六进制、八进制它们之间的转换我不想多说,因为他对我们数据恢复来说帮助不大,而且很容易把我们绕晕。如果你感兴趣想多了解一些,可以到百度里面去搜一下,这方面资料已经很多了,就不需要我再多说了。

数据恢复我们主要用十六进制编辑器:Winhex (数据恢复首选软件)

 

我们先了解一下数据结构:

下面是一个分了三个区的整个硬盘的数据结构

MBR

C

EBR

D

EBR

E

MBR ,即主引导纪录,位于整个硬盘的0 柱面0 磁道1 扇区,共占用了63 个扇区,但实际只使用了1 个扇区(512 字节)。在总共512 字节的主引导记录中,MBR 又可分为三部分:第一部分:引导代码,占用了446 个字节;第二部分:分区表,占用了64 字节;第三部分:55AA ,结束标志,占用了两个字节。后面我们要说的用winhex 软件来恢复误分区,主要就是恢复第二部分:分区表。

 

引导代码的作用:就是让硬盘具备可以引导的功能。如果引导代码丢失,分区表还在,那么这个硬盘作为从盘所有分区数据都还在,只是这个硬盘自己不能够用来启动进系统了。如果要恢复引导代码,可以用DOS 下的命令:FDISK /MBR ;这个命令只是用来恢复引导代码,不会引起分区改变,丢失数据。另外,也可以用工具软件,比如DISKGENWINHEX 等。

 

但分区表如果丢失,后果就是整个硬盘一个分区没有,就好象刚买来一个新硬盘没有分过区一样。是很多病毒喜欢破坏的区域。

 

EBR ,也叫做扩展MBRExtended MBR )。因为主引导记录MBR 最多只能描述4 个分区项,如果想要在一个硬盘上分多于4 个区,就要采用扩展MBR 的办法。

 

MBR EBR 是分区产生的。

比如MBREBR 各都占用63 个扇区,C 盘占用1435329 个扇区……那么数据结构如下表:

63

1435329

63

1435329

63

1253889

MBR

C

EBR

D

EBR

E

 

 

扩展分区

而每一个分区又由DBRFAT1FAT2DIRDATA5 部分组成:比如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 表示非活动分区。

234 字节

本分区的起始磁头号、扇区号、柱面号

5 字节

分区类型符:

00H—— 表示该分区未用

06H——FAT16 基本分区

0BH——FAT32 基本分区

05H—— 扩展分区

07H——NTFS 分区

0FH—— LBA 模式)扩展分区

83H—— Linux 分区

678 字节

本分区的结束磁头号、扇区号、柱面号

9101112 字节

本分区之前已用了的扇区数

13141516 字节

本分区的总扇区数

此硬盘的第一分区表(即MBR )分析如下:

第一个分区表项(C 盘)

1 字节80 :表示此分区为活动分区;

5 字节0B :表示分区类型为Fat32

9101112 字节 系统隐含扇区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

13141516 字节本分区总扇区数( 当然,这也就是C 盘的大小)C1 E6 15 00 ,同样,实际的十六进制数也要反过来才对,也就是00 15 E6 C1 ,将它转换成十六进制数是1435329 。给你出个题,你知道D 盘的EBR 在哪个扇区吗?我们一起来算一下,还记得前面数据结构那个表吗?C 盘后面不就是D 盘的EBR 吗?DEBR 的第一个扇区=MBR+C 盘的大小,也就是 63+1435329=1435392
我们来看看对不对,单击工具栏上的“转到扇区”按钮,出现一个“转到扇区”对话框

 

然后输入1435392 ,再点“确定”,就到了1435392 扇区了(你可以使用它再转回到0 扇区)

 

这个就是D 盘的EBR ,也就是D 盘的分区表了,怎么知道的呢?因为MBREBR 的结构是完全一样的,都是占用了63 个扇区,但只用了第一个扇区,其余62 个扇区填零不用。第一个扇区前446 个字节都为引导代码,后64 个字节为分区表,最后2 个字节为55AA 结束标志。因为EBR 不是活动分区,不需要引导代码,所以前446 个字节为零。

 

还有另一种方法直接找到D 盘的EBR ,单击“访问”下拉按钮——“分区二”——“分区表”,直接就到1435392 扇区.

这样,分区表中的第一个分区表项共十六个字节分析完毕,下面我们再来看看第二个分区表项(扩展分区)。
1 字节00 :表示非活动分区
5 字节05 :表示扩展分区
9101112 字节00 E7 15 00 :本分区之前的扇区数(扩展分区前面也就是MBRC 盘,好像我们前面算过这个数?)同样,先将它反过来,就是00 15 E7 00 ,再转为十进制是1435392 ,看来我们前面真的算过这个数。

 

13141516 字节40 09 29 00 :本分区的总扇区数。也就是扩展分区的总扇区数。转为十进制应该是2689344 。想一想,用这个数加上前面的1435392 ,不正好是整个硬盘的总扇区数4124736 吗?

这样,如果分区表被破坏,我们只要把这些数值都计算出来并填上,分区表不就恢复了?那么,这里我们为什么不分析第234 字节(本分区的起始磁头号、扇区号、柱面号)和第678 字节(本分区的结束磁头号、扇区号、柱面号)呢?这是因为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 分区
9101112 字节3F 00 00 00 :本分区之前已用了的扇区数,也就是EBR 的数目,63 个。
13141516 字节C1 E6 15 00 :本分区的总扇区数,也就是D 盘的扇区数,先反过来排列就是00 15 E6 C1 ,转为十进制就是1435329

 

第二个分区表项(D 盘后面的):
1 个字节00 :表示非活动分区
5 个字节05 :表示扩展分区
9101112 字节00 E7 15 00 :本分区之前已用了的扇区数,也就是D 盘的EBRD 盘总共的大小, 63+1435329=1435392

 

13141516 字节40 22 13 00 :本分区的总扇区数,1253952, 也就是E 盘的大小再加上一个EBR 的数目。
单击“访问”下拉按钮——“分区三”——“分区表”,直接就到2870784 扇区,即E
盘的分区表EBR 。因为E 盘后面没有分区了,所以没有第二个分区表项。这里我们就不再研究了,有兴趣的话可以自己多备一块硬盘作从盘,然后自己分分区研究研究。

通过以上的研究我们总结一下,MBR 在定义分区的时候,将多余的容量定义为扩展分区,指定该扩展分区的起止位置,根据起始位置指向硬盘的某一个扇区,作为下一个分区表项,接着在该扇区继续定义分区,如果只有一个分区,就定义该分区,然后结束;如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区描述扇区,在该分区上按照上述原则继续定义分区,直至分区定义结束。这些用来描述分区的扇区形成一个“分区链”,通过这个分区链,就可以描述所有的分区。系统在启动时按照分区链的连接顺序查找分区,直至找出所有分区。这个链显然是个开链结构,如果形成一个环,系统本身并不会去判断它,它只是按照这个链忠实的查找分区,而不进行任何额外的检测与处理。所谓硬盘逻辑锁,就是让分区链形成一个环,这样系统在启动时就在分区表内循环,表现为系统无法引导,就是从软盘启动,也不能进入硬盘。明白了其结构原理,解决这个问题就简单了,目前有很多种方法解决这个问题,后面我们还会讲到。系统就是利用这种方法使一个硬盘分区后看起来象多个硬盘。系统能够找到C 盘以外的其他逻辑盘的唯一办法就是,沿着EBR 所描述的分区链查找分区。

 

其实,通常情况下EBR 是不会被破坏的,或者破坏的几率极低极低,通常情况下,都是只有MBR 被破坏,那么这种情况下,我们只要把MBR 的分区表64 个字节复原,其他的分区顺着分区表所提供的链自然而然就出来了。那么,如何才能将分区表复原呢?这就要通过计算结合Winhex 强大的功能来实现了。

 

下面我们就来模仿分区表被病毒破坏的情况,将MBR 全部填零。我们首先将MBR 所在的扇区选中。鼠标指向第一个字节,单击右键,选择“选块开始”

然后鼠标指向MBR 的最后一个字节,单击右键,选择“选块结尾”

然后我们在选区内部单击鼠标右键,选择“编辑”

这样就有出来一个菜单

然后我们选“填充选块”,这样就出来一个填充选块对话框

在“用十六进制填充”的输入框中输入“00 ”,再点“确定”

这样MBR 所在扇区全部被我们填充为“00

如果想取消选区,那就用鼠标拖动随便选中一块区域,那么原来的选区就会取消。注意,如果扇区数据被修改了而没有存盘就会变为别的颜色。

 

修改了扇区,这时候还没有存盘生效,如果你想存盘生效的话,就选择“文件”菜单“保存扇区”命令。

这时候就会出现一个提示,如果你不想存盘了就点取消,如果想存盘,就点确定,再点是。

好,这样就存盘了,扇区被修改的数据又变为黑色。

 

这样我们就把分区表给删除了,这时候必须重新启动才能生效,如果你打开我的电脑,会发现三个分区(F G H )还在那里,并且里面的数据还能正常使用。

现在,我们关闭所有程序将电脑重新启动……

 

经过不长时间的等待,电脑启动起来了,我们打开我的电脑看看,发现F G H 三个分区不见了。

再打开Winhex 发现MBR 全部为零了,下面我们就着手开始手工恢复分区表

首先恢复引导代码,这最简单了,只要用Winhex 到别的系统盘把引导代码复制过来就行了。我现在的机器上不是挂着两个硬盘吗?一个迈拓2G ,一个西数40G ,西数40G 是我的系统盘,那就从这个盘上复制就行了。

单击“磁盘编辑器”按钮

出现“编辑磁盘”对话框

选择“HD0 WDC WD400EB---00CPF0, 点“确定”

这样我们就把系统盘的分区表给打开了,注意,现在我们是打开了两个窗口,当前的窗口是“硬盘0 ”,在标题栏上有显示。另外,打开窗口菜单也能看出来,当前窗口被打上一个勾,如果想切换回原来的窗口,就点击“硬盘1 ”。

首先选中系统盘的引导代码

然后在选区中单击鼠标右键,选“编辑”

又出来一个菜单,然后我们选“复制选块”——“正常”

然后我们切换回硬盘1 窗口,在零扇区的第一个字节处单击鼠标右键,选“编辑”

然后选“剪贴板数据”——“写入……”

出现一个窗口提示,点“确定”

这样,我们就把一个正常系统盘上的引导代码复制过来了。

下面,我们就开始恢复分区表(共64 个字节,分为4 个分区表项,每个分区表项占用16 个字节,一般只使用前两个分区表项),我们首先来恢复第一个分区标项(也就是用来描述C 盘的)。

首先,在第1 个字节处(0 扇区倒数第五行,倒数第二个字节)填上分区引导标志,因为C 盘是活动分区,所以填上80

 

接着是第234 字节(本分区起始磁头号、扇区号、柱面号),填上:01 01 00
5 字节是分区类型符,因为原先C 盘是Fat32 格式,所以填上:0B 。那么,如果你不知道C 盘是什么格式怎么办呢?你会说问问客户呀,那么如果他也不知道呢?别着急,后面在说恢复DBR 的时候我会教你怎么分辨分区的格式。

678 字节是本分区的结束磁头号、扇区号、柱面号,这怎么知道呢?别着急,现在的磁盘都是按照LBA 方式寻址,并不按照C/H/S( 及柱面、磁头、扇区) 方式寻址,所以这个地方你填些什么一般关系不大,但是我要告诉你有一个通用的填法,那就是:FE FF FF

 

9101112 字节,本分区之前已用了的扇区数,也就是MBR 所占用的扇区数,那不是63 吗?对,但是要将63 转为十六进制数,再反过来倒着填写上。还记得怎么用计算器吗?将63 转为十六进制数是3F ,不够四个字节前面加零,也就是00 00 00 3F ,再将此数从右向左依次序反过来就是3F 00 00 00

13141516 字节是本分区的总扇区数,也就是C 盘的大小,这就要通过稍微一点点计算来得到了。因为C 盘是从第63 个扇区开始,而C 盘后面紧接着的是EBR ,所以用EBR 所在的第一个扇区数减去63 就是C 盘的大小。那么如何才能找到EBR 所在的第一个扇区呢?我们前面说过,EBR 的结构和MBR 是一样的,所以,EBR 的结束标志也一定是55AA ,那么,只要我们找到这个结束标志,再看看这个扇区是不是EBR 不就行了?

单击“搜索”——“查找十六进制数值……”,然后出来一个对话框

在文本框中输入“55AA ”,搜索框中选“全部”,然后选中“条件”,把偏移量设置为“512=510 ”。

再单击“确定”。画面如下:

首先找到第一个“55AA ”,我们看到,个扇区在第63 个扇区上,并不是我们要找的EBR ,再按F3 继续查找

又找到好几个扇区,都不是,那么下面这个扇区是不是?

前面我们说过,EBR 的结构和MBR 的结构是一样的,所以在倒数第五行倒数第二个字节应该是00 01 ,并且前446 个字节应该是0 ,显然这也不是EBR ,继续按F3 查找……终于找到了真正的EBR ,在1435392 扇区。

小技巧:现在的硬盘都比较大,要逐个扇区的查找55AA 确实太慢了,那么有没有办法快点呢?有,那就是先问问客户C 盘大概有多大,大多数客户还是知道的,比如他说C 盘大概有10G ,那么你就不要从头开始找了,因为那实在太慢了。10G 大概是2000 万个扇区,那么你可以用转到扇区命令直接到1900 万扇区,从那个地方再开始找不就省事多了。

 

1435392 减去63 ,得到1435329 ,再转为16 进制,就是15E6C1 ,将他倒转过来就是C1E61500 ,这就是C 盘的大小。这样,第一个分区表项填写完毕,我们保存一下,再接着填写第二个分区表项。

第二个分区表第1 个字节:因为是非活动分区,所以写00
234 字节,填写01 01 00 (通用的)
5 字节:因为是扩展分区,所以填写0F
678 字节:填写FE FF FF( 通用)
9101112 字节是本分区之前已用了的扇区数,应该就是C 盘大小加63 ,也就是1435392 ,前面刚计算出来的,转为十六进制数再反过来就是00 E7 15 00

13141516 字节是本分区的总扇区数,也就是扩展分区的总扇区数,也就是用整个硬盘的大小减去C 盘的大小再减去63 ,即4124736-1435329-63=2689344 ,转为十六进制就是290940 ,反过来就是40092900

这样,第二个分区表项就填写完了。

 

不要忘了把最后的结束标志55AA 填上,这样,MBR 就全恢复完了,最后,保存,再重新启动……

启动完毕,迫不及待的打开我的电脑,发现三个分区全部又回来了,并且里面的数据完好无损。

再右击“我的电脑”,选“管理”

出现一个对话框,选“磁盘管理”,在右边可以看到磁盘一的三个分区(Fat32Fat16Ntfs) 全部都回来了,至此,手工恢复分区表顺利完成。

 

手工恢复数据恢复成功率比较高,而且比较有趣味和挑战性,能找回许多傻瓜似的软件所找不回来的文件,但是要求工程师一定要有耐性,而且一定要保持清醒,清楚自己正在操作什么,操作完了会有什么后果,能不能退回到上一步状态。特别是对一些破坏性操作,一定要考虑周到,只要条件允许,就一定要在操作之前进行备份,否则会造成“血”的教训,切记!!!


下面我们会说到手工恢复DBRFAT (此教程被收录在付费教程中),这些比手工恢复分区表还要复杂,更需要大量的计算。再说完了使用Winhex 手工恢复数据之后,我们会说到一些数据恢复软件,结合数据恢复软件会使数据恢复成功率大大提高,但有一些软件在扫描过程中会对原盘破坏数据,在使用中一定要谨慎!!!而且同一个软件,一个新手用和一个老手用数据恢复成功率绝对是不一样的,这些软件我们会免费赠送,绝对不会让你学习了资料却找不到软件的。

顶一下(24) 踩一下(8)

 

你可能感兴趣的:(数据结构,c,活动,扩展,工具,磁盘)