Fat32文件系统是之前windows os中常用的文件系统,在这篇文章中我们要找到:
1. 第一分区的起始扇区
2. 第一个文件文件配置表(FAT)的位置
3. 数据区域的位置
4. 文件“file1.txt”所在的簇
1 首先,用HxD打开所要解析的FAT32的文件
2 选择所要分析的文件,打开后,在起始的sector0,也就是0扇区我们就会看到该系统的主引导,在结束标志的55AA之前的64位为主分区记录表(Master Partition Table),记录了各个分区的信息。
offset1BE 00表示不可引导,80表示可以从该分区启动
offset1BF-1C1 表示CHS(Cylinder-Head-Sector,先找柱面,然后磁道,再找扇区的寻址方式)起始地址 000101(window OS中都是以LITTLE-ENDIAN(小字节序、低字节序的方式存储,即低位字节排放在内存的低地址端,高位字节排放在内存的高地址.
offset1C2 表示分区标志位
offset1C3-1C5 表示CHS的结束地址
offset1C6-1C9 占32位 表示起始扇区 0000003F=63
offset1CA-1CD 表示该扇区的长度
其余三个扇区记录为0表示unused
3 找到第一分区的起始扇区后我们跳转到其所在的位置63扇区,分析其引导记录中的信息
offset7E0B 占16位 表示byte/sector 每扇区有多少字节的容量 0200(h)=512 byte
offset7E0D 占8位 表示sectors/cluster 每一簇有多少扇区 02
offset7E0E 占16位 表示保留区域内容占多少扇区 0022(h)=34
offset7E10 占8位 该分区有几张FAT表 2
offset7E16 占16位 表示sectors/FAT 若此区域内数字为0, 则跳转到下一行的第5字节,即offset7E24 占32位 000002EB(h)=747 sectors
所以FAT1的偏移量为【第一分区的起始位置(引导记录所在的63扇区)+保留区域的扇区数(34)】*【byte/sector (512)】=49664
相对于第一分区的偏移量为49664-7E00(h)=49664-32256=17408
用户数据区域位置在FAT表结束后的下一个扇区,也就是第一分区起始扇区+保留扇区+FAT表扇区=63+34+2*747=1591
3.跳转到1591扇区,我们就可以看到用户真实文件的记录 FAT Directory Entriy
选中的区域为文件一信息目录, 在offset6E88的位置为文件的属性标志,文件1置08表示其位volumn label也就是使用该文件系统启动时file1.txt不可见
offset6E9A 占16位,表示file1.txt的起始簇 0011(h)=17
在FAT32中,每一簇的信息占32位,4个字节。所以从offsetC200开始算起,数17个4字节 ,找到了offsetC244,为18[00000012(h)]---19[13(h)].......34[22(h)---FFFFFF0F(停止)
所以file1.txt所占的簇为17——34