如何使 U 盘上的文件不可删除?

Meg*_*rda 15 windows filesystems file-attributes fat32

有人使用了我的 USB 驱动器,在将它归还给我后,我发现了一个无法autorun.inf删除的驱动器。我尝试更改它的文件属性,该属性仅为 H(甚至未设置为系统文件),但它一直说拒绝访问。

USB设置为FAT32,询问我的朋友,他告诉我他使用Panda USB Vaccine

他们怎么做到的?我试图使用一些磁盘扇区编辑器,但不知道他们更改哪个十六进制文件来制作这种文件并使其再次可删除。格式化驱动器会删除它,但我很好奇如何能够设置这些类型的文件属性。

Den*_*nis 16

测试方法

熊猫似乎没有透露其“疫苗”的确切机制,这是可以理解的,因为它基本上是通过默默无闻来确保安全的。如果你知道它是如何工作的,你就可以逆转效果,而“疫苗”就变得毫无用处了。

我下载并安装了Panda USB Vaccine并“接种”了我的闪存驱动器,使用命令为 windows使用dd转储闪存驱动器的分区

dd --list

dd if=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} of=C:\vaccinated.img
Run Code Online (Sandbox Code Playgroud)

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx第一个命令提供的 GUID在哪里,c:\vaccinated.img在十六进制编辑器中打开并搜索AUTORUN.

USB 疫苗的作用

for 的条目以AUTORUN.INF以下十二个字节开头:

41 55 54 4F 52 55 4E 20 49 4E 46 42
Run Code Online (Sandbox Code Playgroud)

前 11 个字节只是用空格填充的8.3 文件名AUTORUN INF

最后一个字节指定文件的属性,其二进制表示为:

01000010
Run Code Online (Sandbox Code Playgroud)

根据Microsoft EFI FAT32 文件系统规范,最后一个字节是采用以下形式的位字段:

XYADVSHR
Run Code Online (Sandbox Code Playgroud)

其中位ADVSHR1当且仅当该文件被存档,目录,卷ID 1,系统文件,隐藏或只读的。AUTORUN.INF隐藏,因为H设置为1

XY是保留的,都应该是0。但是,USB 疫苗设置Y1.

规范说明了什么

属性字节的高两位是保留的,在创建文件时应始终设置为 0,此后不再修改或查看。

此外,它建议验证目录内容:

提供这些指南是为了使磁盘维护实用程序可以验证各个目录条目的“正确性”,同时保持与目录结构未来增强功能的兼容性。

  1. 不要查看标记为保留的目录条目字段的内容,并假设如果它们是零以外的任何值,则它们是“坏的”。

  2. 当目录条目字段包含非零值时(假设它们是“坏的”),请勿将标记为保留的目录条目字段的内容重置为零。目录条目字段被指定为reserved,而不是must-be-zero。您的应用程序应该忽略它们。这些字段用于文件系统的未来扩展。通过忽略它们,实用程序可以继续在操作系统的未来版本上运行。

实际发生了什么

CHKDSK 肯定遵循规范并忽略AUTORUN.INFFAT32 驱动程序不理解的条目,但 Windows 本身似乎不符合规范的要求,不再查看保留位:任何类型的访问(除了列出文件及其属性)被拒绝。

例如,命令

DIR /A /Q
Run Code Online (Sandbox Code Playgroud)

声明的所有者AUTORUN.INF...。由于 FAT32 不支持文件所有权,它应该声明\All.

这种意外行为的原因是,根据FAT32 - Wikipedia # Directory entry,Windows 在Y内部使用该位来表示字符设备名称(CON、PRN、AUX、CLOCK$、NUL、LPT1、COM1 等),并且它不应该出现在存储设备上。2

从某种意义上说,USB Vaccine 欺骗 Windows 假设它AUTORUN.INF不是一个实际的文件,而是一个无法读取或写入的设备。

如何删除文件

如果您可以直接访问文件系统,则只需设置Y0(将字节更改4202)即可再次删除文件。您也可以将目录条目的第一个字节设置为E5,直接将文件标记为已删除。3

另一种选择是使用不同的驱动程序。例如,Ubuntu 12.04 可以毫无问题地删除文件。实际上,它在阅读时会自动“修复”目录条目。4


1该属性用于例如卷标或文件夹系统卷信息

2当然,设置X1似乎没有任何效果。

3我通过C:\vaccinated.img使用十六进制编辑器更改相应字节并使用以下命令将修改后的图像写入闪存驱动器来验证这一点:

dd if=C:\vaccinated.img of=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
Run Code Online (Sandbox Code Playgroud)

4虽然明显偏离规范,但似乎是经过深思熟虑的。X如果设置为1,Ubuntu 会保持原样,因为它没有危害。将Y位设置为1很容易被恶意应用程序滥用,例如,通过创建占用驱动器整个可用空间的不可删除文件。


Lès*_*sté 6

这是一个巧妙的文件系统技巧,它利用了 Win32 命名空间中的保留名称。此处概述了 Panda USB Vaccine 如何做到这一点的详细信息

本质上,该软件会创建一个名为的文件夹autorun.inf(防止在那里创建具有相同名称的文件),然后在该文件夹LTP1中创建一个名为的文件。在 DOS 中,LPT1指的是打印机端口,Windows 支持它以实现向后兼容。因此,当您请求名为 的文件时LPT1,Windows 会尝试打开打印机端口,这会以某种方式阻止该文件夹正常删除。

至于如何在不格式化驱动器的情况下删除文件夹/文件,这篇微软知识库文章给出了一些提示:

原因 5:文件名包含 Win32 命名空间中的保留名称

如果文件名包含 Win32 命名空间中的保留名称(例如,“lpt1”),您可能无法删除该文件。要解决此问题,请使用非 Win32 程序重命名该文件。您可以使用 POSIX 工具或任何其他使用适当内部语法的工具来使用该文件。

此外,如果您使用特定的语法来指定文件的路径,您也许能够使用一些内置命令来绕过典型的 Win32 保留名称检查。例如,如果Del 在 Windows XP 中使用该命令,如果使用以下特殊语法指定文件的完整路径,则可以删除名为“lpt1”的文件:

del \\?\c:\path_to_file\lpt1
Run Code Online (Sandbox Code Playgroud)

有关在 Windows NT 和 Windows 2000 下删除具有保留名称的文件的详细信息,请单击下面的文章编号以查看 Microsoft 知识库中相应的文章:

120716 如何在 Windows 中删除具有保留名称的文件

有关在 Windows XP 下删除具有保留名称的文件的详细信息,请单击下面的文章编号以查看 Microsoft 知识库中的文章:

315226 如何在 Windows XP 中删除带有保留名称的文件

如果使用典型的 Win32CreateFile 机制打开文件句柄,则某些文件名将保留给旧式 DOS 设备。为了向后兼容,不允许使用这些文件名,并且不能使用典型的 Win32 文件调用来创建它们。但是,此问题不是 NTFS 的限制。

您可以使用 Win32 程序绕过创建(或删除)文件时执行的典型名称检查,方法是使用与遍历比MAX_PATH. 此外,某些 POSIX 工具不受这些名称检查的约束。

  • 这是熊猫USB疫苗保护USB驱动器免受恶意autorun.inf的旧方法。尝试下载并使用我提供的链接,您会看到它不会创建任何文件夹。只是一个名为 autorun.inf 的文件 (2认同)