浅析FAT32文件系统

2024-05-26 12:52
文章标签 文件系统 浅析 fat32

本文主要是介绍浅析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,这样文件系统就会认为该文件已经被删除,如下图所示。

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

在这里插入图片描述

这篇关于浅析FAT32文件系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004523

相关文章

浅析CSS 中z - index属性的作用及在什么情况下会失效

《浅析CSS中z-index属性的作用及在什么情况下会失效》z-index属性用于控制元素的堆叠顺序,值越大,元素越显示在上层,它需要元素具有定位属性(如relative、absolute、fi... 目录1. z-index 属性的作用2. z-index 失效的情况2.1 元素没有定位属性2.2 元素处

Linux中的缓冲区和文件系统详解

《Linux中的缓冲区和文件系统详解》:本文主要介绍Linux中的缓冲区和文件系统方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、FILE结构1、fd2、缓冲区二、文件系统1、固态硬盘2、逻辑地址LBA(一)数据块 Data blocks(二)inode表

浅析Python中的绝对导入与相对导入

《浅析Python中的绝对导入与相对导入》这篇文章主要为大家详细介绍了Python中的绝对导入与相对导入的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1 Imports快速介绍2 import语句的语法2.1 基本使用2.2 导入声明的样式3 绝对import和相对i

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

浅析Rust多线程中如何安全的使用变量

《浅析Rust多线程中如何安全的使用变量》这篇文章主要为大家详细介绍了Rust如何在线程的闭包中安全的使用变量,包括共享变量和修改变量,文中的示例代码讲解详细,有需要的小伙伴可以参考下... 目录1. 向线程传递变量2. 多线程共享变量引用3. 多线程中修改变量4. 总结在Rust语言中,一个既引人入胜又可

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

(入门篇)JavaScript 网页设计案例浅析-简单的交互式图片轮播

网页设计已经成为了每个前端开发者的必备技能,而 JavaScript 作为前端三大基础之一,更是为网页赋予了互动性和动态效果。本篇文章将通过一个简单的 JavaScript 案例,带你了解网页设计中的一些常见技巧和技术原理。今天就说一说一个常见的图片轮播效果。相信大家在各类电商网站、个人博客或者展示页面中,都看到过这种轮播图。它的核心功能是展示多张图片,并且用户可以通过点击按钮,左右切换图片。

使用jetty和mongodb做个简易文件系统

使用jetty和mongodb做个简易文件系统 - ciaos 时间 2014-03-09 21:21:00   博客园-所有随笔区 原文   http://www.cnblogs.com/ciaos/p/3590662.html 主题  MongoDB  Jetty  文件系统 依赖库: 1,jetty(提供http方式接口) 2,mongodb的java驱动(访问mo

风暴项目个性化推荐系统浅析

风暴项目的主要任务是搭建自媒体平台,作为主开发人员的我希望把工作重心放在个性化推荐系统上。 目前风暴项目的个性化推荐是基于用户行为信息记录实现的,也就是说对于每条资讯,数据库中有字段标明其类型。建立一张用户浏览表,对用户的浏览行为进行记录,从中可以获取当前用户对哪类资讯感兴趣。 若用户第一次登陆,则按默认规则选取热点资讯做推荐,及所有资讯按浏览量降序排序,取前4个。另外,我考虑到后期可能有商业