参考 MS-DOS 的 USBMS 数据包的来源

参考 MS-DOS 的 USBMS 数据包的来源

当我注意到一个 MP3 播放器在响应大容量存储的第一个块上的读取请求时发送了一些奇怪的数据包时,我一直在研究通过 USB 进行流量拦截(使用 Wireshark)。

大小约为 4Kb,SCSI 有效负载包含重复字符串,例如:

X MSDOS 5.0
NO NAME    FAT32   
BOOTMGR    
Remove disks or other media.
Disk error
Press any key to restart

或者看起来像是整个字符集,它们似乎超出了 ASCII 范围所以我不确定,但它们肯定包含所有可打印的 ASCII 字符。

问题是我正在运行 Fedora,当时没有连接其他设备。

该设备似乎也没有正确注册到总线。抛出如下错误:

device descriptor read/64, error -110

尽管它确实已安装,但它会间歇性地断开连接,甚至lsblk难以枚举它,尽管当它确实描述它使用 FAT32 时,我认为这是一个合理的假设。

该设备由 Rockchip 制造/设计,确实在唯一可访问的分区上存储了固件备份,但它使用的是我不熟悉的图像格式。无法安装它,而且它看起来也不像档案,周围有一些“工具”,但我并不想碰它们。

配置文件中有中文注释,设备上有数量惊人的日志,似乎与工厂测试有关。但这些都无法真正帮助我弄清楚这些数据包的含义。

MS-DOS 有可能出现在 2010 年代早期的 MP3 播放器上吗?这似乎不太可能。但 BOOTMGR 消息指向 MS 方向,我很难看出它还能从哪里来。

或者它只是文件系统的描述符,有点太过了?可能是,我真的没有参考点。

示例数据包摘要:

1957    16:16:26.979364 1.22.1  host    USBMS   4160    SCSI: Data In LUN: 0x00 (Read(10) Response Data) 

答案1

那只是一个非常典型的 VBR(卷引导记录),即0 区,FAT 格式分区的 VBR。具体来说,它是所有最新的 Windows Vista/7/8/10 系统在将分区格式化为 FAT 时都会写入的 VBR(因此引用了 BOOTMGR)——您很可能会在很多 USB 记忆棒上找到相同的内容。事实上,我写这个答案主要是使用新格式化的 USB 记忆棒作为参考。

从技术上讲,整个 VBR 将被 BIOS 视为可执行代码,就像 MBR 中的磁盘级引导代码一样,但在 FAT 卷上,它还包括不同数量的元数据字段(前面有一个跳转指令,使 CPU 直接跳过它)。

0x003处MSDOS5.0的“OEM 名称”字段大致表示什么操作系统格式化了卷。(很可能它指的是 MS-DOS,就像 Web 浏览器用户代理指的是 Mozilla/5.0 一样。)NO NAME显然卷标的副本(存储在扩展启动参数块)。

最后,BOOTMGR实际上是可执行引导代码的一部分——Windows 编写的标准 FAT32 VBR 将搜索名为“引导程序' 保存引导加载程序的其余部分(以前在 Win2000/XP 时代,这是 NTLDR)。如果找不到该文件,引导代码将打印后面的消息(“ Remove disks”等)。

总之,您实际上只是在查看 SCSI“读取”命令的结果,如果您在“块设备”级别检查 MP3 播放器的存储(例如,通过在/dev/sdb1Linux 上读取),您将看到相同的数据。请记住,VBR 是扇区 0第一个分区,因此它可能是 SCSI 级别的 LBA 2048。

请注意,玩家本身就其启动过程而言,它并不关心该扇区的内容——这是一个数据卷,而不是启动卷,因此提到“MSDOS”并不暗示播放器将运行 MS-DOS,就像它不会导致您的 PC 突然启动 MS-DOS 一样。

相关内容