第1页共14页WinHex数据恢复教程笔记WinHex是在Windows下运行的十六进制编辑软件,此软件功能非常强大。有完善的分区管理功能和文件管理功能,能自动分析分区链和文件簇链,能对硬盘进行不同方式不同程度的备份,甚至克隆整个硬盘;它能够编辑任何一种文件类型的二进制内容(用十六进制显示)其磁盘编辑器可以编辑物理磁盘或逻辑磁盘的任意扇区,是手工恢复数据的首选工具软件。数据恢复的前提:数据不能被二次破坏、覆盖!数据恢复首选软件用十六进制编辑器:WinHexMBR、EBR是分区产生的。MBR主引导记录大小是固定的,位于整个硬盘的0柱面0磁道1扇区。共占用了63个扇区,实际只使用了1个扇区,即硬盘第一扇区中的512字节。DBR是分区引导扇区,是由FORMAT高级格式化命令写到该扇区的内容,DBR是由硬盘的MBR装载的程序段。DBR装入内存后,即开始执行该引导程序段,其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区才会被MBR装的DBR入内存运行第2页共14页FAT16文件跳转指令EB3C90FAT16没有备份DBRFAT32文件跳转指令EB5890DBR备份在第6扇区有第一扇区的备份。FAT表32扇区NTFS文件跳转指令EB5290DBR备份在最后一个扇区ntfs格式没有FAT表。04H分区系统标志当该值为00H时,表示此分区为不可识别的系统;为04H时该分区为FAT16分区;为05H或0FH该分区为扩展分区;为0B时该分区为FAT32分区;F8HFFHFFH0FH开始的FAT表,(对于FAT16是以F8HFFH开始的),每个FAT项占32位(4个字节),FAT16的每个FAT项占16位(2个字节),也就是说FAT和簇是一一对应的关系,对于FAT32的FAT来说每4个字节为1个FAT项.(对于FAT16的FAT每2个字节为一个FAT项)第3页共14页512字节的MBR主引导记录又分为三部分:1.主引导扇区里的主引导程序代码(bootloader),占446个字节;2.硬盘分区表DPT(DiskPartitiontable),占64字节;主分区表项1占16字节,447-461每一个分区表项各占16个字节.硬盘中分区有多少以及每一分区的大小都记在其中。3.硬盘55AA有效结束标志magicnumber,占两个字节。MBR被清零的话,硬盘将不能引导。如果0号扇区被清零,硬盘分区将不被系统识别。提示未初始化。备份MBR只要备份前512字节就可以了,包含分区表。用WinHex软件来恢复误分区,主要就是恢复第二部分:分区表。主引导程序代码(bootloader)的作用:就是让硬盘具备可以引导的功能。如果引导代码丢失,分区表还在,那么这个硬盘作为从盘所有分区数据都还在,只是这个硬盘自第4页共14页己不能够用来启动进系统了。如果要恢复引导代码,可以用DOS下的命令:FDISK/MBR;这个命令只是用来恢复引导代码,不会引起分区改变,丢失数据。也可以用工具软件,比如:DiskGenius、WinHex等。EBR,也叫做扩展MBR(ExtendedMBR)。占63个扇区。因为主引导记录MBR最多只能描述4个分区项,如果一个硬盘上分多于4个区,就用EBR.EBR的结构和MBR的结构是一样的,所以在倒数第五行倒数第二个字节应该是0001,并且前446个字节应该是0。DBR的备份:分区格式是FAT32的话,备份在分区的6扇区。NTFS分区格式的话,在分区的最后一个扇区。而每一个分区又由DBR、FAT1、FAT2、DIR、DATA5部分组成。第5页共14页分区表:分区表64个字节,一共描述4个分区表项,每个分区表项可以描述一个主分区或一个扩展分区.(比如上面的分区表,第一个分区表项描述主分区C盘,第二个分区表项描述扩展分区,第三第四个分区表项填零未用)每一个分区表项各占16个字节。注意:真正的隐含扇区数应该反过来填写!第6页共14页主分区图:主分区表项1占16字节,447-461804102000715F5FF001000000010B80580激活标记表示活动分区41020007NTFS分区15F5FF分区的结束物理地址位置9-12字节0010000000001000=4096本分区之前已用了4096扇区13-16字节=C盘大小0010B805科学计算器16进制转换10进制,第7页共14页05B81000=95948800扇区*512=/1024/1024/1024=45.75G扩展分区表004BC1FF0F0EFFFF152DB8052C1F803400非活动分区4BC1FF0F(LBA模式)扩展分区0EFFFF9-12字节152DB80505B82D15=95956245扇区D盘起始扇区13-16字节2C1F8034扩展分区的总扇区数34801F2C=880811820扇区=420G第8页共14页D盘起始扇区95956245*512扇区=49129597440字节D盘分区表0077D8FF079CFCFFEB0A00000008000500A5C1FF050EFFFFE6140005460A802F0077D8FF079CFCFFEB0A000000000AEB=2795扇区0008000505000800=83888128*512=42950721536字节=40GD盘第9页共14页00A5C1FF05扩展分区0EFFFFE6140005=83891430460A802F=796920390E盘:880811820-83888128=796923692扇区=380G总扇区数:976773168第10页共14页硬盘的第一分区表(即MBR)各字节含义如下:(H表示16进制)字节位置内容及含义第1字节引导标志。若值为80H激活标记表示活动分区;若值为00H表示非活动分区。第2、3、4字节本分区的起始磁头号、扇区号、柱面号。填上:01或00。填写010100(通用的)第5字节分区类型符:00H——表示该分区未用06H——FAT16基本分区0BH——FAT32基本分区0C——大于8.4FAT32分区05H——扩展分区07H——NTFS分区0FH——(LBA模式)扩展分区83H——Linux分区第6、7、8字节本分区的结束磁头号、扇区号、柱面号。填上:FEFFFF(通用)或可以00,该分区的结束物理地址位置。第9、10、11、12字节9-12字节关键,系统隐含扇区。本分区之前已用了的扇区数,是十六进制数LBA=0到DBR之间的距离。真正的隐含扇区数应该反过来填写!第13、14、15、16字节本分区的总扇区数,就是C盘的大小。因为C盘是从第63个扇区开始,而C盘后面紧接着的是EBR,所以用EBR所在的第一个扇区数减去63就是C盘的大小。第11页共14页搜索EBR第12页共14页搜索文件夹MBR在定义分区的时候,将多余的容量定义为扩展分区,指定该扩展分区的起止位置,根据起始位置指向硬盘的某一个扇区,作为下一个分区表项,接着在该扇区继续定义分区,如果只有一个分区,就定义该分区,然后结束。如果不止一个分区,就定义一个基本分区和一个扩展分区,扩展分区再指向下一个分区描述扇区,在该分区上按照上述原则继续定义分区,直至分区定义结束。用来描述分区的扇区形成一个“分区链”,通过这个分区链,就可以描述所有的分区。系统在启动时按照分区链的连接顺序查找分区,直至找出所有分区。这个链显然是个开链结构,如果形成一个环,系统本身并不会去判断它,它只是按照这个链忠实的查找分区,而不进行任何额外的检测与处理。第13页共14页所谓硬盘逻辑锁,就是让分区链形成一个环,这样系统在启动时就在分区表内循环,表现为系统无法引导,就是从软盘启动,也不能进入硬盘。系统就是利用这种方法使一个硬盘分区后看起来象多个硬盘。系统能够找到C盘以外的其他逻辑盘的唯一办法就是,沿着EBR所描述的分区链查找分区。其实,通常情况下EBR是不会被破坏的,或者破坏的几率极低极低,通常情况下,都是只有MBR被破坏,那么这种情况下,我们只要把MBR的分区表64个字节复原,其他的分区顺着分区表所提供的链自然而然就出来了。第13、14、15、16字节是本分区的总扇区数,就是C盘的大小,需要通过计算得到。因为C盘是从第63个扇区开始,而C盘后面紧接着的是EBR,所以用EBR所在的第一个扇区数减去63就是C盘的大小。EBR的结构和MBR是一样的,所以,EBR的结束标志也一定是55AA,找到这个结束标志,再看看这个扇区是不是EBR不就行了?单击“搜索”—“查找十六进制数值……”,然后出来一个对话框在文本框中输入“55AA”,搜索框中选“全部”,然后选中“条件”,把偏移量设置为“512=510”。第14页共14页再单击“确定”。技巧:要逐个扇区的查找55AA确实太慢了,有没有办法快点的呢?有,就是先问问客户C盘大概有多大,大多数客户还是知道的,比如C盘大概有10个G,那么就不要从头开始找了,10个G大概是2000万个扇区,那么可以用转到扇区命令直接到1900万扇区,从那个地方再开始找不就省事多了。用1435392扇区减去63,得到1435329扇区,再转为16进制,就是15E6C1,将它倒转过来就是C1E61500,这就是C盘的大小。