数据恢复专题:恢复 exFAT 分区的 DBR、文件(13)
前言
本节将学习如何从底层恢复 exFAT 分区的 DBR,与如何从底层提取 exFAT 分区中的文件。
你可以在 https://winhex.im0o.top/ 中查看所有例题文件
知识点总览
- 实例:恢复丢失 DBR 的 exFAT 分区
- 实例:从 exFAT 分区中提取文件
实例:恢复丢失 DBR 的 exFAT 分区
从题库下载文件:211220 - 恢复 exFAT 分区的 DBR
附加虚拟磁盘文件
导入题目后可以从 计算机管理 —— 磁盘管理 中看到该虚拟磁盘显示位 “没有初始化”,其大小为 50GB,均未分配分区,可以初步判断该虚拟磁盘的 MBR(主引导扇区)损坏。
使用 Winhex 打开虚拟磁盘
使用 Winhex 打开该虚拟磁盘后可以观察到,主引导扇区损坏,首先填写位于最后两个字节的结束标志 55 AA
。
寻找分区 1
1 扇区为主引导记录-引导程序的备份。
从 2 扇区开始,使用快捷键 Ctrl+Alt+x
向下查找 16 进制数值 !00
(非零),可以查找到一段数据。
该数据为 exFAT 分区 DBR 后的数据,继续向后寻找其他数据。
在 75 扇区找到了 exFAT 的 DBR,推测该分区为 exFAT 分区结构,该扇区为该分区 DBR 的备份。
选中复制整个扇区,向前跳转 12 个扇区,到达 DBR 位置并粘贴。
读取 BPB 参数,可得分区位置为 00 00 00 00 00 00 00 3F
H,分区大小为 00 00 00 00 02 80 48 F5
H。
向记事本内填写该分区的参数:
- 分区类型:ex(07)
- 分区位置:63
- 分区大小:41,961,717
寻找分区 2
从分区 1 的 DBR 处向后跳转 41,961,717 个扇区,前往分区 2。
可以看到该扇区为空,后面有着和分区 1 的 DBR 后一个扇区相同的数据,初步判断该分区为 exFAT 类型分区。
向后跳转 12 个扇区,查看其备份位置。
如上图,备份位置为空,可以判断该分区的备份与 DBR 被损坏。
修复 exFAT 分区的 DBR
需要的数据
修复 exFAT 分区的 DBR 需要以下数据:
- 跳转指令:
EB 76 90
(固定值) - OEM 代号:
EXFAT
(ASCII 固定值) - 分区位置
- 分区大小
- FAT 表起始扇区号(FAT 表相对 DBR 的位置)
- FAT 表大小
- 簇位图文件起始扇区号(= FAT 表起始扇区号 + FAT 表大小)
- 总簇数
- 根目录首簇号
- 每扇区字节数:
09
(29=512 字节) - 每簇扇区数:
N
(2N = 每簇扇区数) - FAT 表个数:
01
(固定值) - 结束标志:
55 AA
(固定值)
首先填写好固定值与分区位置:
计算 FAT 表偏移位置
接着向后搜索 F8 FF FF FF
找到 FAT 表。
找不到 FAT 表可以向后多次搜索几次,或者打开“偏移计算”
用 FAT 表的位置减去分区 DBR 的位置:41963828 - 41961780 = 2,048
将该值填入 DBR 的 BPB 参数中:
计算 FAT 表大小
向后跳转 2048 扇区,到达 FAT 表位置,在空白处向下搜索 !00
,找到 簇位图文件位置。
用簇位图文件位置减去 FAT 表文件位置得到 FAT 表大小:41972020 - 41963828 = 8,192
将该值填入 BPB 参数中:
计算簇位图文件偏移位置
用簇位图文件位置减去分区 DBR 的位置:41972020 - 41961780 = 10,240
将该值填入 BPB 参数中:
计算每簇扇区数
在簇位图文件的空白处向下搜索 !00
到大写字符文件处。
跳转后位置如下图:
记录大写字符文件位置为:41972276
向后跳转 12 个扇区,到达文件末尾,向下搜索 !00
前往根目录。
记录根目录位置为:41972340
每簇扇区数为根目录位置 - 大写字符文件位置:41972340 - 41972276 = 64
因为 26 = 64,所以在 BPB 中需要填入值 06
:
计算总簇数
使用 Ctrl+G
快捷键跳转到根目录:41972340
查看簇位图文件的目录项“81H”,可以得知簇位图文件的大小为 122,824 字节。
用簇位图大小乘 8 可以得出总簇数: 122,824 * 8 = 982,592。
在 BPB 参数中填入总簇数:982,592。
计算根目录首簇号
使用 Ctrl+G 快捷键跳转到根目录:41972340
查看大写字符文件的目录项“82H”,可以得知大写字符文件所在的簇号为 6 号簇,根目录所在簇号即为 6 + 1 = 7 号簇。
将根目录首簇号填入 BPB 参数:
计算分区大小
分区大小为总簇数 每簇扇区数:982,592 64 = 62,885,888
将分区大小填入 BPB 参数:
将分区数据计入记事本
向记事本内填写该分区的参数:
- 分区类型:ex(07)
- 分区位置:41,961,780
- 分区大小:62,885,888
填写 MBR 主引导记录
将记事本中记录的数据填入 MBR 的分区表中并保存:
在磁盘管理中查看分区情况:
手动填写的 exFAT 分区无法被 Windows 资源管理器读出,但是可以通过 Winhex 识别到该分区:
也可以直接双击打开分区 2:
至此,本题结束。
实例:从 exFAT 分区中提取文件
从题库下载文件:211221 - 从 exFAT 分区中提取文件
本题的目标文件为:
hkl039.png
附加虚拟磁盘文件
导入题目后可以从 计算机管理 —— 磁盘管理 中看到该虚拟磁盘显示位 “没有初始化”,其大小为 25GB,均未分配分区,可以初步判断该虚拟磁盘的 MBR(主引导扇区)损坏。
使用 Winhex 打开虚拟磁盘
使用 Winhex 打开该虚拟磁盘何以观察到整个主引导扇区都为空,首先填写 MBR 的结束标志 55 AA
,接着向下寻找分区。
寻找分区
向下查找 16 进制数值 !00
,如图所示,可以判断出这段数据疑似簇位图文件,在空白处继续向下搜索非零。
由上图可知,我们搜索到了大写字符文件,可以判断该分区为 exFAT 分区,记录大写字符文件的起始位置:10559
计算每簇扇区数
向后跳转 12 个扇区,搜索非零,找到根目录:
记录根目录位置:10623,与大写字符位置相减得出每簇扇区数为:10623 - 10559 = 64。
找到文件的目录项
使用快捷键 Ctrl+F
向下搜索 Unicode 字符串:hkl039.png
搜索到了文件 hkl039.png
的目录项。
查看其文件属性 “C0H”,可以得知该文件的起始簇号为:00 00 00 14
H
文件大小为:00 04 55 D8
H
转化为十进制后:
- 起始簇号 20
- 文件大小 284,120
计算文件位置
回到根目录,查看大写字符文件的目录项 “82H” 属性的起始簇号:
大写字符文件的起始簇号为:6 号簇
根目录首簇号为 6 + 1 = 7 号簇
当前位于根目录,需要向后跳转 20 - 7 = 13 个簇达到文件数据的起始。
跳转至文件数据区,恢复文件
使用快捷键 Alt + G
向后跳转 13 * 64 = 832 扇区到达目标文件的数据位置:
右键文件头,点击“选块起始位置”,向后跳转 284,120 字节,到达文件末尾:
右键点击“选块尾部”选中整个文件数据:
右键选块——编辑——复制选块——至新文件:
将数据另存为一个 png 文件:
打开文件后没有提示损坏:
至此,本题结束。