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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/642704.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android Compose 九:常用组件列表 简单使用

遇事不决 先看官方文档 列表和网格 如果不需要任何滚动,通过Column 或 Row可以使用verticalScroll() 使Column滚动 Column(modifier Modifier.verticalScroll(rememberScrollState())) {for (i in 0..50){Text(text "条目>>${i}")}}显示大量列表…

移动硬盘难题:不显示容量与无法访问的解决策略

在使用移动硬盘的过程中,有时会遇到一些棘手的问题,比如移动硬盘不显示容量且无法访问。这种情况让人十分头疼,因为它不仅影响了数据的正常使用,还可能导致重要数据的丢失。接下来,我们就来详细探讨一下这个问题及其解…

弹性盒子布局,flex布局

弹性盒子布局(Flexbox)是CSS3引入的一种新的布局模式,它提供了一种更加有效的方式来设计、布局和对齐容器中的项目,即使容器的大小动态改变或者项目的数量未知。 弹性盒子布局的主要特点是能够轻松地在不同的屏幕大小和设备上实现…

虚拟局域网(VLAN)

关键词:veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言 在过去的几十年里,互联网发展得非常快。许多新兴技术迅速崛起,也有不少曾经的主流技术被淘汰。然而,有些技术因为其基础性…

iPhone实况照片从Windows资源管理器复制的JPG+MOV无法正常还原到iPhone

背景: 之前使用的iPhone 15 Pro,使用的Windows资源管理器当中复制导出的实况照片,复制出来的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手机就卖掉了。现在使用的iPhone 14 Pro Max,想要导回之前备份的实况照片。尝试使用爱思助手…

解决vue版本不一致导致不能正常编译

解决vue版本不一致导致不能正常编译 异常现象分析原因解决方案 异常现象 项目原本运行无异常,但安装了一个el-table-infinite-scroll的插件后,编译报错,截图如下 分析原因 vue版本与compile版本不一致,应该统一起来&#xff0…

网创教程:WordPress插件网创自动采集并发布

网创教程:WordPress插件网创自动采集并发布 使用插件注意事项: 如果遇到404错误,请先检查并调整网站的伪静态设置,这是最常见的问题。需要定制化服务,请随时联系我。 本次更新内容 我们进行了多项更新和优化&#x…

1.存储部分

1.Flash Memory--闪速存储器(注:U盘,SD卡就是闪存)在EEPROM基础上发展而来的,断电后也能保存信息,且可进行多次 快速擦除重写。注意:由于闪存需要先擦除再写入,因此闪存写的速度要比…

ssm141餐厅点菜管理系统+vue

餐厅点菜管理系统的设计与实现 摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管…

Unity-Sprite Atlas+UGUI系统的运行原理

每日一句:别听世俗耳语,看自己的风景就好 目录 SA的原理: SA的优点: SA的缺点: DrawCall是什么? 批处理是什么? 我们先了解一下UGUI系统的运行原理吧! 提到图集优化&#xff0…

性能测试--线程的监控

1.线程的状态 1.1.线程的5种状态 java的线程总共有5种状态,如下: * 新建:new 【新建之后不启用都是new】* 运行:runnable* 等待:waitting(无限期等待),timed waitting(限期等待)* 阻塞:blocked* 结束&am…

C++ 求 f(x) = sin x / x 的函数极限

Python: import sympy from sympy import oo #注意无究符号表示形式为两个小定字母o import numpy as np x sympy.Symbol(x) #注意Symbol首字母大写f sympy.sin(x) / x # 定义极限表达式lim sympy.limit(f,x,oo) print(lim)输出: 0 C #include…

计网(部分在session学习章)

TCP/UDP TCP:面向连接,先三次握手建立连接,可靠传输。 UDP:无连接,不可靠,传递的快。 TCP可靠传输 1.分块编号传输; 2.校验和,校验首部和数据的检验和,检测数据在传输中的变化; 3.丢弃重复数据; 4.流量控制,TCP 利⽤滑动窗⼝实现流量控制。TCP的拥塞控制采⽤…

数据可视化第9天(利用wordcloud和jieba分析蝙蝠侠评论的关键字)

数据可以在这里下载 https://github.com/harkbox/DataAnalyseStudy WordCloud wordcloud可以很方便的生成词云图,方便的提供可视化可以直接使用pip install wordcloud进行安装如果使用的是Anaconda,可以使用conda install进行安装 下面看一个简单的例子 txt &qu…

在linux下的ROS中下载超级终端Terminator ROS开发得力助手

在一般我们运行机器人包时要打开三个终端来运行,关闭时还要一个一个关闭(ctrlc)过于麻烦 现在下载用了terminator后,就支持一键关闭多个终端了,很方便,具体操作如下: sudo apt install termin…

第十三期Big Demo Day聚焦Web3前沿,FaceN.AI项目路演揭幕创新技术

第十三期Big Demo Day活动即将于2024年5月28日在香港数码港的CyberArena隆重举行。FaceN.AI将亮相本次Big Demo Day,参与精彩的项目路演,展示其在跨链去中心化数字身份、On-chain to Off-chain数据应用、DIDFi探索以及元宇宙与AIGC人格化发展等领域的领先…

Gb 2024-05-22开源项目日报Top10

根据Github Trendings的统计,今日(2024-05-22统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目3非开发语言项目2Jupyter Notebook项目2Rust项目2JavaScript项目1Lua项目1编程面试大学:成为软件工程师的全面学习计划 创建周期:2…

talib 安装

这里写自定义目录标题 talib 安装出错 talib 安装出错 https://github.com/cgohlke/talib-build/releases 这里找到轮子 直接装。

BUUCTF [GUET-CTF2019]zips 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 得到的 flag 请包上 flag{} 提交。 密文: 得到一个attachment.zip文件 解题思路: 1、解压attachment.zip,得到222.zip文件。尝试解压需要密码,使用Ziperello爆破密码…

java连接ldap实现查询

文章目录 一、项目背景二、准备工作三、验证结果四、易错点讲解易错点1:java: 无法访问org.springframework.ldap.core.LdapTemplate易错点2:java: 无法访问org.springframework.context.ConfigurableApplicationContext易错点3:[LDAP: error…