Windows 7 硬盘取证实战:MBR 分区表 3 个分区与 $Bitmap 物理偏移定位
Windows 7硬盘取证实战MBR分区表解析与$Bitmap物理定位技术当一块Windows 7系统的硬盘成为电子取证的关键证据时取证人员面临的第一个挑战往往是理解其底层存储结构。MBR主引导记录分区表作为传统硬盘的地图不仅决定了数据分布的物理格局更是定位关键系统文件的起点。本文将深入解析MBR分区表的十六进制结构并通过WinHex/X-Ways实战演示如何从分区表跳转到NTFS文件系统的$Bitmap元文件最终锁定目标数据的物理扇区位置。1. MBR分区表的底层解析在512字节的MBR扇区中446字节的引导代码之后隐藏着决定硬盘格局的64字节分区表。每个分区表项16字节其结构就像一张精密的电路图偏移量长度含义示例值十六进制0x1BE1引导标志80h活动800x1BF3起始CHS柱面/磁头/扇区01 01 000x1C21分区类型07NTFS070x1C33结束CHSFE FF FF0x1C64起始LBA扇区小端序3F 00 00 000x1CA4扇区总数81 15 73 00实战技巧使用WinHex查看MBR时按住Ctrl键滚动鼠标可进行十六进制与ASCII视图切换。分区表项的LBA地址需要转换为十进制才能用于跳转例如3F 00 00 00的小端序值为0x0000003F63。在Windows 7的典型三分区案例中系统保留系统分区数据分区分区表可能呈现如下结构80 01 01 00 07 FE FF FF 3F 00 00 00 81 15 73 00 // 主分区1 00 00 C1 FF 05 FE FF FF C0 15 73 00 40 EA 05 00 // 扩展分区 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 空项 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 // 空项注意扩展分区中的逻辑分区需要通过EBR扩展引导记录链式定位每个EBR都包含类似MBR的分区表结构。2. NTFS分区头解析与元文件定位当通过MBR定位到NTFS分区起始扇区后通常为LBA 63或2048首先映入眼帘的是NTFS引导扇区$Boot。这个扇区包含NTFS的身份证信息typedef struct { BYTE jump[3]; // EB 52 90 CHAR oemID[8]; // NTFS WORD bytesPerSector; // 512 BYTE sectorsPerCluster; // 8 WORD reservedSectors; // 0 // ...其他字段... ULONGLONG totalSectors; // 分区总扇区数 ULONGLONG mftStartLcn; // $MFT起始簇号 ULONGLONG mft2StartLcn; // $MFTMirr起始簇号 DWORD clustersPerFileRecord; // 每文件记录簇数常为1 } NTFS_BOOT_SECTOR;关键计算获取$MFT物理位置物理扇区 分区起始LBA mftStartLcn * sectorsPerCluster文件记录大小clustersPerFileRecord * sectorsPerCluster * 512通常为1024字节在取证工具中定位$MFT后可通过其下的元文件定位$Bitmap。$Bitmap文件如同NTFS的空间占用看板每个bit代表一个簇的使用状态$MFT条目结构 ---------------------------------------------------- | 标准信息头 | 文件名属性 | 数据运行列表 | | (0x30) | (0x30) | (0x80) | ---------------------------------------------------3. 实战WinHex定位$Bitmap物理偏移步骤1验证MBR分区结构在WinHex中按F9打开磁盘跳转到扇区0CtrlG输入0检查末尾是否为55 AA签名分析四个分区表项的活动标志和类型步骤2跳转到NTFS分区计算目标分区起始LBA如0x3F63CtrlG输入63跳转验证NTFS签名NTFS 字符串步骤3解析$Boot获取$MFT位置在偏移0x30读取每簇扇区数如0x08在偏移0x30读取$MFT起始簇号如0x00000000000C0000计算63 0xC0000 * 8 6291456步骤4定位$Bitmap跳转到6291456扇区$MFT起始搜索$Bitmap的文件记录特征字节FILE0在0x80属性中解析数据运行列表如31 01 40 00 00 00 00 00计算物理偏移分区起始LBA 簇号 * 每簇扇区数X-Ways技巧使用NTFS元文件导航功能可直接跳转数据运行列表格式[头字节][簇数][起始簇]头字节高4位表示簇数字节长度低4位表示簇号字节长度4. 关键数据结构对照表元文件作用定位方法取证意义$MFT主文件表$Boot→mftStartLcn所有文件记录的数据库$Bitmap簇分配状态$MFT中查找$Bitmap条目判断数据是否被覆盖$LogFile事务日志$MFT中查找$LogFile条目恢复文件操作历史$UsnJrnl更新序列号日志$MFT中查找$Extend$UsnJrnl追踪文件变更记录5. 典型电子取证场景分析案例1隐藏分区的发现当MBR中四个主分区表项看似已满但磁盘总空间大于已分配空间时可能存在通过无效分区类型字节隐藏的分区利用扩展分区链中未链接的EBR检测方法def find_hidden_partitions(disk): mbr read_sector(disk, 0) for i in range(4): entry mbr[0x1BEi*16:0x1CEi*16] if entry[4] 0x05 or entry[4] 0x0F: # 扩展分区 ebr_lba struct.unpack(I, entry[8:12])[0] while ebr_lba ! 0: ebr read_sector(disk, ebr_lba) # 检查EBR中的两个分区表项...案例2$Bitmap异常与数据残留正常情况下的$Bitmap应与文件系统状态一致。若发现$Bitmap标记为已用但$MFT中无对应记录 → 可能存在已删除但未覆盖的数据关键簇在$Bitmap中标记为空闲 → 可能遭到故意擦除取证策略对$Bitmap做位图导出与文件系统树进行交叉验证重点检查不一致区域的原始十六进制数据6. 高级技巧从物理偏移重建文件系统当分区表损坏时可通过特征值扫描定位关键结构NTFS $Boot签名搜索NTFS 55 AAFAT32特征F8 FF FF 0FFAT32签名计算可能的簇大小组合如4K8扇区# 使用dd和grep搜索NTFS分区 dd if/dev/sda bs512 skip1000000 | grep -obUaP NTFS\x20\x20\x20\x20\x20找到$Boot后可手动计算$MFT位置 $Boot中的mftStartLcn × 每簇扇区数 分区偏移根据$MFT重建文件目录树7. 电子取证的完整工作流程取证准备写保护设备连接计算原始镜像的MD5/SHA1如F895FD18E47A5371AEC6DB72D0AEDCA7记录物理参数柱面/磁头/扇区分区分析验证MBR/GPT签名提取所有分区表项检查分区类型与实际文件系统的一致性文件系统取证定位关键元文件$MFT、$Bitmap等提取文件时间戳如安装日期2016-09-09 05:26 UTC恢复删除记录数据关联分析注册表SOFTWARE hive检查用户配置文件如Hugo的SID 1000关联网络痕迹浏览器历史、下载记录特别提示在计算$Bitmap物理地址时务必区分分区内的逻辑簇号(LCN)与磁盘的绝对扇区地址。常见的错误是将LCN直接当作LBA使用导致跳转到错误位置。