FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)

本文主要总结用winhex解析FAT32文件格式的U盘,下面将详细讲解。

首先博主有一个4G的普通U盘,格式化后,采用的是FAT32文件系统格式,U盘内有三个*.txt文件,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第1张图片

本文要分析的是用winhex从物理磁盘的第一个扇区开始,定位到test2.txt的文件内容,下面是具体的步骤。

步骤总结:先定位DBR偏移,然后定位FAT1偏移,然后定位数据区根目录偏移,最后定位文件内容存储簇号和偏移。

博主用的工具:一个FAT32文件系统格式的大小为4G的普通U盘,winhex1510。

其中winhex1510下载地址如下:https://download.csdn.net/download/naibozhuan3744/11150997

winhex1510注册码:(每天都要破解一次)

Name: "linholer"

Addr1: "[email protected]"

Addr2: "China"

Key1: "2E2230B055DD0D8E535F1DDA6494C639"

Key2: "51D8FE81F5F7F3C5E4C6A0FBD1CD122E"

Cksm: "FD455CD9"

 

1.1根据MBR区的内容得到DBR偏移

用winhex打开物理磁盘,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第2张图片

由于硬盘的结构主要分为MBR主引导记录、主分区1、主分区2、主分区3、逻辑分区,如下图所示。

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第3张图片

操作系统读取硬盘的第一个分区是MBR主引导分区的第一个扇区,获取硬盘的第一个扇区内容如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第4张图片

由于我的U盘没有安装操作系统,故开始的446字节没有引导记录,从字节1BE开始后连续16个字节为第一个DPT分区表,后面依次跟着第二个DPT分区表,第三个DPT分区表,第四个DPT分区表,最后两字节为分区标志55 AA。

在DPT1分区表的0x1c6连续4个字节表示相对扇区数,从磁盘的开始到该分区的开始的偏移量,以扇区为单位。获取该相对扇区数,可以直接定位到逻辑扇区,即主分区1中的GBR引导扇区起始地址,上图数据可以知道相对扇区数为:00 00 00 3F,计算公式:

GBR引导扇区起始偏移==0x3F*512==0x7E00

注意:全盘大小计算,因为0x1CA开始的连续4字节表示该分区总扇区数,故磁盘总大小为相对扇区数加上所有分区总扇区数,即!

全盘容量大小==(相对扇区数+GP1分区扇区数+GP1分区扇区数+GP1分区扇区数)*0x200

即全盘容量大小==(0x3F+0x774FC1+0x00+0x00)*0x200==0xEEA0 0000(4003463168)byte

下表是DPT分区表个字节定义:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第5张图片

故逻辑磁盘的起始偏移,也即主分区1的GBR偏移地址为:0x7E00,跳转到该偏移,结果如下图所示:(注意字节序,winhex显示的是小端序,我们计算的时候是用大端序)

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第6张图片

1.2定位FAT1偏移,得到该逻辑分区下所有文件或目录个数以及目录项

由GBR字节偏移定义可知,21 00是保留扇区数,单位为扇区。因为FAT表紧跟在保留扇区后面,故我们通过保留扇区,可以计算出FAT1文件分配表的起始偏移地址,计算公式:FAT1偏移==GBR偏移+保留扇区偏移

即FAT1偏移==0x3F*512+0x21*512==0xC000,在winhex上定位到0xC000,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第7张图片

因为本文是FAT32文件系统,故FAT32是32位,占用四个字节,也就是FAT1表的第0簇从0xC000开始的四个字节,后面连续四个字节依次是第1簇,第2簇,......,第n簇。FAT表后面紧跟着数据区,数据区除了根目录外,是按照簇为基本单位存储。文件或目录数据是从第2簇开始存储的,故从上图可以看出,FAT1表中有7个文件或者目录。

1.3定位数据区根目录偏移,得到当前逻辑分区根目录下所有目录项

通过下面的计算公式,可以定位到数据区的起始偏移,通常也是根目录区。

根目录起始偏移==GBR偏移+保留扇区偏移+FAT大小*FAT表个数

其中,FAT表的个数和大小可以在DBR区中得到,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第8张图片

即根目录起始偏移==0x3F*512+0x21*512+0x1DCD*2*512==(0x3F+0x21+0x1DCD*2)*512==0x77 F400

DBR引导扇区各字节定义如下:

0x00~0x02:3字节,跳转指令。
0x03~0x0A:8字节,文件系统标志和版本号,这里为MSDOS5.0。
0x0B~0x0C:2字节,每扇区字节数,0x0200=512
0x0D~0x0D:1字节,每簇扇区数,0x08。
0x0E~0x0F:2字节,保留扇区数,0x0C22=3106
0x10~0x10:1字节,FAT表个数,0x02。
0x11~0x12:2字节,FAT32必须等于0,FAT12/FAT16为根目录中目录的个数;
0x13~0x14:2字节,FAT32必须等于0,FAT12/FAT16为扇区总数。
0x15~0x15:1字节,哪种存储介质,0xF8标准值,可移动存储介质。
0x16~0x17:2字节,FAT32必须为0,FAT12/FAT16为一个FAT 表所占的扇区数。
0x18~0x19:2字节,每磁道扇区数,只对于“特殊形状”(由磁头和柱面分割为若干磁道)的存储介质有效,0x003F=63。
0x1A~0x1B:2字节,磁头数,只对特殊的介质才有效,0x00FF=255。
0x1C~0x1F:4字节,EBR分区之前所隐藏的扇区数,0x0004A800=305152又出现了呢,与MBR中地址0x1C6开始的4个字节数值相等。
0x20~0x23:4字节,文件系统总扇区数,0x00E83800=15218688
0x24~0x27:4字节,每个FAT表占用扇区数,0x000039EF=14831
0x28~0x29:2字节,标记,此域FAT32 特有。
0x2A~0x2B:2字节,FAT32版本号0.0,FAT32特有。
0x2C~0x2F:4字节,根目录所在第一个簇的簇号,0x02。(虽然在FAT32文件系统下,根目录可以存放在数据区的任何位置,但是通常情况下还是起始于2号簇)
0x30~0x31:2字节,FSINFO(文件系统信息扇区)扇区号0x01,该扇区为操作系统提供关于空簇总数及下一可用簇的信息。
0x32~0x33:2字节,备份引导扇区的位置。备份引导扇区总是位于文件系统的6号扇区。
0x34~0x3F:12字节,用于以后FAT 扩展使用。
0x40~0x40:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已。
0x41~0x41:1字节,与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已 。
0x42~0x42:1字节,扩展引导标志,0x29。与FAT12/16 的定义相同,只不过两者位于启动扇区不同的位置而已
0x43~0x46:4字节,卷序列号。通常为一个随机值。
0x47~0x51:11字节,卷标(ASCII码),如果建立文件系统的时候指定了卷标,会保存在此。
0x52~0x59:8字节,文件系统格式的ASCII码,FAT32。
0x5A~0x1FD:共410字节,引导代码。
0x1FE~0x1FF:签名标志“55 AA”。 

 

偏移到根目录起始地址,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第9张图片

根据目录项各个字节定义可知,test2.txt的下一簇号为0000 0007,文件长度0000 00B2。

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第10张图片

1.4定位文件内容存储簇号和偏移,得到文件内容存储数据

数据区除了根目录用扇区为基本存储单位外,数据存储区都是用簇作为单位,并且编号依次从上到下从第2簇到第n簇开始存取数据,所以知道了test2.txt文件内容的存储簇号,可以通过下面公式计算出test.txt内容存储的偏移地址。

文件内容存储起始偏移==(MBR区大小+保留区大小+FAT表 * 2的大小+(起始簇号-2) * 每簇扇区数) * 512

其中MBR区大小也即是GBR偏移,可以根据下图内容,计算出文件内容数据起始偏移

即文件内容存储起始偏移==(GBR偏移数+保留区数+FAT表 扇区数 * FAT表个数+(起始簇号-2) * 每簇扇区数) * 512

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第11张图片

文件内容存储起始偏移==(0x3F + 0x21 + 0x1DCD * 2 + (起始簇号-2) * 0x08) * 512,由于test2.txt的起始簇号为0x07,故有:

文件内容存储起始偏移==(0x3F + 0x21 + 0x1DCD * 0x02 + (0x07-0x02) * 0x08) * 0x200 == 0x784400

跳转到0x784400偏移,如下图所示:

FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第12张图片FAT32文件系统格式解析和具体应用分析(winhex)(整盘/磁盘大小计算)_第13张图片

可以根据test2.txt的文件大小0xB2==178byte(上面已知),提取出test2.txt的数据内容。至此,利用winhex从硬盘第一扇区定位到test2.txt文件存储内容偏移完成。

 

 

参考内容:

https://blog.csdn.net/u010650845/article/details/60881687(参考:FAT32文件系统原理)

https://www.cnblogs.com/fantacity/p/3900237.html(参考:FAT32根目录和数据区定位)

https://www.3d66.com/changjianwenti/tiwen_9980.html(参考:winhex注册码)

https://blog.csdn.net/KoalaZB/article/details/52829864(参考:winhex定位短文件和长文件实例)

你可能感兴趣的:(文件系统)