【取证】浅谈注册表与磁盘盘符的关系

磁盘挂载信息在注册表中的位置

已挂载设备的配置信息存储在以下注册表键中:
HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
此键值集合也称为装载管理器的持久名称数据库,用于记录卷的唯一标识符、驱动器号及装入点信息。


\MountedDevice键值类型与数据结构

名称 数据类型 描述
%IDENTIFIER% REG_BINARY 支持以下标识符格式:
  1. \DosDevices\C: — 分配给文件系统根目录的驱动器盘符(如C盘)。
  2. \DosDevices\F:\path\name — 分配给文件系统内目录的驱动器盘符(罕见)。
  3. ??\Volume{GUID} — Windows内核对象管理器使用的唯一卷标识符(GUID格式)。
  4. #{GUID} — 用途未知的保留标识符。

键值数据包含以下三类之一:

  • 设备字符串值数据(UTF-16字符串)
  • GPT分区值数据(24字节结构)
  • MBR分区值数据(12字节结构)

对于固定磁盘(本地磁盘) 的键值数据形式是GPT分区值数据或MBR分区值数据,对于可移动磁盘(U盘、CD-ROM等)的键值数据形式是设备字符串值数据。USB移动硬盘或量产为USB HDD的闪存盘属于固定磁盘(本地磁盘)


设备字符串值数据

结构

偏移量 大小 描述
0 类似以下示例 UTF-16小端编码字符串,无终止符

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\??\SCSICdRom&Ven_NECVMWar&Prod_VMware_SATA_CD015&260e6d66&0&010000{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}

1. 前缀 \??\
含义:Windows本地设备命名空间(Local Device Namespace),用于直接访问物理设备或逻辑卷。

2. 设备类型 SCSICdRom
含义:SCSI:设备接口类型,表示通过SCSI协议连接(常见于虚拟化环境,如VMware)。CdRom:设备类型为CD/DVD光驱。

3. 厂商标识 Ven_NECVMWar
含义:Ven_:厂商(Vendor)缩写,此处组合了 NEC(日本电气)和 VMWar(VMware),表明是VMware虚拟化环境中模拟的NEC光驱设备。

4. 产品标识 Prod_VMware_SATA_CD015
含义:Prod_:产品(Product)缩写,表示设备型号。VMware_SATA_CD015:VMware虚拟的SATA接口CD/DVD光驱,型号为CD015。

5. 设备实例ID 260e6d66&0&010000
含义:
唯一标识符:由设备序列号、总线号、端口号等组成。
260e6d66:可能是设备序列号或唯一硬件标识。
0&010000:表示总线号(Bus Number)和逻辑单元号(LUN, Logical Unit Number)。

6. 设备接口类GUID {53f5630d-b6bf-11d0-94f2-00a0c91efb8b}
含义:设备接口类全局唯一标识符,表示设备类型。

GPT分区值数据

结构(24字节):

偏移量 大小 描述
0 8 DMIO:ID: 磁盘管理器I/O驱动签名
8 16 GUID GPT分区标识符(小端)

image-20250227205535693


MBR分区值数据

结构(12字节):

偏移量 大小 描述
0 4 MBR磁盘标识符(签名)
4 8 分区字节偏移量

image-20250227205802552


如何确定磁盘所对应盘符

目前我们知道通过在注册表HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices 中,如果是GPT分区的固定磁盘,在该注册表中记录的是GPT的分区表 GUID(Partition GUID),如果是MBR分区的固定磁盘,在该注册表中记录的是MBR的硬盘签名(disk signature),如果是可移动磁盘(USB、CDROM)等设备记录的是设备信息的字符串数据,因此针对不同格式的磁盘,我们在磁盘中找到对应的硬盘签名(disk signature)、GUID(Partition GUID)或序列号(Serial number),与注册表中键值数据进行比对,我们就能确定当前所分析的磁盘对应的盘符。

查看 GPT 分区表 GUID

注意:这里查看的是已挂载磁盘分区表的GUID(Partition GUID)不是硬盘GUID(Disk Guid)

  1. 打开磁盘或磁盘镜像

    • 启动 WinHex,以管理员身份运行(需权限访问物理磁盘)。

    • 打开磁盘:点击菜单栏 工具打开磁盘(快捷键:F9),选择目标物理驱动器(如 Physical Media\Disk 1

      或者打开磁盘镜像:点击菜单栏 文件打开(快捷键:Ctrl+O),选择要打开的磁盘镜像文件,点击菜单栏 专业工具将镜像文件转化为磁盘

  2. 查看GPT 分区表信息

    • 方式一:点击文本信息栏顶部一个形如 v 的按钮→ 分区表(模板)。同时 v 下也显示当前硬盘下的分区信息,一般来说容量最大的分区就是我要要找的已挂载并被分配盘符的分区。

      image-20250227223115188

    • 方式二:点击菜单栏 查看模板管理器(快捷键:Alt+F12),选择GUID Partition Table模板并应用

      image-20250227224104324

  3. 读取 GUID

    • 找到那个容量最大的主要分区的分区表信息, Unique Partition GUID 为此分区的 唯一GUID(小端格式)。

      image-20250227224449113

    • 第一个 Unique Partition GUID 是十六进制格式的分区GUID,可以看到他与注册表中**\DosDevices\C:**的键值数据中第9到24字节的数据是一致的,说明该分区对应挂载的盘符就是C盘

      1
      D4 94 BE 74 80 FD 29 43 92 A5 B0 7C 14 C5 5A 9F 

      image-20250227230210421

    • 第二个 Unique Partition GUID是转化为字符串的分区GUID,首先这边的GUID数据是小端序(Little-Endian)存储,但是这里的GUID转化不是简单的逆序一下,有特定的规则

      1. 分解原始数据

      原始数据为32个十六进制字符(128位),需按GUID的格式(8-4-4-4-12)分解为以下5组:

      1
      D494BE74 80FD 2943 92A5 B07C14C55A9F

      2. 调整小端字节序

      由于GUID的 前3部分 采用小端存储,需对每部分内的字节顺序进行反转:(十六进制中每两个字符为一个字节,调整顺序时是每两个字符看做一组进行调整的)

      • 第一部分 D494BE74 → 反转后为 74BE94D4
      • 第二部分 80FD → 反转后为 FD80
      • 第三部分 2943 → 反转后为 4329
      • 第四部分 92A5 → 反转后为 92A5
      • 第五部分 B07C14C55A9F无需反转(保持原顺序)

      3. 生成标准GUID字符串

      将调整后的各组以连字符连接,得到最终结果:

      1
      74BE94D4-FD80-4329-92A5-B07C14C55A9F

      对应GUID{74BE94D4-FD80-4329-92A5-B07C14C55A9F}

      这里是题外话,如果只是想看磁盘分区对应的盘符,用十六进制数据去比对反而更快


查看 MBR 磁盘签名

  1. 打开磁盘

    • 同上步骤,打开目标 MBR 格式的磁盘或磁盘镜像
  2. 查看MBR分区表信息

    • 方式一:点击文本信息栏顶部一个形如 v 的按钮→ 分区表(模板)

    • 方式二:点击菜单栏 查看模板管理器(快捷键:Alt+F12),选择Matser Boot Record模板并应用

      image-20250228000525681

  3. 读取签名值

    • 方式一:MBR分区表信息信息中Windows disk signature的值就是MBR分区磁盘的磁盘签名(disk signature),下面的那个Same reversed就是磁盘签名的原始十六进制数据(小端序),可以看到这里的磁盘签名(disk signature)与注册表中**\DosDevices\F:**的键值数据中第1到4字节的数据是一致的,说明该分区对应挂载的盘符就是F盘

      image-20250228000854670

      image-20250228001444985

    • 方式二:MBR 磁盘签名位于首扇区(LBA 0)偏移 0x1B8(十进制440)处,占 4字节

      点击菜单栏 导航转移到偏移量(快捷键:Alt+G), 输入 1B8确定 直接跳转。

      该处往后的四个字节FB 98 60 E1就是磁盘签名的十六进制数据:(小端转换为实际值 FB 98 60 E1 就是磁盘签名)。

      image-20250228002837896

      image-20250228002800731


查看 USB 设备序列号

在\MountedDevice中对于可移动设备的键值数据是一段描述设备信息的字符串(格式如_??_USBSTOR#Disk&Ven_TOSHIBA&Prod_TransMemory&Rev_PMAP#序列号&0#{53f56307-b6bf-11d0-94f2-00a0c91efb8b}),其中包含了USB设备的序列号,因此我们只要找到USB设备的序列号就能找到对应的盘符,但是USB设备的序列号通常存储在设备的固件描述符中,由操作系统通过USB协议读取。多数USB设备的序列号存储在控制器固件中,无法通过WinHex直接读取,因此这里要查看可移动磁盘的序列号就要挂载,既然挂载了,我就已经知道盘符了,再去比对注册表就多次一举了,所以以下仅谈论如何查看 USB 设备序列号。

1. 通过系统工具查看

  • Windows 设备管理器

    1. 右击“此电脑” → 管理 → 设备管理器。

    2. 找到目标USB设备(如U盘、鼠标等),右击 → 属性详细信息

    3. 在属性下拉菜单中选择 “设备实例路径” 或 **”父系”**,其中可能包含序列号(格式如VEN_XXXX&PROD_XXXX&REV_XXXX&序列号&0VID_XXXX&PID_XXXX&序列号)。

      image-20250228021737318

  • 命令行/PowerShell

    1
    Get-PnpDevice -PresentOnly | Where-Object { $_.InstanceId -match 'USB\\VID' } | Select-Object FriendlyName, InstanceId

    image-20250228021205850

2. 通过注册表查找

  1. 打开 注册表编辑器(regedit)。

  2. 导航至路径:

    1
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB
  3. 在子键中查找设备对应的VID/PID,其下的子键一般就是序列号。

    image-20250228021059075


3.使用专业工具查看(推荐)

  1. USBDeview

    image-20250228024027447

  2. ChipGenius

    image-20250228024201216


参考文章

  1. Mounted devices — Windows Registry knowledge base (winreg-kb) 20240211 documentation

  2. [最后编辑:2009.8.6 12:20]注册表与盘符 - PE讨论区 - 无忧启动论坛 - Powered by Discuz!