最新消息:

硬盘工具“winhex”介绍及数据恢复知识

数据恢复 大步 1265浏览 0评论

Ps:winhex是数据恢复中最常用的,要是用的好,可以混口饭吃了,n久没去无忧论坛了,一去就看到了井底蛙前辈去世的消息,真的是挺意外的,数据恢复区经常看到他的帖子,时常帮人恢复数据,唉,一路走好吧!

原文链接:http://bbs.wuyou.com/viewthread.php?tid=181273&extra=page%3D8
WinHex是一个专门用来对付各种日常紧急情况的小工具。它 可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起来的文件和数据。得到 ZDNetSoftwareLibrary 五星级最高评价,拥有强大的系统效用。

具体来说,WinHex 是一款以通用的 16 进制编辑器为核心,专门用来对付计算机取证、数据恢复、低级数据处理、以及 IT 安全性、各种日常紧急情况的高级工具: 用来检查和修复各种文件、恢复删除文件、硬盘损坏、数码相机卡损坏造成的数据丢失等。功能包括 (依照授权类型):

- 硬盘, 软盘, CD-ROM 和 DVD, ZIP, Smart Media, Compact Flash, 等磁盘编辑器...

- 支持 FAT, NTFS, Ext2/3, ReiserFS, Reiser4, UFS, CDFS, UDF 文件系统

- 支持对磁盘阵列 RAID 系统和动态磁盘的重组、分析和数据恢复

- 多种数据恢复技术

- 可分析 RAW 格式原始数据镜像文件中的完整目录结构,支持分段保存的镜像文件

- 数据解释器, 已知 20 种数据类型

- 使用模板编辑数据结构 (例如: 修复分区表/引导扇区)

- 连接和分割、以奇数偶数字节或字的方式合并、分解文件

- 分析和比较文件

- 搜索和替换功能尤其灵活

- 磁盘克隆 (可在 DOS 环境下使用 X-Ways Replica)

- 驱动器镜像和备份 (可选压缩或分割成 650 MB 的档案)

- 程序接口 (API) 和脚本

- 256 位 AES 加密, 校验和, CRC32, 哈希算法 (MD5, SHA-1, ...)

- 数据擦除功能,可彻底清除存储介质中残留数据

- 可导入剪贴板所有格式数据, 包括 ASCII、16 进制数据

- 可进行 2 进制、16 进制 ASCII, Intel 16 进制, 和 Motorola S 转换

- 字符集: ANSI ASCII, IBM ASCII, EBCDIC, (Unicode)

- 立即窗口切换、打印、生成随机数字

- 支持打开大于 4 GB 的文件,非常快速,容易使用。

- 广泛的联机帮助 如何使用winhex进行数据恢复   进行数据恢复的有关知识准备:
数据恢复分类:硬恢复和软恢复。所谓硬恢复就是硬盘出现物理性损伤,比如有盘体坏道、电路板芯片烧毁、盘体异响,等故障,由此所导致的普通用户不容易 取出里面数据,那么我们将它修好,同时又保留里面的数据或后来恢复里面的数据,这些都叫数据恢复,只不过这些故障有容易的和困难的之分;所谓软恢复,就是 硬盘本身没有物理损伤,而是由于人为或者病毒破坏所造成的数据丢失(比如误格式化,误分区),那么这样的数据恢复就叫软恢复。因为硬恢复还需要购买一些工 具设备(比如pc3000,电烙铁,各种芯片、电路板),而且还需要懂一点点电路基础,我们主要使用软恢复。

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

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

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,安装完了就可以启动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强大的功能来实现了。

下面我们就来模仿分区表被病毒破坏的情况,将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。

接着是第2、3、4字节(本分区起始磁头号、扇区号、柱面号),填上:01 01 00。

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

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

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

第13、14、15、16字节是本分区的总扇区数,也就是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盘大概有10个G,那么你就不要从头开始找了,因为那实在太慢了。10个G大概是2000万个扇区,那么你可以用转到扇区命令直接到 1900万扇区,从那个地方再开始找不就省事多了。

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

第二个分区表第1个字节:因为是非活动分区,所以写00

第2、3、4字节,填写01 01 00(通用的)

第5字节:因为是扩展分区,所以填写0F

第6、7、8字节:填写FE FF FF(通用)

第9、10、11、12字节是本分区之前已用了的扇区数,应该就是C盘大小加63,也就是1435392,前面刚计算出来的,转为十六进制数再反过来就是00 E7 15 00

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

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

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

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

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

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

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

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

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

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

关于数码与码制:

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

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

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

 

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

 

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

187462334506734839

Winhex是使用最多的一款工具软件,是在Windows下运行的十六进制编辑软件,此软件功能非常强大,有完善的分 区管理功能和文件管理功能,能自动分析分区链和文件簇链,能对硬盘进行不同方式不同程度的备份,甚至克隆整个硬盘;它能够编辑任何一种文件类型的二进制内 容(用十六进制显示)其磁盘编辑器可以编辑物理磁盘或逻辑磁盘的任意扇区,是手工恢复数据的首选工具软件。

首先要安装Winhex,安装完了就可以启动winhex了,启动画面如下:首先出现的是启动中心对话框。

这里我们要对磁盘进行操作,就选择“打开磁盘”,出现“编辑磁盘”对话框:

在这个对话框里,我们可以选择对单个分区打开,也可以对整个硬盘打开,HD0是我现在正用的西部数据40G系统盘,HD1是我们要分析的硬盘,迈拓2G。这里我们就选择打开HD1整个硬盘,再点确定.然后我们就看到了Winhex的整个工作界面。

最 上面的是菜单栏和工具栏,下面最大的窗口是工作区,现在看到的是硬盘的第一个扇区的内容,以十六进制进行显示,并在右 边显示相应的ASCII码,右边是详细资源面板,分为五个部分:状态、容量、当前位置、窗口情况和剪贴板情况。这些情况对把握整个硬盘的情况非常有帮助。 另外,在其上单击鼠标右键,可以将详细资源面板与窗口对换位置,或关闭资源面板。(如果关闭了资源面板可以通过“察看”菜单——“显示”命令——“详细资 源面板”来打开)。

最下面一栏是非常有用的辅助信息,如当前扇区/总扇区数目……等

向下拉拉滚动条,可以看到一个灰色的横杠,每到一个横杠为一个扇区,一个扇区共512字节,每两个数字为一个字节,比如00。

下面我们来分析一下MBR,因为前面我们说过,前446个字节为引导代码,对我们来说没有意义,这里我们只分析分区表中的64个字节。

分区表64个字节,一共可以描述4个分区表项,每一个分区表项可以描述一个主分区或一个扩展分区(比如上面的分区表,第一个分区表项描述主分区C盘,第二个分区表项描述扩展分区,第三第四个分区表项填零未用)

每一个分区表项各占16个字节,各字节含义如下:(H表示16进制)

6597224797795645350

此硬盘的第一分区表(即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强大的功能来实现了。

下面我们就来模仿分区表被病毒破坏的情况,将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。

接着是第2、3、4字节(本分区起始磁头号、扇区号、柱面号),填上:01 01 00。
第5字节是分区类型符,因为原先C盘是Fat32格式,所以填上:0B。那么,如果你不知道C盘是什么格式怎么办呢?你会说问问客户呀,那么如果他也不知道呢?别着急,后面在说恢复DBR的时候我会教你怎么分辨分区的格式。
第6、7、8字节是本分区的结束磁头号、扇区号、柱面号,这怎么知道呢?别着急,现在的磁盘都是按照LBA方式寻址,并不按照C/H/S(及柱面、磁头、扇区)方式寻址,所以这个地方你填些什么一般关系不大,但是我要告诉你有一个通用的填法,那就是:FE FF FF。

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

第13、14、15、16字节是本分区的总扇区数,也就是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盘大概有10个G,那么你就不要从头开始找了,因为那实在太慢了。10个G大概是2000万个扇区,那么你可以用转到扇区命令直接到1900万 扇区,从那个地方再开始找不就省事多了。

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

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

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

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

不要忘了把最后的结束标志55AA填上,这样,MBR就全恢复完了,最后,保存,再重新启动……
启动完毕,迫不及待的打开我的电脑,发现三个分区全部又回来了,并且里面的数据完好无损。

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

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

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

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

一、Winhex的使用
用Winhex打开要修改的文件,显示如下界面:

1032731689568522799

 任何一个存储在计算机上的文件都可以认为是由最基本的0和1组成的,Winhex便是将这些文件以二进制形式打开。不过显示的时候是十六进制,一位十六进制相当于四位二进制,两位十六进制相当于八位二进制即一个字节,每个字节即对应一个地址。
左边那一列是行标,上边那一行是列标,行标和列标便组成了地址。如6BFA3003这个地址,其行标便是6BFA3000,列标为3。
想要修改数值,直接键盘输入即可。
一个基本常识:对于有多位的十六进制数值而言,存储方式是低位在前,高位在后。如6e731f这么个值,存储方式便是1f 73 6e。
既然显示十六进制,那么自然存在一个十六进制和日常使用的十进制转化的问题。通常可以靠Windows的计算器来完成,点击Winhex工具栏的图标即可打开。在计算器的查看菜单里选择“科学型”,便有进制转换的功能。
其实Winhex自带的数据解释器也可以实现进制转换。(看不到数据解释器的,单击视图——显示——数据解释器)把光标定在某一地址,数据解释器里便能显 示对应的十进制数值。在数据解释器里输入十进制值然后按回车,则那个地址的数值就会被改写成对应的十六进制。在“选项——数据解释器”里还能对数据解释器 的显示内容作设置,比如翻译无符号数、浮点数等,这个有兴趣的自己试试。

地址定位
靠行标和列标来定位地址显然是愚蠢废力的。Winhex的工具栏上有个图标,点击显示如下界面:

3070329045976966272

此时直接在“新位置”里输入地址便可完成定位。
也可以定位相对地址。比如此时位置在某ATK首地址,要往上移1000h到达MOV首地址,那么在“新位置”里输入1000,“相对于”选择“当前位置(P)(返回至)”就行了。
同理,到了MOV首地址后又要往下移960h到达一方地址,则可以在“新位置”里输入960,“相对于”选择“当前位置(C)”。
“位置”菜单里还有个很实用的功能:标记位置和转到标记,快捷键分别是Ctri+I和Ctrl+K。这个功能就不用多解释了吧,我是经常用的。

定义选块
定义选块主要是用来导出特定数据或缩小搜索范围,定义完成之后可以在“位置”菜单里快速定位到选块头和选块尾。
这个操作很简单。在选块头右键点击,选择“选块开始”,选块尾右键点击,选择“选块结尾”就完成了。

1549801221785996729

2626443007704256834

搜索

90634942517960420

 这个也很直观。搜索——查找十六进制数值,输入要查找的串即可,注意中间不要有空格。可以定义向上向下还是全面搜索,之前如果定义了选块可以选择仅在选块中搜索。其它几个选项建议不要动。找到后如果不是自己想找的目标,可以按F3继续搜索。

数据导出和导入
这个其实就是备份和还原的问题了。不过现在已经没有做txt补丁的必要了,备份成txt这一步骤也就多余了。
导出:首先把要备份的数据定义成选块,然后在选块中任意位置右键点击,选择“编辑——复制区块——置入新文件”即可。

2570429487338841127

导入:把备份数据定义选位,(如果是全文件那就直接Ctrl+A),然后右键右击,选择“编辑——复制区块——十六进制数值”;再定位到要还原的数据的首地址,右键点击,选择“编辑——剪贴版数据——写入”即可。注意是“写入”不是“粘贴”。

1351361363204987002

2617435808449521934

文件扩容
改MOT、BGM的时候有可能需要在文件尾扩容,方法便是在文件尾右键点击,选择“编辑——粘贴零字节”,输入想扩容的大小即可

2708633700903773946

 不过那个2G多的linkdata.bin用这种办法扩容很耗时间。可以换个方法,点击“文件”菜单,新建一个合适大小(一般是所需扩容大小+1)的文件,然后把这个文件的数据复制后写入整个文件的尾地址,这也达到了扩容目的,而且处理速度很快。

基本上需要用到的Winhex操作就这么些。最后,改完了别忘记保存。

这 类高级工具的使用,是要紧密结合人的技术能力来实现数据恢复的,一个对硬盘数据结构不了解的人,是用不好Winhex的,充其量也就是靠winhex的 自动功能,来恢复一些简单的数据丢失,关键之处还是人对硬盘数据结构的了解,只有深入了解了硬盘数据组织结构,加上好的工具软件,才能做到好的恢复效果。

转载请注明:大步's Blog » 硬盘工具“winhex”介绍及数据恢复知识

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
SiteMap