【计算机网络病毒三】文件系统之FAT

文件系统

数据恢复是挽救遭受计算机病毒破坏后的一个有效弥补手段
数据恢复所需要的最基本的基本知识是硬盘和文件系统的结构

文件系统简介

磁盘分区后只是划分了存储数据的空间,还需要文件系统将分区空间内的文件组织管理起来。

与文件系统相关的组成部分有:操作系统引导记录(DOS Boot Record,DBR)、文件分配表(File Allocation Table, FAT)、文件目录表(File Directory Table, FDT)、数据区(DATA)。

image-20210402145426105

文件系统简介

FAT可以理解成为一种文件管理系统,它可以追踪记录每一段程序或文件的位置。

FAT文件系统将数个扇区合并成一个簇(Cluster),作为文件分配存储空间的基本单位,因为当分区容量较大时,选用扇区管理会增加FAT表的项数。

一个簇所占用的空间由OS和磁盘类型共同决定,通常可以将磁盘的容量除以64KB(65536个字节),将得到的数据进位到最接近2的幂方数而得到簇的大小。

FAT表的大小及位置

磁盘上共有FAT表的两个复制,一个是基本FAT表FAT1,另一个是FAT表的备份FAT2。

第二个FAT表为第一个FAT表的备份。

FAT在磁盘上安排在紧接操作系统引导扇区DBR之后。

FAT占用多少个扇区因硬盘分区情况和逻辑盘的容量大小的不同而不同。

文件目录表

文件目录表(FDT),也称根目录DIR(Root Directory),紧跟在FAT表之后。

FDT记录根目录下每个文件(目录)的起始单元、文件属性等。

定位文件位置时,操作系统根据FDT中的起始单元,结合FAT表就可以确定文件在磁盘中的具体位置和大小

早期系统中FDT长度固定,最多只能有512项,为突破此限制,根目录采用和子目录一样的方式来管理,称为根目录文件。

数据区

数据(DATA)区,是真正意义上的数据存储的地方,位于FDT区之后,占据硬盘上的大部分空间。

文件的簇号链

磁盘格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。

磁盘上的每个可用簇在FAT只有一个登记项,通过在对应簇号的登记项内填入表项值来表明数据区中的该簇的状态。

一、FAT16文件系统(内存小于等于2GB)

简称为FAT

文件结构
-----
|MBR|
-----
|DBR及其保留扇区|			//DOS引导记录,操作系统引导记录
-----
|FAT1|					//文件分配表
-----
|FAT2|					//备份FAT1
-----
|FDT|					//根目录,一般占用32个扇区
-----
|DATA|					//数据区
-----

簇:

每簇扇区数:...个扇区为一个簇

跳转到相应位置:

MBR->DBR

DBR->FAT1:需要跳转保留扇区大小(从当前位置)

FAT1->FAT2:需要跳转FAT1的大小(从当前位置)

FAT2->FDT:需要跳转FAT2的大小(从当前位置,FAT1的大小等于FAT2的大小)

FDT->DATA:需要跳转FDT的大小(从当前位置,FDT的大小一般为32个扇区)

DATA:需要从DBR中知道每簇扇区数,这样就可以找到相应的文件

跳转至文件:

DATA区:从2号簇开始记录,

需要找到相应文件的话,(文件所在簇-2)*每簇扇区数=相对DATA的文件所在扇区

跳转至文件开始的位置(相对DATA的文件所在扇区),然后加上文件大小,即可到达文件末尾。

总结:MBR---隐藏扇区数---DBR---保留扇区数---FAT1---FAT表大小---FAT2---FAT表大小---FDT(寻找文件信息)---32个扇区---DATA

BPB目录的分析

DBR目录的分析

FAT32分区上DBR中各部分的位置划分
字节位移 字段长度 字段名
0x00 3个字节 跳转指令
0x03 8个字节 厂商标志和os版本号
0x0B 53个字节 BPB
0x40 26个字节 扩展BPB
0x5A 420个字节 引导程序代码
0x01FE 2个字节 有效结束标志

FDT目录的分析

二、FAT32文件系统

FAT32文件系统由DBR及其保留扇区、FAT1、FAT2、DATA区四个部分组成。

image-20210402145646938
①FAT32 DBR

DBR区即操作系统引导记录扇区,通常占用分区的第0扇区共512个字节。

内容包括:跳转指令、厂商标志和操作系统版本号、BPB(BIOS Parameter Block)、扩展BPB、OS引导程序、结束标志几部分组成。

FAT32分区上DBR中各部分的位置划分
字节位移 字段长度 字段名
0x00 3个字节 跳转指令
0x03 8个字节 厂商标志和os版本号
0x0B 53个字节 BPB
0x40 26个字节 扩展BPB
0x5A 420个字节 引导程序代码
0x01FE 2个字节 有效结束标志

MBR将CPU执行转移给引导扇区,因此,引导扇区的前三个字节必须是合法的可执行的基于x86的CPU指令。

这通常是一条跳转指令,该指令负责跳过接下来的几个不可执行的字节(BPB和扩展BPB),跳到操作系统引导代码部分。

跳转指令之后是8字节长的OEM ID,它是一个字符串, OEM ID标识了格式化该分区的操作系统的名称和版本号。

为了保留与MS-DOS的兼容性,通常Windows 2000格式化该盘是在FAT16和FAT32磁盘上的该字段中记录了“MSDOS 5.0”。

在NTFS磁盘上(关于ntfs,另述),Windows 2000记录的是“NTFS”。通常在被Windows 95格式化的磁盘上OEM ID字段出现“MSWIN4.0”,在被Windows 95 OSR2和Windows 98格式化的磁盘上OEM ID字段出现“MSWIN4.1”。

接下来的从偏移0x0B开始的是一段描述能够使可执行引导代码找到相关参数的信息。通常称之为BPB(BIOS Parameter Block)。

BPB一般开始于相同的位移量,因此,标准的参数都处于一个已知的位置。磁盘容量和几何结构变量都被封在BPB之中。

由于引导扇区的第一部分是一个x86跳转指令。因此,将来通过在BPB末端附加新的信息,可以对BPB进行扩展。只需要对该跳转指令作一个小的调整就可以适应BPB的变化。

image-20210613133452424

0DH~0DH:每簇扇区数

  • 每簇扇区数记录着文件系统的簇大小,即由多少个扇区组成一个簇。
  • FAT32最大支持128扇区的簇。
  • 在FAT32文件系统中所有的簇从2开始进行编号,每个簇都有一个自己的地址编号,并且所有的簇都位于数据区内,在数据区之前是没有簇的。

1CH~1FH:隐藏扇区数

  • 隐藏扇区数是指本分区之前使用的扇区数,该值与分区表中所描述的该分区的起始扇区号一致。
  • 对于主磁盘分区来讲,是MBR到该分区DBR之间的扇区数;对于扩展分区中的逻辑驱动器来讲,是其EBR到该分区DBR之间的扇区数。

2CH~2FH:根目录首簇号

  • 分区在格式化为FAT32文件系统时,格式化程序会在数据区中指派一个簇作为FAT32的根目录区的开始,并把该簇号记录在BPB中。
  • 通常都是把数据区的第一个簇分配给根目录使用,也就是2号簇。

30H~31H:文件系统信息扇区号

  • FAT32文件系统在DBR的保留扇区中安排了一个文件系统信息扇区,用以记录数据区中空闲簇的数量及下一个空闲簇的簇号,该扇区一般在分区的1号扇区,也就是紧跟着DBR后的一个扇区
image-20210613134539069
②FAT表的大小及位置

磁盘上共有FAT表的两个复制,一个是基本FAT表FAT1,另一个是FAT表的备份FAT2。
FAT在磁盘上安排在紧接操作系统引导扇区DBR之后。

FAT占用多少个扇区因硬盘分区情况和逻辑盘的容量大小的不同而不同。

FAT(File Allocation Table)文件分配表

  • FAT文件系统一般有两份FAT,它们由格式化程序在对分区进行格式化时创建,FAT1是活动FAT,FAT2是备份FAT。
  • FAT1跟在DBR之后,其具体地址由DBR的BPB参数中偏移量为0EH~0FH的两字节描述;FAT2跟在FAT1之后,其地址可以用FAT1的所在扇区号加上每个FAT所占的扇区数获得。
  • FAT表是由FAT表项构成的,我们把FAT表项简称为FAT项,每个FAT项的大小32位。
  • FAT表的前两个FAT项有专门的用途:0号FAT项通常用来存放分区所在的介质类型,例如硬盘的介质类型为“F8”,那么硬盘上分区的FAT表第一个FAT项就以“F8”开始;1号FAT项则用来存储文件系统的肮脏标志,表明文件系统被非法卸载或者磁盘表面存在错误。
  • 分区的数据区中每一个簇都会映射到FAT表中的唯一一个FAT项。因为0号FAT项和1号FAT项有特殊用途,无法与数据区中的簇形成映射,所以从2号FAT项开始跟数据区中的第一个簇映射。
  • 数据区中的第一个簇编号为2号簇,然后3号簇跟3号FAT项映射,以此类推,直到数据区中的最后一个簇。
  • image-20210613135556498
  • image-20210613135625498
③文件目录表

文件目录表(FDT),也称根目录DIR(Root Directory),紧跟在FAT表之后。

FDT记录根目录下每个文件(目录)的起始单元、文件属性等。

定位文件位置时,操作系统根据FDT中的起始单元,结合FAT表就可以确定文件在磁盘中的具体位置和大小。

早期系统中FDT长度固定,最多只能有512项,为突破此限制,根目录采用和子目录一样的方式来管理,称为根目录文件。

FAT32文件系统目录项

目录存储位置

在FAT32文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区和子目录区都在数据区中。

FAT32的目录项为四类

短文件名目录项。

长文件名目录项。

“.”目录项和“..”目录项。

卷标目录项。

image-20210613141231268

14H~15H:文件起始簇号的高位

  • 这两个字节作为文件起始簇号的高位使用。

1AH~1BH:文件起始簇号的低位

  • 这两个字节作为文件起始簇号的低位使用。

  • FAT32的目录项中,文件起始簇号占用4字节,把偏移14H~15H处的两个字节作为高位,跟该偏移处的两个字节和在一起,得到文件开始簇号。

1CH~1FH:文件大小

  • 文件大小占用4字节,记录着文件的总字节数。
FAT32文件系统目录项

目录存储位置

在FAT32文件系统下,分区根目录下的文件及文件夹的目录项存放在根目录区中,分区子目录下的文件及文件夹的目录项存放在子目录区中,根目录区和子目录区都在数据区中。

FAT32的目录项为四类

短文件名目录项。

长文件名目录项。

“.”目录项和“..”目录项。

卷标目录项。

长文件名目录项:

当创建一个长文件名时,其对应短文件名的存储有以下三个处理原则:

  • 系统取长文件名的前6个字符加上“~1”形成短文件名,其扩展名不变;
  • 如果已存在这个名字的文件,则符号“~”后的数字自动增加;
  • 如果有DOS和Windows 3.x非法的字符,则以下画线“_”替代。
  • image-20210613142211364
  • image-20210613144020934
④数据区

数据(DATA)区,是真正意义上的数据存储的地方,位于FDT区之后,占据硬盘上的大部分空间。

文件的簇号链

磁盘格式化后,用户文件以簇为单位存放在数据区中,一个文件至少占用一个簇。

磁盘上的每个可用簇在FAT只有一个登记项,通过在对应簇号的登记项内填入表项值来表明数据区中的该簇的状态。

⑤保留扇区

所谓保留扇区是指从分区DBR扇区开始的仅为系统所有的扇区,包括DBR扇区。

在FAT16文件系统中,保留扇区的数量通常设置为1,即仅仅DBR扇区。

在FAT32中,保留扇区的数量通常取为32。

FAT32中的保留扇区除了磁盘逻辑0扇区用作DBR,逻辑2扇区(win98)或0xC扇区(Win2000/XP)用作OS引导代码扩展部分外,部分用于备份和升级,其余通常闲置。

闲置扇区为病毒提供了栖息之地。

定位FAT1的步骤
  • 系统通过该分区的分区表信息,定位到其DBR扇区;
  • 读取DBR的BPB,主要读取“DBR保留扇区数”这个参数,它在DBR的0EH~0FH偏移处;
  • 读取到“DBR保留扇区数”这个参数的值为6之后,跳转到该分区的6号扇区,这里就是FAT1的开始。
  • FAT2的位置:用“DBR保留扇区数”加上“每FAT扇区数”。
posted @ 2021-08-31 15:47  Clancy_gang  阅读(1259)  评论(0编辑  收藏  举报