4. MBR与GPT分区体系

分区表是磁盘取证中最先接触、也最容易被忽略的元数据层。它决定了操作系统如何理解磁盘上的数据边界,也决定了取证人员能否正确还原被删除、被隐藏或被篡改的分区。本节围绕MBR与GPT两套分区体系,从结构解析入手,逐步展开分区恢复、隐藏分区识别与分区表取证分析。

一、MBR分区表结构解析

MBR(Master Boot Record)位于磁盘的第一个扇区(LBA 0),共512字节。其结构分为三部分:前446字节为引导代码,中间64字节为分区表项(Partition Table Entry),最后2字节为结束标志0x55AA。64字节被均分为4个16字节的分区表项,因此MBR最多直接支持4个主分区。

每个16字节分区表项的字段布局如下:

偏移长度字段说明
0x001Boot Flag0x80为活动分区,0x00为非活动
0x013CHS起始地址柱面/磁头/扇区,历史遗留
0x041分区类型如0x07 NTFS、0x0B FAT32、0x83 Linux
0x053CHS结束地址同上
0x084LBA起始扇区小端序,关键取证字段
0x0C4分区扇区数小端序,决定分区边界

取证时重点关注LBA起始扇区与分区扇区数。若这两个字段被篡改,分区边界就会偏移,导致文件系统无法挂载。例如,一个NTFS分区原本起始于LBA 2048、长度为209715200扇区,若起始被改为LBA 4096,则挂载时读取到的将是分区内部数据而非NTFS引导扇区,表现为“分区存在但无法识别”。

MBR的扩展分区机制通过EBR(Extended Boot Record)链实现逻辑分区。每个EBR同样包含一个分区表项指向下一个EBR,形成单向链表。取证分析时需沿链遍历,注意EBR中的起始LBA是相对于扩展分区起点的相对值,而非绝对LBA,这是常见的解析错误来源。

二、GPT分区表结构解析

GPT(GUID Partition Table)使用LBA 1作为GPT头,LBA 2至LBA 33通常为分区表项数组(每个128字节,默认128项)。GPT头包含签名EFI PART、修订号、头大小、CRC32校验、当前LBA、备份LBA、分区表项起始LBA、分区表项数量、单个表项大小以及分区表项数组的CRC32。

每个GPT分区表项包含:分区类型GUID(16字节)、唯一分区GUID(16字节)、起始LBA(8字节)、结束LBA(8字节)、属性标志(8字节)和分区名(72字节,UTF-16LE)。属性标志中,bit 0表示“必需分区”,bit 1表示“隐藏分区”,bit 2表示“传统BIOS可引导”。取证时若发现bit 1被置位,说明该分区被标记为隐藏,操作系统默认不分配盘符。

GPT在磁盘末尾保留一份备份GPT头和备份分区表项数组。当主GPT头损坏时,可通过备份恢复。取证工具如gdisk可执行gdisk /dev/sdb后使用v验证、r进入恢复菜单、b从备份重建主GPT。命令行示例:

# 查看GPT结构
gdisk -l /dev/sdb

# 从备份GPT恢复主GPT
gdisk /dev/sdb
Command (? for help): r
Recovery/transformation command (? for help): b
Recovery/transformation command (? for help): w

三、分区恢复与隐藏分区识别

分区恢复的核心思路是:先判断分区表是否可读,再判断分区边界是否可信,最后通过文件系统引导扇区特征反向定位分区。常见场景包括:分区表被清空、分区项被删除、分区起始LBA被篡改、GPT头CRC校验失败。

对于MBR分区表被清空的情况,可使用testdisk进行快速扫描。Testdisk会遍历磁盘寻找文件系统引导扇区(如NTFS的NTFS 、FAT32的FAT32 、ext4的0x53EF魔数),并据此重建分区表。操作流程为:testdisk /dev/sdb → 选择分区表类型 → Analyse → Quick Search → 确认分区 → Write写回。

隐藏分区的识别可从三个层面入手:一是MBR分区类型字段使用非标准值(如0x17隐藏NTFS、0x1B隐藏FAT32);二是GPT属性标志bit 1被置位;三是分区表项存在但文件系统引导扇区被清零或替换。取证时应记录隐藏分区的起始LBA、大小、类型及属性,并与正常分区对比。

MBR 与 GPT 分区表取证分析对照 MBR 分区体系 LBA 0:引导代码 446B 分区表 64B(4×16B) + 0x55AA 分区表项关键字段 • Boot Flag:0x80 活动 / 0x00 非活动 • 分区类型:0x07 NTFS / 0x0B FAT32 / 0x83 Linux • LBA 起始扇区(偏移 0x08,小端序) • 分区扇区数(偏移 0x0C,小端序) 扩展分区 EBR 链 EBR 起始 LBA 为相对值,非绝对 LBA 沿链遍历,注意链表断裂与循环 常见篡改点 起始 LBA 偏移 → 分区无法挂载 类型字段改为隐藏值 → 盘符不分配 GPT 分区体系 LBA 1:GPT 头(EFI PART) LBA 2-33:分区表项数组(128×128B) GPT 头关键字段 • 签名 EFI PART + CRC32 校验 • 当前 LBA / 备份 LBA • 分区表项起始 LBA / 数量 / 大小 • 分区表项数组 CRC32 分区表项属性标志 bit 0 必需分区 / bit 1 隐藏分区 bit 2 传统 BIOS 可引导 恢复与取证要点 主 GPT 损坏 → 从备份 LBA 重建 CRC 校验失败 → 检查头与表项一致性 MBR:4 主分区 / 扩展链 / 无校验 | GPT:128 分区 / 双备份 / CRC32 校验 / 属性标志

四、分区表取证分析要点

分区表取证分析应遵循“先记录、后分析、再验证”的原则。第一步是制作磁盘镜像,使用dd或dc3dd获取完整镜像并计算哈希值,确保原始证据不被破坏。第二步是解析分区表,记录每个分区的起始LBA、结束LBA、类型、属性标志和分区名。第三步是交叉验证,将分区表信息与文件系统引导扇区、$MFT或超级块进行比对。

常见的异常模式包括:分区表项指向的LBA超出磁盘容量;两个分区表项重叠;GPT头中的分区表项数量与实际不符;备份GPT与主GPT不一致;分区类型GUID与文件系统实际类型不匹配。这些异常往往指向人为篡改或磁盘损坏。

注意:在分析分区表时,不要直接对原始磁盘执行写操作。所有恢复操作应在镜像副本上进行,并保留操作日志。若必须写回原始磁盘,应先完成镜像备份并记录哈希。

分区表取证的价值不仅在于恢复数据,更在于还原操作痕迹。例如,GPT属性标志中隐藏位被置位的时间、MBR分区类型字段被修改的顺序、EBR链中某个节点的缺失,都可能成为判断“谁在何时对分区做了什么”的关键线索。结合文件系统时间戳与日志,可以进一步构建完整的事件时间线。

实际案例中,某服务器磁盘出现“分区存在但无法访问”的故障。取证人员首先读取MBR,发现第一个分区表项起始LBA为2048、类型0x07,看似正常;但进一步读取LBA 2048处的内容,发现并非NTFS引导扇区,而是全零。继续搜索磁盘,在LBA 4096处发现NTFS引导扇区。由此判断分区起始LBA被从4096篡改为2048。修正后分区恢复正常挂载。该案例说明,分区表字段的微小偏移即可导致整个分区不可用,而反向搜索文件系统特征扇区是定位真实边界的有效手段。

综上,MBR与GPT分区体系是磁盘取证的入口层。掌握分区表结构、理解扩展分区链与GPT双备份机制、熟悉分区恢复工具与隐藏分区识别方法,是开展后续文件系统取证与数据恢复的前提。取证人员应始终以镜像为基础,以交叉验证为手段,以时间线重建为目标,确保分析结论可复现、可追溯。