一、概述
我计划使用磁盘样本图像进行MBR和VBR的恢复练习。在恢复后,我将练习查找FAT和NTFS的数据区,并了解其结构。
Ⅱ. 磁盘实操 - MBR 和 VBR 恢复
我计划使用 HxD 软件,利用 VBR 备份,尝试通过 MBR 和 VBR 恢复磁盘镜像。


通过这两张图片,我们可以看到MBR和VBR已经损坏。通常,第一个扇区包含MBR信息。我们可以看到,由512字节组成的MBR的最后一个分区相关信息已经丢失。本次恢复练习将首先找到VBR的备份扇区。其次,确定VBR中该分区是NTFS还是FAT。然后,计算出该分区的总扇区大小,并通过计算确定原始VBR的位置。最后,将备份的VBR扇区复制到原始VBR的位置,并根据相关信息恢复MBR的分区信息。整个过程将按照上述步骤进行。
查找 VBR 备份扇区
查找 VBR 的备份区域,有多种方法。其中,我将介绍一种通过“Signature”查找的方法。在 HxD 中搜索十六进制的 55 AA

呈现的结果如下。 逐个查找搜索结果,

因此,最后的2个字节是“55 AA”,这正是签名。 重要的是记住,这表示16进制的“55 AA”是签名。 我们可以通过观察红色部分来确认这是NTFS格式,如果您查阅相关的博客,相信您能更好地理解NTFS VBR的结构。
恢复 NTFS 动态块分配 (VBR)
对于NTFS,通常情况下,备份扇区是NTFS分区的最后一个扇区。因此,如果能够从该备份扇区获取分区扇区的大小,就可以确定原始备份扇区的位置。

从这个结构来看,我们可以看到,Total Sectors 的信息占据了 8 字节,具体来说,是从 0x20 处开始,持续到 0x2F 处,总共 8 字节。

因此,根据这张照片,A67FF代表该分区的总扇区数,计算结果显示为“681,983”。 鉴于当前备份扇区的位置是“682,111”,我们可以从这个数值中减去总扇区数,得到“128”,这正是原始VBR的起始扇区。


只需将备份的 VBR 复制到指定位置(例如,第 128 个扇区),然后保存即可。
恢复 NTFS 分区 MBR
现在,我们将使用这些值来恢复 MBR。
根据之前的帖子,MBR的446字节到510字节之间,每个分区的信息以16字节为单位存储。我们将根据MBR的第一个16字节,将所需的信息分别填入。实际上,除了16字节到1字节、4字节、8~11字节、12~16字节之外,其他部分不需要,因此只会在这些部分重新输入信息。具体来说,我们将将1字节的启动标志设置为80,并将4字节的文件系统类型设置为表示NTFS的07。对于8~11字节的分区起始地址,我们将使用128个扇区转换为十六进制的80。最后,对于12~16字节,我们将使用分区的大小A67FF。
* 务必注意:虽然现在我们称之为“小安迪安”,但正式的书写方式是“大安迪安”。

通过这种方式进行导入和存储,然后使用 FTK Imager 验证是否能够成功恢复,

我们可以看到这样的恢复效果。那么,FAT的处理方式也应该类似。
FAT 恢复过程

首先,找到备份的 VBR 文件。然后,将备份的 VBR 文件复制并粘贴到“682,112”位置。

之后,再次尝试恢复MBR,只需输入启动标志 80、类型 0B 或 0C,以及将启动地址“682,112”转换为 A6880,并输入扇区大小即可。

来源:hec-ker.tistory.com / 参见以下链接
根据这个结构,我们可以计算出,分区的大小为 0x20 加上 4 字节,即 A6800。现在,我们将这个值输入到 MBR 中。

可以这样输入。现在,保存后,再次使用 FTK Imager 检查,

我们可以清楚地看到如此完整的状态。
Ⅲ. 磁盘实训 - 查找数据区域
首先,关于如何找到 FAT32 系统的 DataArea,我曾在之前的帖子中简单提及,但 FAT32 的结构是 VBR - 预留区域 - FAT1。 & FAT2 - 会出现 MFT。那么,在 VBR 的起始扇区,需要预留空间用于 FAT1。 & 如果增加 FAT2 扇区的尺寸,是否会显示 Data Area 的位置?

计算结果显示,预留区域的扇区数量为 0x0E~F,即 14 个。FAT 扇区的尺寸为 0x24~7,因此为 16 个。然而,由于存在 FAT1 和 FAT2,因此需要乘以 2,得到 32 个。现在,将这些数值相加,得到 14 + 32 + 682,112 (FAT - VBR 的起始扇区) = 682,158。现在,让我们去这些扇区。

我成功地找到了经过恢复的 FAT32 区域。在 FAT32 格式中,数据区域的结构如下:

来源:dotaky99.tistory.com / 参见以下链接
目前的情况是这样的。需要注意的是,需要区分 SFN(短文件名)和 LFN(长文件名)两种结构。可以通过 12 字节的值来区分这两种结构。区分这两种结构的原因是,它们的结构不同。

来源:blog.forensicresearch.kr / 参见以下链接
基本上,文件被分成32字节,而SFN(小文件名)的结构如下,我们可以这样分析。然而,在处理LFN(长文件名)时,需要考虑的因素会增加。首先,如果32字节中的11字节的值是0x0F,那么这32字节就是LFN结构。然后,我们可以看到0x0位置的1字节,这表示这是一个序列号,这个值非常重要。

从这张图片可以看出,起始的 SeqNum 是 42。 此外,12 字节的值是 0x0F。 因此,从当前显示的图片开始,前两行是 LFN 结构。 同样,下面的 32 字节也是如此。 通过这些信息,我们可以得出结论:这是一个由两个 LFN 结构组成的“文件”。 我们可以通过 SeqNum 来识别这种结构。 在多个 LFN 结构的文件中,通常在最后 32 字节的 SeqNum 是 0x40 或经过计算得到的。 其他 LFN 结构的 SeqNum 从 0x01 开始递增。 因此,如果 SeqNum 大于 0x40,则可以推断出该文件由多个 LFN 结构组成。 例如,再次对 0x42 进行 XOR 运算,结果是 2,这表明该文件由两个 LFN 结构组成。

同样,在提供的示例图片中也可以看到,文件具有三个 LFN 结构。
对于NTFS,情况略有不同。NTFS的分区包含VBR、MFT和数据区。如果更详细地分析,会发现有一个VBR和一个MFT。实际上,MFT实际上是由多个MFT条目组成的。每个MFT条目对应一个文件或目录。MFT条目的签名,通过查看FILE的Header结构,可以进一步了解。

情况就是这样。
因此,我想介绍如何找到 MFT 记录。 我们可以参考 NTFS VBR 结构,我们需要知道的是,每个扇区包含多少字节,每个簇包含多少个扇区,以及 MFT 记录的起始簇位置。

在这个例子中,我们需要的值如下:首先,每个扇区占用 200 字节。每个簇包含 8 个扇区。因此,MFT 记录的起始簇位置是 6F00,这是一个十进制数,即 28,416。那么,实际 MFT 记录的起始扇区位置是多少呢?由于每个簇包含 8 个扇区,因此需要将起始簇位置乘以 8。结果是 227,328。目前,我们从 128 个扇区开始,加上 128,得到 227,456。现在,让我们移动到该扇区。

您可以看到 MFT 记录的签名。现在,让我们来查看这个 MFT 记录的“Header”部分,它由 48 字节组成。

首先,我们可以看到这两个值:第一个红色部分(24~27字节)对应的是实际使用的文件大小,而后面的28~31字节则对应的是MFT Entry中分配的大小,总共是1,024字节(通常情况下是这样)。MFT Entry对应一个文件或目录。然后,我们再看2个扇区(1,024字节)之后

我们可以再次看到 MFT Entry 结构开始出现。MFT Entry 为了提高可靠性,会将 Fixup 结构放在 MFT Entry Header 之后。MFT Entry 的 4~5 字节和 5~6 字节分别代表 Fixup 数组的位置和长度。以 16 进制表示为 30 和 3,因此从 48 字节开始,Fixup 值占用 2 字节,再加上之前计算的 3 字节和 2 字节的 Fixup 值,总共占用 6 字节的空间,用于存储由 Fixup 值替代的值。这个 Fixup 值用于检测扇区的内容是否异常更改,或者在解析数据之前发现错误。接下来是属性头和内容,这里推荐一篇相关的博客。
评论
我认为,这可能是本周的最后一篇帖子。虽然我目前还没有完全理解 NTFS 文件的 MFT 记录中的属性结构,但我仍然感到有些遗憾,但考虑到我正在学习如此庞大的内容,我希望未来能够继续学习和掌握。
登录