实验一 用Winhex恢复磁盘
- 实验目的
1、对于我们日常生活中常出现的,误删除、误分区或误格式化了磁盘,此实验目的是将磁盘中丢失的数据进行恢复。
2、学习和掌握使用Winhex各项操作的方法,动手实践。
3、学会创建磁盘、初始化磁盘和创建卷等操作,对磁盘的概念更清晰。
- 实验环境
操作环境:Windows10
实验工具:Winhex
- 实验原理
创建虚拟磁盘,手动删除MBR所在扇区的全部数据,然后新建一个虚拟磁盘,将新的磁盘的MBR扇区的数据复制到损坏的磁盘中,然后通过修改它分区表中的磁盘签名、文件系统类型、扇区起始位置、扇区大小等数据,来实现恢复已损坏的磁盘。
- 实验过程与分析
- 创建虚拟磁盘
如图1-1所示,在电脑上打开计算机管理,双击点入磁盘管理,在这里可以对我们电脑磁盘进行管理。
如图1-2所示,右键磁盘管理,选择创建VHD(即虚拟磁盘)。
如图1-3所示,指定磁盘位置,选择虚拟磁盘大小、磁盘格式为VHD、磁盘类型为动态扩展。
如图1-4所示,虚拟磁盘已经创建好了。
如图1-5所示,右键磁盘1,进行初始化磁盘。
如图1-6所示,选择磁盘1,使用MBR磁盘分区形式。
如图1-7所示,右键选择新建简单卷。
如图1-8、1-9、1-10、1-11、1-12所示,选择FAT32的卷,完成新建卷操作。
如图1-13、1-14所示,磁盘创建已经成功。在此电脑中可以看见新加卷(G:)。接着我放了一张照片进去。
- 用Winhex打开新建的磁盘并分析
如图2-1所示,在Winhex中选择并打开刚刚新建的磁盘。
如图2-2所示,为新建磁盘的数据,向下拉滚动条,可以看到一个灰色的横杠,每到一个横杠为一个扇区,一个扇区共512字节,每两个数字为一个字节,比如00,接下来分析一下它的数据结构。
如图2-3所示,为磁盘MBR扇区的数据结构。MBR又分为三个部分:第一部分为引导代码,占用446个字节;第二部分为分区表,占用了64字节;第三部分为55 AA,结束标志,占用了两个字节。后面我要说的用Winhex软件来恢复误删分区,主要就是恢复第二部分:分区表。
引导代码的作用:就是让磁盘具备可以引导的功能。如果引导代码丢失,分区表还在,那么这个磁盘作为从盘所有分区数据都还在,只是这个磁盘自己不能够用来启动系统了。
但如果分区表丢失,后果就是整个磁盘一个分区都没有,就好像刚买来一个新的硬盘,没有分过区一样。是很多病毒喜欢破坏的区域。
如图2-4所示,为分区表各个字节含义。其中文件类型可按下表:
表2-1
文件系统 | 文件类型 |
FAT16 | 06/0E |
FAT32 | 0B/0C |
NTFS | 07 |
ExFAT | 07 |
扩展分区 | 0F |
从图2-4和表2-1可以看出,0C就是FAT32的文件类型。
第13、14、15、16字节的是本分区的总扇区数(即分区1的扇区大小);而前面的四个字节是已用的扇区数(即扇区起始位置),用这两个扇区数相加,就正好是整个磁盘的总扇区数。
知道了这个信息,如果分区表被破坏,我们只要通过计算这些数值,就可以自己填上,将分区表恢复。
如图2-5所示接下来,我将磁盘1扇区0的数据都删除。
如图2-6、2-7所示,磁盘1已经损坏,显示没有初始化。已经无法打开,里面的图片也找不回来了。
- 新建磁盘并用Winhex恢复损坏磁盘
按照之前创建虚拟磁盘的方法,再创建一个4GB大小的文件系统为FAT32的磁盘,然后用Winhex打开新建磁盘。
如图3-1所示,这是新建的磁盘2。接下来我们将磁盘2的数据复制给损坏的磁盘1。(有一个需要注意的问题:要从后往前写入数据)
如图3-2所示,复制过来之后,进行保存,再去磁盘管理器里刷新一下。
如图3-3所示,磁盘1虽然已经初始化了,但是磁盘被分成了两部分,不是当初创建的那样。虽然打开磁盘后,图片已经恢复了,但是如果文件大小大于磁盘2的话,还是不能够恢复,所以我们需要修改它的分区表,让磁盘恢复原始状态。由于已经分析过分区表的组成,接下来进行MBR的恢复。(共64字节,分为4个分区,每个分区占用16字节,一般只使用前两个分区表项)
如图3-4所示,首先,在第一个字节处填上分区引导标志,若值为80表示活动分区,若值为00表示非活动分区。我这个是非活动分区。所以就是00。
接着是第2、3、4字节(本分区起始磁头号、扇区号、柱面号),磁盘1与磁盘2是一样的,所以我们不用改。
第5字节是分区类型符,因为我创建的是FAT32格式,所以是0C。
第6、7、8字节是本分区的结束磁头号、扇区号、柱面号。现在的磁盘都是按照LBA方式寻址,并不按照C/H/S(及柱面、磁头、扇区)方式寻址,所以这里填什么一般关系不大。
如图3-5所示,第9、10、11、12字节,本分区已用的扇区数,也就是MBR所占用的扇区数,在查看—显示—表单控制项中可以查看,为2048(或者在表单控制栏中点分区1,就可以看到下面显示了分区1的起始扇区)。然后打开查看—显示—数据解释器,在32bite中填写2048(为什么是在32bit中填写呢,因为4个字节,一个字节8bite,所以就是32bite),就可以转换成十六进制。或者用计算机转换得到的十六进制数为800,但是我们要将它反过来,变成00 08 00 00,不足的地方补0。
如图3-6所示,第13、14、15、16字节是本分区的总扇区数,winhex最下面有显示分区1扇区总数为20.971.520,我们要用20.971.520这个数减去前面本分区已用的扇区数(即分区1扇区起始位置2048),就可以得到本分区总扇区数为20.969.472,转为十六进制为13FF800,反过来就是00 F8 3F 01。
如图3-7所示,已经将分区表修改完成,接下来保存,去磁盘管理器刷新看看。
如图3-8所示,磁盘1已经恢复。但是为了实验的准确性,再试着恢复文件系统为NTFS的磁盘。
由于操作相同,所以步骤省略,最后使用NTFS格式的MBR也同样恢复了,所以本次用Winhex恢复磁盘的实验成功。
- 实验总结
通过这次实验,我对Winhex这个软件有了很大的认识,对我以后打ctf也很有帮助,这个软件以后应该也会经常使用。我会继续深入学习如何使用Winhex,多点动手实操。另外,我学会了如何对损坏的磁盘进行恢复,对MBR的结构有了一定的了解,也学习到了磁盘的一些知识。
这次实验是在Windows操作系统下完成的,可以再尝试一下在Linux操作系统下对MBR进行模拟损坏并修复。
还有一点需要注意的是,做这个实验时要关闭电脑的防火墙和实时扫描工具,还有杀毒软件,不然一打开Winhex就会报错,并且Winhex会被删掉。