手工修复U盘DBR 练习案例 From 创享杯电子数据取证线上大比武

背景

检材下载地址:https://pan.baidu.com/s/1BBKjMF15UTVBoMUsJ0GxMQ 提取码:cppu

(PS:由于镜像中大部分数据都是 \(00\) ,所以这个压缩包的压缩率特别夸张,高达 \(99.9\%\)

该检材来自于2020年4月美亚柏科举办的第一届“创享杯”电子数据取证线上大比武,我们拿到的是一个 DBR 受损的U盘的 .001 镜像,

选手需要首先修复镜像的DBR,才能导入取证大师等对文件系统进行进一步分析,本文将详细讲解这一过程。

前置知识(已尽量精简)

主引导记录 MBR(Master Boot Record):一般为硬盘的第一个扇区,负责引导操作系统挂载硬盘完成启动工作,

包含硬盘分区表(DPT),可以根据其找到操作系统所在分区并执行启动文件,并定位所有硬盘分区。

分区引导扇区 DBR(DOS Boot Record):是一段存储文件系统的基本参数和操作系统引导程序的代码,其在磁盘中独占一个扇区,一般标志着一个分区的开始。

DBR 的格式比较固定,以 NTFS 文件系统为例,大部分变量为固定值,但仍有需要人工关注的自定义数值,即下表所列。

字节偏移 字段长度 字段功能
0x0D 1 每簇的扇区数(通常是 8)
0x1C~0X1F 4 隐藏扇区数(分区前的扇区数/分区的起始扇区)
0x28~0x2F 8 文件系统的扇区总数
0x30~0x37 8 MFT 的起始簇号(元文件MFT的起始簇号)
0x38~0x3F 8 MFT 备份的起始簇号(MFTMirr 文件的起始簇号)

主文件表 MFT(Main File Table):是文件系统的核心,记录文件/文件夹的元数据和部分数据,每个 MFT 占用 \(2\) 个扇区。

修复流程

确定 DBR 状态

我们首先尝试直接用取证大师分析该U盘镜像的文件系统,

只被识别为了“为分配簇”,于是用 WinHex 打开:

可以识别到“起始扇区”和“分区1”,MBR 扇区应该是正常的,

单击“分区一”查看该分区的第一个扇区(DBR 的位置),发现全是 \(00\)

基本可以确定,由于唯一的分区 DBR 为空白,故取证软件无法解析文件系统,

但对于 NTFS 文件系统的分区(如何确定是 NTFS 下面会讲),最后一个扇区会是 DBR 备份。

我们尝试跳转查找,但只能看到一众 \(00\) ,说明 DBR 备份也同样杯破坏。

于是我们的任务就是重建出 DBR 扇区这 \(512\) 个字节的信息,让取证软件能读取该镜像。

至于为什么能确定本分区是 NTFS 文件系统,这个答案要在开头的 MBR 的磁盘分区表中发现。

选中部分为“分区1”的磁盘分区表表项,偏移 \(5\) 的位置记录了分区文件系统类型,\(07\) 对应着 NTFS。

于是我们知道“分区1”的文件系统为 NTFS,以下操作同样是基于该前提。

重建 DBR

逐字节填充 DBR 扇区是不太可行的,我们可以拷贝本地另一个分区的 DBR 过来,再修改关键参数。

这张图就是我拷贝的另一 NTFS 分区的 DBR,右边的窗口是 WinHex 的可视化模板,“查看” —— “模板管理器” —— “Boot Sector NTFS” 唤出。

红圈的部分即可能需要修改的内容,从上到下分别是每簇的扇区数、分区的起始扇区、文件系统的扇区总数、MFT 的起始簇号和 MFT 备份的起始簇号。

下面我们逐一修正。

0xC 每簇的扇区数 和 0x30 - 0x37 MFT 起始簇号

这个问题也被出到了比赛题目里,“答案格式”暗示了答案不会\(4\),即不是常规的 \(8\) 个扇区,需要人工计算。

WinHex 全局搜索 \(46\;49\;4C\;45\) (或字符串 \(FILE\)) 定位到第一个 MFT 表,即 $MFT 的记录。

如图所示,偏移 \(0×128(64bit)\) 的位置记录的是簇流大小,偏移 \(0×141(16bit)\) 的位置记录的是簇流长度,

偏移 \(0×143(32bit)\) 的位置记录的是起始簇位置,他们的值分别是:

簇流大小 \(40000H = 262144\;\;\) 簇流长度 \(80H = 128\;\;\) 起始簇位置 \(80000H = 524288\)

根据下列公式计算出每簇的扇区数:

\(簇大小 = ( 簇流大小 / 簇流长度 ) / 512 = (262144/128)/512 = 4 扇区\)

0x1C - 0x1F 隐藏扇区数

隐藏扇区数即分区的起始扇区,在 WinHex 中可以容器找到,定位到 DBR 的 \(EB\;52\) 处,左下角显示扇区号为 \(63\)

0x28 - 0x2F 文件系统的扇区总数

由于 MBR 需要负责定位所有的分区位置,所以这个值可以在 MBR 的磁盘分区表中找到。

分区表的每一条记录有 \(16\) 字节,偏移为 \(0C - 0F\)\(4\) 个字节记录的就是该分区的大小。

由于镜像中只有一个分区,所以这 \(4\) 个字节正好挨在了 MBR 结束符 \(55\;AA\) 前面,值为 \(777FC1H = 7831489\)

0x38 - 0x3F MFT 备份起始簇号

MFT 备份起始簇号即 $MFTMirr 文件的起始簇号,搜索相应字符串找到 $MFTMirr 的 MFT 位置,

左下角查看到其位于 \(18\) 号扇区,\(4\) 个扇区一个簇,簇号从 \(0\) 开始,故这个值为 \(4\)

利用模板或手工填写对应信息

至此我们找到了所有需要休整的数据,让我们使用 WinHex 的 Boot Sector NTFS 模板填写吧!

取证软件读取

使用取证大师读取添加 DBR 后的 001 镜像,文件系统成功解析。

注意:在 DBR 修正的过程中,绝对不可出错的参数为:每簇的扇区数文件系统的扇区总数MFT 的起始簇号三者,经过实验,其余参数出现一定程度的差错并不影响文件系统的分析。

参考资料

《存储原理与数据恢复 探究教程》田素诚 魏毅编著 - 中国人民公安大学出版社

posted @ 2021-09-23 20:25  暖暖草果  阅读(1911)  评论(0编辑  收藏  举报