磁盘序列号
DiskSerialNumber 是 沙盘配置 中的一项沙箱设置,从 v1.15.2 / 5.70.2 版本开始提供。该设置允许为沙箱内的指定磁盘设备分配自定义序列号,并与 隐藏磁盘序列号 功能配合使用。
语法
- DeviceName:Windows 设备名称(如 HarddiskVolume1、HarddiskVolume2)
- SerialNumber:自定义的十六进制格式序列号(可带或不带连字符)
示例用法
[DefaultBox]
HideDiskSerialNumber=y
DiskSerialNumber=HarddiskVolume1,1234-ABCD
DiskSerialNumber=HarddiskVolume2,5678-EFGH
DiskSerialNumber=HarddiskVolume3,9ABC-DEF0
前置条件
- 需要在同一个沙箱中启用
HideDiskSerialNumber=y1 - 如果未满足该条件,DiskSerialNumber 设置将被忽略
序列号格式
支持的格式
- 带连字符:
1234-ABCD,AA-BB-CC-DD - 不带连字符:
1234ABCD,AABBCCDD - 混合:任意十六进制数字和可选连字符的组合
有效示例
DiskSerialNumber=HarddiskVolume1,1234ABCD
DiskSerialNumber=HarddiskVolume2,12-34-AB-CD
DiskSerialNumber=HarddiskVolume3,12345678
DiskSerialNumber=HarddiskVolume4,DEADBEEF
无效格式
- 含有非十六进制字符(G-Z)
- 十六进制数字为奇数位
- 空字符串
- 除连字符外的其它特殊字符
设备名称获取方法
方法一:使用 WMIC 命令
在命令提示符下运行以下命令以列出可用磁盘卷:
方法二:使用磁盘管理
- 打开 磁盘管理(
diskmgmt.msc) - 右键点击卷,查看属性
- 记录卷标和驱动器号
方法三:注册表查看
检查注册表项:HKEY_LOCAL_MACHINE\SYSTEM\MountedDevices
方法四:随机值测试法
- 设置测试配置:
DiskSerialNumber=HarddiskVolume1,11111111
DiskSerialNumber=HarddiskVolume2,22222222
DiskSerialNumber=HarddiskVolume3,33333333
- 在沙箱中运行
vol C:、vol D:等,确定各磁盘对应的设备名称
技术实现
设备路径解析
十六进制处理
缓存机制
使用场景
应用程序测试
- 测试软件对特定磁盘序列号模式的响应
- 模拟不同硬件配置
- 调试依赖序列号的功能
隐私增强
- 用已知值替换真实硬件识别码
- 创建一致的沙箱指纹
- 防止基于硬件信息的追踪
故障排查
常见问题
设置未生效
- 请确认已启用
HideDiskSerialNumber=y - 请核对设备名称格式是否正确
- 检查十六进制字符串的合法性
目标设备有误
- 通过设备获取方法确认名称是否正确
- 用唯一序列号进行映射测试
返回为随机值
- 非法十六进制格式会触发随机生成
- 设备名称不匹配会导致生成随机值
- 缺少
HideDiskSerialNumber前置条件
相关设置
配置可用性
- INI 配置:可用
- Plus 界面:不可用(仅支持 INI 配置)
- Classic 界面:不可用
-
前置条件:必须启用
HideDiskSerialNumber设置,设备序列号映射才会生效(kernel.c) ↩ -
设备路径解析:沙盘会在 NT 路径字符串中搜索
\Device\前缀,以提取设备名称(kernel.c) ↩ -
名称截断逻辑:设备名解析至遇到第一个反斜线或字符串结束符自动终止(kernel.c) ↩
-
回退行为:如果设备名为空,则通过
Dll_rand()生成随机序列号(kernel.c) ↩ -
十六进制解析实现:
hex_string_to_uint8_array()支持跳过连字符处理十六进制串(custom.c) ↩ -
错误处理:非十六进制字符、位数不对或解析失败均返回 FALSE 并触发随机生成(custom.c) ↩
-
字节序转换:当
swap_bytes=TRUE时,自动切换为 Windows 小端 DWORD 格式(custom.c) ↩ -
会话持久化:
map_insert()根据原始硬件值缓存每次计算的序列号(kernel.c) ↩ -
线程安全:临界区
Kernel_DiskSN_CritSec保护对序列号缓存的并发访问(kernel.c5) ↩ -
缓存键策略:以原始磁盘序列号为映射键值,确保每会话一致性(kernel.c) ↩