浅析FAT32文件系统

本文通过实验测试了FAT文件系统的存储规律,并且探究了部分可能的文件隐藏方法。

实验背景

现有一块硬盘(U盘),其中存在两个分区,分别为FAT32和NTFS文件系统分区。
在这里插入图片描述
在FAT分区中存在如下文件:

在这里插入图片描述
现需要阅读底层数据,找到上述文件的文件内容。

1. 分区分析

已知硬盘分区结构为MBR结构,因此首先对整块硬盘的MBR字段进行分析。MBR分区表数据如下:

在这里插入图片描述
其中各个分区数据如下所示:

分区ID分区表数据
1(1BEH-1CDH)00 20 21 00 0C FE FF FF 00 08 00 00 00 40 85 02
2(1CEH-1DDH)00 FE FF FF 07 FE FF FF 00 48 85 02 00 00 E2 04
300 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
400 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

可以发现,盘中存在两个分区,其重要数据段解释结果如下所示。

  • 分区1
字段解释
1BE: 00非活动分区
1BF-1C1: 20 21 00磁头扇面数据
1C2: 0C分区类型为 Win95 FAT32
1C6-1C9: 00 08 00 00数据扇区起始扇区号为 2048
1CA-1CD: 00 40 85 02本分区扇区总数为 42287104,本分区大小为 20.1640625GB
  • 分区2
字段解释
1CE: 00非活动分区
1CF-1D1: FE FF FF磁头扇面数据
1D2: 07分区类型为 NTFS
1D6-1D9: 00 48 85 02数据扇区起始扇区号为 42289152
1DA-1DD: 00 00 E2 04本分区扇区总数为 81920000,本分区大小为 39.0625GB

2. FAT32分区DBR文件头分析

由于FAT32的DBR位于FAT32格式分区的起始扇区,因此跳转到2048扇区便可以看到FAT32的DBR文件头如下所示(其中选中部分为BPB字段):

在这里插入图片描述
此时首先对当前FAT文件系统的DBR文件头中的BPB字段进行分析,结果如下:

Offsets数据内容解释
0x10000B-0x10000C00 02每个扇区512字节
0x10000D20每簇32个扇区,16384个字节(16KB)
0x10000E-0x10000F62 0FFAT保留扇区数量为3938
0x100024-0x1000274F 28 00 00每FAT所占扇区数为10319

此时可以计算出FAT数据区起始扇区位置=2048+3938+10319x2=26624,同时也可以知道FAT表的开头扇区为2048+3938=5986。

3. 根目录FDT扇区分析

由于FAT数据区开头为根目录的FDT扇区,因此直接跳转到26624扇区就可以查看根目录FDT扇区的内容如下所示:
在这里插入图片描述
我们可以发现,当前硬盘里其实存在6个文件和目录项,存在3个长文件名(B列为OF的是长文件名),且第一个簇为根目录文件,存在两个被删除的文件(第一字节为E5H)。

4. 文件寻址

以hello.txt文件为例,其在FDT相关目录项如下所示:

在这里插入图片描述
可以读出,该文件起始簇号的高16位为00 00,低16位为05 00,这意味着该文件在第5簇进行存储。由于根目录FDT是第2簇,因此该文件和根目录FDT之间相差扇区数为3x32=96扇区,因此该文件在物理扇区中扇区号为96+26624=26720,其文件内容如下:

在这里插入图片描述

5. FAT32文件存储模式探究

为了探索存储规律,向硬盘中拷贝一个大小为4382KB的mp4文件。

由于一个簇大小为16KB,因此可以算出该文件应该会占用274个簇。此时跳转到5986扇区,FAT1表中多出了如下内容:

在这里插入图片描述
上述所选部分在FAT簇表中正好占用274簇,因此可以发现,当存储文件时,FAT格式默认从前往后连续存储。此时根目录FDT新增了如下内容。

在这里插入图片描述
此时将该文件删除,删除后再新增一个名为newFile的txt文件。此时根目录FDT内新增数据项如下。

在这里插入图片描述

可以发现原来的MP4文件的开头字节全部变成了E5,说明该文件已经被删除,同时下方出现了64字节的txt文件信息。

此时查看FAT簇表如下所示。

在这里插入图片描述
可以发现,原来的MP4对应的簇被新的txt文件占用。

6. FAT32文件夹底层存储方式分析

跳转到FAT32根目录FDT扇区,其中demo文件夹的文件表项如下图所示。

在这里插入图片描述
其中偏移量为0xC0012B的字节为10,这意味着该文件为归档类型,即文件夹。这和我们的预设相符。此时偏移量为0xC0013A-0xC0013B的四个字节为06 00,这意味着该文件夹的内容在6号簇中。结合前文数据,该文件所在扇区为(6-2)x32+26624=26752。扇区内容如下所示。

在这里插入图片描述
可以发现该文件夹的内容和根目录FDT内容结构类似,其中偏移量为0xD10080到0xD1009F的字节为demo.cpp的文件目录。

此时我们可以得到文件夹底层存储方式如下:

  • 每一个目录可以看做一个文件,这个文件的内容都是一个FDT,即文件表项。
  • 某目录中的子目录的文件内容和该目录同构。
  • 硬盘FAT簇表后的第一个扇区就是根目录的FDT,可以使用这个数据索引后续数据。

7. 简易FAT32文件夹隐藏方法

(1)可以通过在FAT表中自定义坏簇的方法实现文件隐藏

我们尝试对于hello.txt文件进行隐藏,隐藏前文件如下所示。

在这里插入图片描述

其在根目录FDT的目录项如下所示。

在这里插入图片描述

读取偏移量为D000DAH-D999DB两个字节的数据为05 00,意味着该文件在第5簇。此时将FAT簇表(5986扇区)中第5簇的内容改为坏簇,结果如下。

在这里插入图片描述
此时在文件系统中能看到该文件,但是点击后无法显示文件具体内容。

在这里插入图片描述

(2)可以通过在FDT中自定义文件为已删除文件的方法实现文件隐藏

要使得文件无法显示,则需要将FDT中文件开头字节改为E5H,这样文件系统就会认为该文件已经被删除,如下图所示。

在这里插入图片描述
此时文件不会显示在文件夹中。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AndrewMe8211

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值