目录
#软件/磁盘#
打开 [右键此电脑→显示更多选项→管理→磁盘管理]。
右键“磁盘管理”,选择“附加VHD”。
将所需故障磁盘添加。
添加完成后打开“WinHex”。
点击右上角列表的“Open Disk”。
选择故障磁盘。
完成
#FAT32 结构详解#
本目录为了解DBR的构造以及含义
FAT32文件系统由“引导区”“保留区”“FAT表”“数据区”构成 。
分区结构
引导区
引导区也被称为DBR。其主要功能是完成操作系统的自举并将控制权交给操作系统。每个分区都有引导扇区,但只有被设为活动分区才会被MBR装的DBR入内存运行。通常DBR位于FAT32文件系统的“0号扇区”。开头固定标识为“EB 58 90”。
保留区
通常存在DBR后,在实际数据恢复中无需在意。
FAT表
FAT表,也被称为“文件分配表”,用于记录分区中文件系统数据区对应簇的使用状态及文件不连续状态下的前后链接关系。正常情况下每个FAT32系统中存在2个FAT表。FAT表2为FAT表1的备份,固定标识为“F8 FF FF 0F”。
数据区
数据区是FAT32文件系统的核心区域,所有数据文件均存储在此处区域。数据区包含“根目录”和“子目录”。数据区的起始位置为根目录的起始位置,根目录位置固定为“2号簇”。
各结构解析
本目录为各结构的解析。
引导区
FAT32的DBR由5部分构成,分别是“跳转指令”“系统版本号”“BPB参数”“引导程序”“结束标识”。
⚠重要参数如下
0x00-02:跳转指令{EB 58 90}为DBR开头的固定标识
0x0B-0C:每扇区字节数{00 02}:固定值“512”
0x0D:每扇区字节数{40}:分区分配的虚拟单位(非固定)
0x10:FAT表个数{02}:记录分区内有效FAT表个数(需随机应变)
0x15/18/1A:固定值分别为“F8”“3F”“FF”
0X20-23:分区大小{00 40 80 0C}:记录了分区总扇区单位扇区
0x24-27:FAT表大小{01 3C 00 00}:记录了FAT表大小单位扇区
0x2C:根目录簇号{02}:记录了根目录的簇号
0x30;32:固定值分别为”01“”06“
0x52-56:文本区为”FAT32“
0xFE-FF:结束标识”55 AA“
FAT表
FAT表固定标识:F8 FF FF 0F。FAT表一般只用于计算分区大小。
根目录/子目录
FAT32文件系统中,统一在数据区的根目录区为根目录创建目录项,并由FAT表为文件的内容分配簇来存放数据。根目录区的首簇由格式化程序指派,并把簇号记录在DBR的BPB中。
根目录对于文件或文件夹的形容有32字节(俩行) ,第一行记录文件名,第二行记录文件簇号以及大小。
以下为文件4.JPG为例
0xE0-E7:文件名
0xE8-EA:文件扩展名
0xEB:文件类型,10为文件夹,20为文件
0xF4-F5:文件高位簇:将此数据x65536+低位簇计算值
0xFA-FB:文件低位簇:将此数据x每簇扇区数+高位簇x65536即可定位到文件的起始扇区
0xFC-FF:文件大小(单位为字节)
#FAT32文件系统手动提文件#
在WinHex中打开故障磁盘
向下搜索”!00“,直到跳到根目录。
计算每簇扇区数
到达根目录。
记下他的簇号。
继续往下搜”!00“,到达他的子目录。
记下他的簇号。
用”根目录“-子目录”,算出他的每簇扇区数。
算出他的每簇扇区数为“128”。
计算文件位置与大小
需提文件存储在根目录中
这里以文件“1.doc”为例。
文件位置
读取第二行“A”"B"处数据,读取到的数据为“6”。
用“(文件位置-根目录位置)*每簇扇区数”得出文件的实际位置
得出文件实际位置为“512”。
文件大小
读取第二行“C”"D""E""F"处数据,读取到的数据为“10240”。
提出文件
回到根目录首,向下偏移“512”个扇区。注意进制需要从十六进制调整为十进制,点击左边列表即可。
到达文件实际位置。
在开头第一个字节选择右键,选择“Beginning of Block”定开头。
往下偏移“10240”个字节,跳到文件尾。选择“End of block”定结尾。
Ctrl+Shift+N 保存,提出。
需提文件存储在文件夹中
文件夹位置
这里以“文件夹1”为例。
读取第四列“A”“B”处数据 ,读取到的数据为“1971”,注,文件夹没有大小。
用“(文件夹位置-根目录位置)*每簇扇区数”得出文件夹的实际位置。得出文件夹的实际位置为“252,032”
文件位置
向下跳转“252,032”个扇区,到达下一级目录
这里以“A001.DOC"为为例。
读取第二行“A”"B"处数据,读取到的数据为“1,972”。
用“(文件位置-文件夹位置)*每簇扇区数”得出文件的实际位置
算出文件的实际位置为“128”。
文件大小
读取第二行“C”"D""E""F"处数据,读取到的数据为“22,528”。
提出文件
回到文件夹首,向下偏移“128”个扇区。注意进制需要从十六进制调整为十进制,点击左边列表即可。
到达文件实际位置
在开头第一个字节选择右键,选择“Beginning of Block”定开头。
往下偏移“22,528”个字节,跳到文件尾。选择“End of block”定结尾。
Ctrl+Shift+N 保存,提出。
#FAT32文件系统修复DBR开盘提出文件#
修复FAT32文件系统DBR时,需了解DBR的必要参数和位置。详情参数可参照目录中“各结构解析”→“引导区”。
修复DBR需要的数据分别为:“跳转指令”,“每簇扇区数”,“分区大小”,“FAT表大小”,“结束标识”,"FAT文字标识",“结束标识”,"几个固定数值".“DBR保留扇区数”。
例题:
可以看出此磁盘DBR已被删除,需要通过手动修复DBR进行开盘。
所需数据:“每簇扇区数”,“分区大小”,“FAT表大小”,“保留扇区数”需要手动计算
先将DBR中固定数值写入。
跳转指令
"EB 58 90"存在于DBR开头处。
结束标识
“55 AA”DBR结束标识,存在于DBR末尾。
FAT文字标识
"FAT32" 放置在0x52至0x56处,可直接在文本区输入“FAT32”,也可直接在数据区输
“46 41 54 33 32”。
固定数值
0X0C:0C | 0X10:02 | 0X15:F8 | 0X18:3F |
0X1A:FF | 0X22:02 | 0X20:01 | 0X32:06 |
每簇扇区数
从DBR开始向下搜索“!00”,跳到“根目录”。
记下它的簇号。
继续往下搜索,直到跳到“子目录”。
记下它的簇号。
将“子目录”的簇号减去“根目录”的簇号即可得出“每簇扇区数”。
将数据填在0x0D处。
FAT表大小
从DBR开始向下搜索“!00”,跳到“FAT表1”。
记下它的簇号。
继续往下搜搜“!00”,直到“FAT表2”。
记下它的簇号。
用”FAT表2“减去”FAT表1“即可得到FAT表大小。
将FAT表大小填在0x24至0x27“
DBR保留扇区
用”FAT1减去”DBR所在位置簇号“
将数据填至”0x0E至0x0F”
分区大小
分区大小=(“FAT2”-"FAT1")×每簇扇区数×128
将数据填至“0x20至0x23”
至此,全部数据已全部填好
开盘
打开WinHex中开盘选项
这里填入“分区大小”
这样即表示分区已找到
修复DBR成功