FAT文件系统简明教程

FAT文件系统是什么?

FAT是一个由微软发明的简单的文件系统,Linux系统和Windows系统都支持这种文件系统。

FAT文件系统的格式

一个FAT文件系统分为四个不同的部分。

  • 第一部分:保留扇区,第一个保留扇区(0号扇区)是记录磁盘的引导记录,分区信息等。

  • 第二部分:文件分配表(File allocation Table, FAT),由两部分组成,FAT1和FAT2,FAT2是FAT1的备份,一般情况下不会用到。一般情况下前两簇(0簇和1簇)是保留簇。

    文件分配表里会记录簇的使用信息,以及簇列表。文件分配的最小单位是簇,簇标记大小为连续的4个字节,簇的标记有五种:

    空闲簇(作用:说明这个簇是没有被占用的。)

坏簇标记0xF7FFFF(作用:说明这个簇不可用,避免将信息写到坏簇上,使得数据丢失。)
簇占用标记0xFFFFFF0F(其实表示该簇是一个文件的结束。)
下一簇的位置(每个文件可能有好多簇表示,用前一簇记录下一簇的位置,达到对整个文件的记录)

  • 第三部分:根目录区域,相当于一个目录表,用来记录文件和目录信息的。
  • 第四部分:数据区域:实际的文件和目录的存储区域。

文件的存储和删除

很多小伙伴可能会有这种体会,删除一个文件比复制或者下载一个文件要快的多。这是怎么回事呢?

  • 这其实是因为如果你普通删除一个文件,它并不会将文件的内容真的删除。

  • 同样当你重命名一个文件时,其实它并没有删除原本的目录项,而是新建了一个目录项,指向原来的文件内容。

这几句话话听着可能有点绕,没关系,我们通过一个例子来解释一下:

文件的存储

理解文件的安全删除必须先理解文件的存储。

我们这里还是以FAT文件系统来举例:

新建一个文件时,磁盘中发生了什么?

  1. 操作系统通过读取1号扇区表中的信息,找到剩余总簇数,以及下一个可用簇的编号

  2. 然后在根目录区域记录文件信息,比如说文件大小,文件名,创建信息等,并且在其中记录文件的首簇号,并计算新的剩余总簇数(=之前的剩余总簇数-此文件占用的总簇数),和下一可用簇编号

  3. 在FAT表中修改这个文件的簇列表。

  4. 在对应簇进行写数据。

  5. 操作系统重新读取磁盘信息,可以看到新建的文件了。

    举个例子:你要将自己攒的一千万(我可没这么多钱)放在自己家的柜子(FAT磁盘)里,而你又是一个办事有条理的人,你会将自己柜子里的抽屉总数(总簇数)记录一下,而且按照顺序为你的抽屉然后将每个抽屉的使用情况(FAT1)记录在抽屉记录清单上,比如说,0号抽屉不用(保留簇标记)5号抽屉坏了(坏簇标记),6号抽屉里有东西(簇占用标记)。而且,你怕自己将这个记录丢了,所以你又复制了一份一模一样的记录(FAT2),每次放东西都会在两份记录里都写进去。

    现在你要将这1000万放在自己的抽屉里(就是这么任性,有钱不存银行),然后,你找到了自己的记录表(FAT1),然后从里面查看还有多少个空抽屉(空闲簇)。

    现在你找到了下一个可以用的是7号抽屉。但是1个抽屉存不下你这些钱(文件大于1簇),所以你只好放几个抽屉了,而且你还想知道自己的钱到底是从哪开始放的(文件起始簇),用几个抽屉放(文件总大小),什么时候放的(文件创建时间)等,所以又写一张东西记录清单(根目录区域)。

    你为了让自己知道我的钱是放在哪些抽屉里的,然后在原来的抽屉记录清单(FAT1 和FAT2)上将抽屉记录上记录了下一个存钱的抽屉。当这是最后一个存钱抽屉时,你将这个记录改为结束(簇占用标记)。现在你可以把你的钱放在你规划好的抽屉里了(数据区)。

普通删除一个文件时,磁盘中发生了什么?

  1. 找到文件的目录项,将文件首簇记录的高位清0,将目录项记录的第一个自己改为E5,将文件占用的簇释放掉,也就是在FAT表中将之前占用的簇记录改为空闲,然后修改剩余总簇数,有必要的话,也修改下一可用簇
 > 不难看出其实文件内容并没有被删除,所以说只要你新建的文件没有覆盖之前文件内容,这个文件是可以被恢复的。

怎么安全删除?

你可以用一些特定工具(比如WinHex)进行彻底删除,本质就是在文件实际内容用0比特或者随机比特进行填充。

FAT文件的隐写

什么是隐写?

百度百科定义:隐写术是关于信息隐藏,即不让计划的接收者之外的任何人知道信息的传递事件(而不只是信息的内容)的一门技巧与科学。隐写术英文作“Steganography”,来源于约翰尼斯·特里特米乌斯一本看上去是有关黑魔法,实际上是讲密码学与隐写术的一本书Steganographia中。此书书名来源于希腊语,意为“隐秘书写”。

本次实验采用的隐写可以说是最简单的隐写了,因为它只是让你从目录中查看不到这个文件信息,如果你用一些磁盘查看工具看到这些东西简直不要太容易!因为本文的重点不是介绍隐写术,而是FAT文件系统,所以不过多讨论。

隐写实验过程

本次实验环境:

操作系统:Windows 8.1 实验工具:磁盘查看工具:WinHex(其他工具也可以)。百度网盘下载:[WinHex](https://pan.baidu.com/s/1eIxsYH1qtuGw9C0egn1UOg)

工具安装:解压缩以后先打开keygen.exe是注册码生成器,复制注册码,然后点击setup.exe可以选择语言。然后点击winhex.exe 启动文件,再将注册码生成器里生成的内容复制到第一行帮助(help)选项卡中的注册(Register)内容中。

  1. 先格式化U盘,文件格式选择FAT32,分配单元大小(其实就是簇大小)选择(8192Byte=8KB)。

    **目的:**使得簇信息等查看起来简单,方便实验,但不是必须的。

  2. 查看当前可用簇的总数(一般情况下在1号扇区偏移地址为0x1EB的连续四个字节),以及下一可用簇(在可用簇总数后面的连续四个字节,也就是在1号扇区偏移地址为0X1E的连续四个字节。)。以本次实验为例:A2 B2 18 00是可用簇总数的记录,实际大小为(0X0018B2A2),转化为10进制就是1618594个可用簇。同样地 05 00 00 00是下一可用簇的记录,实际大小为(0x00000005),转化为10进制就是第五簇。

    注意:高地址在右边,所以计算时要倒过来写。 ![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OJSHt7Mk-1597573332627)(file:///C:\Users\斌\AppData\Local\Temp\ksohtml\wps1E57.tmp.jpg)]![img]](https://img-blog.csdn.net/20180610210735574?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1N0dWR5X2NvZGVy/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

  3. 因为目的是要隐写,所以我们将第五簇用作隐写(在FAT的记录中随便找一项空闲簇都可以),然后将可用簇的总数减去1。然后在FAT1记录中找到第5簇的记录,将它修改为F7FFFFFF,也就是坏簇标记。(改为FFFFFF0F占用标记也可以)

  4. 找到第五簇,完成实际数据的写入。

  5. 保存修改,并重新插拔U盘。

  6. 验证是否成功。

重新插拔U盘,在U盘内随便新建一个文件,验证一下隐写文件是否会被覆盖。验证过程如下:重新用W inhex打开U盘,找到第五簇,看一下刚才写的数据是否还在。如果还在说明成功。不在的话,说明失败。

FAT文件系统简明教程相关推荐

  1. Go Embed简明教程

    Go Embed简明教程 go语言程序都是编译成二进制可执行文件的,但是实际执行时除了需要可执行程序,还需要一些静态文件,比如html模板等,于是就有人想如果Go官方能内建支持就好了.2019末一个提 ...

  2. Go embed 简明教程

    转载地址:Go embed 简明教程 Go编译的程序非常适合部署,如果没有通过CGO引用其它的库的话,我们一般编译出来的可执行二进制文件都是单个的文件,非常适合复制和部署.在实际使用中,除了二进制文件 ...

  3. linux系统sql语句报错_linux之SQL语句简明教程---CREATE VIEW

    视观表 (View) 可以被当作是虚拟表格.它跟表格的不同是,表格中有实际储存资料,而视观表是建立在表格之上的一个架构,它本身并不实际储存资料. 建立一个视观表的语法如下: CREATE VIEW & ...

  4. 【软考 系统架构设计师 简明教程】简介与目录

    为了不辜负已经订阅了专栏的同学们的信任,所以本专栏不会有任何的优惠活动. 另外,当订阅人数每次达到2n(n>2)2^n(n>2)2n(n>2)时,订阅价格将会上涨10元. 所以,当下 ...

  5. Docker 简明教程

    Docker 简明教程 Created by Jasen on 2022/07/16. Docker 简介 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布到任 ...

  6. vbs简明教程(转载)

    Vbs脚本编程简明教程之一       -为什么要使用Vbs?2007年03月26日 星期一 下午 04:46 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周 ...

  7. 硬盘FAT文件系统原理的详细分析——转载

    首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的.教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈-我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转 ...

  8. JabRef文献管理软件简明教程

    本文转载自:https://www.cnblogs.com/tsingke/p/4523908.html JabRef 文献管理软件简明教程 大多只有使用LaTeX撰写科技论文的研究人员才能完全领略到 ...

  9. JabRef 文献管理软件简明教程

    JabRef 文献管理软件简明教程 大多只有使用LaTeX撰写科技论文的研究人员才能完全领略到JabRef的妙不可言,但随着对Word写作平台上BibTeX4Word插件的开发和便利应用,使用Word ...

  10. VMware ThinApp简明教程:制作单文件软件和便携软件nbsp;-nbsp;精品绿色便携软件

    VMware ThinApp是一款应用程序虚拟化工具,但对于我来说用的更多的是制作单文件软件和便携软件. VMware ThinApp将程序相关资源如exe.dll.ocx.注册表项等封装到单一的EX ...

最新文章

  1. iOS环信聊天界面中点击头像和消息的几种状态
  2. jQuery中用来让元素显示和隐藏的函数
  3. 简单枚举(算法竞赛入门经典)
  4. 谈谈晋升-互联网民工篇
  5. 十条实用的jQuery代码片段
  6. Python调用C语言
  7. SkyEye图形化界面使用技巧篇(一)
  8. angularjs通信以及postmessage与iframe通信
  9. 计算机专业英语词汇pdf,计算机专业英语词汇1700词.pdf
  10. 计算机字体库位置,电脑cad软件字体库的路径怎么添加
  11. 计算机文化基础实验教程第十一版课后答案,计算机文化基础实验指导及习题解答...
  12. 计算机不用时怎样休眠,怎么样设置电脑长时间不用进入休眠
  13. 图文并茂的大学生面试攻略【实用】
  14. (七)turtlebot3导航包解析
  15. 【100题】给定入栈序列,判断一个序列是否可能为输出序列
  16. flowable 排他网关
  17. ios 扇形 按钮_iOS开发教程之扇形动画的实现
  18. 关于论文图的排版(origin)
  19. 7-6 吃鱼还是吃肉 (20 分)
  20. bison flex

热门文章

  1. 最短路算法——Dijkstra
  2. GPRS tunnelling protocol GTP协议
  3. C++-dllmain介绍
  4. 小写金额转换为大写金额
  5. bmd硬盘测试_硬盘测速工具:Blackmagic Disk Speed Test Mac
  6. python图片中文字识别
  7. 英汉词典 JaVa_一个Java编写的英汉词典
  8. 模具设计详细流程,建议收藏
  9. win10桌面显示计算机及网上邻居,Win10网上邻居在哪? Win10桌面显示网上邻居网络图方法...
  10. 三极管原理-导通条件