WeSeong 登录
← 返回文章列表
磁盘

MBR、VBR 恢复、MFT 和数据区结构

MBR、VBR 恢复、MFT 和数据区结构

Ⅰ. 概述

我们将使用 DISK 样本图像练习恢复 MBR 和 VBR。恢复后,我们将练习在 FAT 和 NTFS 中查找数据区,并检查其结构。



Ⅱ. 磁盘练习 - MBR、VBR 恢复

我们将使用 HxD 中的 VBR 备份,使用示例 DISK 映像恢复 MBR 和 VBR。



在上面的两张图像中,您可以看到 MBR 和 VBR 已被损坏。通常,第 0 扇区包含 MBR 信息,您可以看到 MBR 中的最后一段与分区相关的信息(长 512 字节)已丢失。在本次恢复练习中,我们将首先定位 VBR 的备份扇区。其次,我们将区分 VBR 中的分区是否为 NTFS 或 FAT。第三,我们将计算 VBR 中分区的总扇区大小,并利用此信息确定原始 VBR 的位置。第四,我们将将备份的 VBR 扇区复制到原始 VBR 的位置并进行恢复,然后根据相关信息恢复 MBR 中的分区信息。我们将按照这个顺序进行。


  1. 查找 VBR 备份扇区

在 VBR 中查找备份扇区有几种方法,我要介绍一种使用签名的方法。如果在 HxD 中搜索十六进制 55 AA,您将找到以下内容:


这就是它的工作原理。当您逐一浏览搜索结果时,


在这种情况下,最后 2 个字节为 55 AA,我们可以看到 'Uª'。这正是签名。需要注意的是,十六进制值 55 AA 是签名,而不仅仅是字符形式。如果你看一下上面的红色部分,你会发现它是 NTFS。有许多关于 NTFS VBR 结构的相关博客,因此,如果你参考这些博客,相信你会更好地理解它。


  1. 还原 NTFS VBR

对于 NTFS,备份扇区通常是 NTFS 分区中的最后一个扇区。因此,如果可以从备份扇区确定分区扇区大小,就可以确定原始备份扇区的位置。


如果您查看此结构,您会发现,总扇区信息共占 8 个字节,在 VBR 中范围为 0x20 到 0x27。


在上图中,A67FF 是分区中的扇区总数(小端格式)。计算时,得到的值为 '681,983'。由于备份扇区的当前位置为 '682,111',因此从该值中减去扇区总数后得到 '128',这就是原始 VBR 的起始扇区。



复制备份 VBR 后,只需将其粘贴到扇区 128 中并保存即可。


  1. 将 NTFS 分区还原为 MBR

现在,我们将使用这些值来恢复 MBR。

[SK Shillers SeSAC 顺德第 1 批] ZIP 结构、DISK

如前文所述,MBR包含每个分区的信息,每16个字节增加446至510个字节。对于以扇区128开始的NTFS分区,我们将必要的信息插入MBR的前16个字节。实际上,我们只需要1个字节、4个字节、8至11个字节和12至16个字节,因此我们只需重新输入这些信息,将引导标志改为80、文件系统类型为NTFS的07,以及分区起始地址从8至11个字节改为80,即扇区128的十六进制表示。最后12至16个字节将包含分区大小,A67FF。


※ 请注意,在替换时,实际的表示法是大端模式,因为此时它被读作小端模式。



插入并保存后,请使用 FTK Imager 检查恢复是否成功。


您可以看到恢复成功了。然后,可以以同样的方式继续进行 FAT 恢复。


  1. FAT 恢复正在进行


以此方式找到备份 VBR,并将备份 VBR复制并粘贴到 '682,112' 中,该值为此处的 -6。


之后,如果您再次恢复 MBR,只需输入启动标志 80、输入 0B 或 0C、将起始地址 '682,112' 转换为 A6880,以及扇区大小。


来源 hec-ker.tistory.com / 如下附件

FAT32 文件系统结构

如果从上述结构计算,则从 0x20 开始,整个分区扇区大小为 4 字节,即为 A6800。现在,如果将该值输入到 MBR 中,


您应该能够输入此内容。现在,保存后,如果再次使用 FTK Imager 检查,


你可以看到它修复得如此完美。



Ⅲ. DISK 练习 - 查找数据区

正如我在之前的帖子中简要提到的,在 FAT32 中找到 DataArea 的方法如下: FAT32 的结构为 VBR(保留区) - FAT1 & FAT2 - MFT 出现。然后,在 VBR 的启动扇区中,有一个保留区域和 FAT1。 & 如果我们增加 FAT2 扇区大小,是否会导致数据区的位置发生变化?


如果我们计算,预留扇区数的信息为 0x0E~F 和 6,874。由于 FAT 扇区大小为 0x24~7,因此为 659。但是,由于有 FAT1 和 2,如果乘以 2,则为 1,318。现在,如果我们将所有这些值相加,得到 6,874 + 1,318 + 682,112(FAT - VBR 的起始扇区),即为 690,304。现在,我们来到这个扇区。


我们能够找到恢复的 FAT32 的数据区。对于 FAT32,数据区的结构如下:


来源: dotaky99.tistory.com / 连接如下

[文件系统] FAT32 - 第三部分 (数据区,恢复)

它的结构如下。需要注意的是,我们需要区分 SFN(短文件名)结构和 LFN(长文件名)结构,这两者可以通过 12 字节的值来区分。区分这两个结构的原因是因为它们的结构不同。


来源 blog.forensicresearch.kr / 附有链接

目录项分析 - SFN、LFN

默认情况下, 32 个字节被分隔开来, 由于 SFN 结构如下所示, 我们可以对其进行检查。但是, 对于 LFN, 还需要考虑更多的事情。首先, 如果 32 个字节中有 11 个字节为 0x0F, 那么这 32 个字节就是 LFN 结构。然后, 如果我们查看位于 0x0 位置的 1 个字节, 可以看到它是一个序列号, 这个值很重要。


在上图中,我们可以看到起始 SeqNum 为 42,12 个字节为 0x0F。因此,上面的两行属于 LFN 结构。下面的 32 个字节也是如此,SeqNum 为 1。总而言之,LFN 结构由两个文件组成。要了解这一点,可以通过 SeqNum,在多个 LFN 结构文件中,32 字节结构中的最后一个 SeqNum 为 0x40 或运算结果。由于其他 LFN 结构中的 SeqNum 均比 0x01 增加 1,大于 0x40 的值表示文件中 LFN 结构的数量,通过 0x40 或运算结果。因此,如果再次 XOR 0x42,我们可以看到它为 2,该文件包含两个 LFN 结构。


从上图的示例中可以看出,还可以计算出该文件有三个 LFN 结构。


对于 NTFS,情况稍有不同。一个 NTFS 分区将包含一个 VBR、一个 MFT 和一个数据区。如果我们仔细观察一下,会发现有一个 VBR 和一个 MFT,实际上 MFT 是 MFT 条目的集合。每个 MFT 条目对应一个文件或目录。一个 MFT 条目的标识是 FILE。如果我们仔细观察一下 Header 结构,


它看起来是这样的。


在这种情况下,我想介绍如何找到 MFT 条目。参考上述的 NTFS VBR 结构,我们需要了解每个扇区的字节数、每个簇的扇区数以及 MFT 条目的起始簇位置。


在本示例中,需要的三个值如下:首先是 200,这表示一个扇区包含 512 字节。每个簇中有 8 个扇区,即 8。MFT 条目开始簇位置为 6F00,即整数形式为 28,416。那么 MFT 条目的实际开始扇区位置是多少?由于每个簇中包含 8 个扇区,我们需要将开始簇位置乘以 8。结果为 227,328。由于我们目前正在从扇区 128 开始,我们需要将该值加上 128,即得到 227,456。现在,如果我们移动到该扇区,我们将看到


这是 MFT 条目中的签名。现在,如果我们查看此 MFT 条目的头部,它总共包含 48 个字节。


首先,如果我们查看这两个值,第一个红色部分(对应 24 到 27 个字节)表示 MFT 条目实际大小,而后面的部分(28 到 31 个字节)表示分配给 MFT 条目的大小,总共为 1024 个字节(通常情况就是这样)。MFT 条目对应一个单个文件或目录。如果我们向后退一个扇区(1024 个字节),我们会看到


再次,我们可以看到 MFT 条目开始。为了提高可靠性,Fixup 结构放置在 MFT 条目头部之后。MFT 条目中的第 4 至 5 个字节和第 5 至 6 个字节分别表示 Fixup 数组的值和数组的长度。十六进制表示为 30 和 3,因此从第 48 个字节开始,长度为 2 个字节的 Fixup 值,之后是先前计算的长度 3 个字节和 Fixup 值,每个字节为 2 个字节,乘以 2 即可得到 6 个字节作为存储由 Fixup 值所替换的数据的空间。此 Fixup 值用于在解释数据之前或扇区内容发生异常变化之前提前发现错误。接下来,属性头和内容会重复出现,我要介绍一个与此相关的优秀博客。

[文件系统] NTFS - 第三部分 (属性, $Properties)



评论

我认为这将是本周的最后一篇文章。我仍然没有完全理解 NTFS MFT 条目中属性的结构,因此我有点失望,但我学到了很多东西,我觉得还需要继续弥补缺口。