如何使文件在USB驱动器上不可删除?


15

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

USB设置在FAT32上,当问我的朋友时,他告诉我他使用了熊猫USB疫苗

他们如何做到这一点?我试图使用某些“磁盘扇区”编辑器,但不知道他们更改了哪个十六进制文件来制作这种文件并再次将其删除。格式化驱动器会将其删除,但是我很好奇如何设置此类文件属性。


我发现另一个工具可以完成相同的链接 BitDefender USB免疫器
MegaNairda,2012年

您检查文件的权限了吗?
摩押

@Moab USB上的文件系统为FAT32。
MegaNairda'5

在Windows 7或更高版本中,由Panda USB Vaccine创建的autorun.inf将显示为文件属性“ HX”,而“ H”表示隐藏,“ X”表示保留的FILE_ATTRIBUTE_DEVICE。
Explorer09

Answers:


16

测试方法

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

我下载并安装了Panda USB疫苗,并为闪存驱动器“接种了疫苗”,使用以下命令将闪存驱动器的分区与dd一起转储到Windows中

dd --list

dd if=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} of=C:\vaccinated.img

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

USB疫苗做什么

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

41 55 54 4F 52 55 4E 20 49 4E 46 42

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

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

01000010

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

XYADVSHR

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

XY被保留,都应为0。但是,USB疫苗设置Y1

规格说明

属性字节的高两位保留,并且在创建文件时始终应设置为0,并且从不对其进行修改或查看。

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

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

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

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

实际发生了什么

CHKDSK当然会遵循该规范,并且会忽略AUTORUN.INFFAT32驱动程序无法理解的条目,但是Windows本身似乎不符合该规范的要求,从此不再查看保留位。:任何访问方式(除了列出文件之外)及其属性)被拒绝。

例如,命令

DIR /A /Q

指出的所有者AUTORUN.INF...。由于FAT32不支持文件所有权,因此应声明\All

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

从某种意义上说,USB疫苗会诱使Windows假定它AUTORUN.INF不是实际文件,而是无法读取或写入的设备。

如何删除文件

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

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


1此属性用于例如卷标签或文件夹System Volume Information

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

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

dd if=C:\vaccinated.img of=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

4尽管明显偏离了规范,但似乎是一个深思熟虑的问题。X如果将Ubuntu 设置为1,则保留原样,因为它没有害处。通过例如创建占用驱动器整个可用空间的不可删除文件,将该Y位设置为1容易被恶意应用程序滥用。


6

这是文件系统诡计的巧妙之处,它利用了Win32命名空间中的保留名称。此处概述了熊猫USB疫苗如何执行此操作的详细信息

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

至于如何在不格式化驱动器的情况下删除文件夹/文件,此Microsoft知识库文章提供了一些技巧:

原因5:文件名在Win 32名称空间中包含保留的名称

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

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

del \\?\c:\path_to_file\lpt1

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

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

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

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

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

您可以使用Win32程序来遍历比深度更深的文件夹,从而绕过创建(或删除)文件时执行的典型名称检查MAX_PATH。此外,某些POSIX工具不受这些名称检查的约束。


2
这是保护USB驱动器免受恶意autorun.inf攻击的熊猫USB疫苗的旧方法。尝试下载并使用我提供的链接,您会发现它不会创建任何文件夹。一个单一的文件名为autorun.inf的
MegaNairda

@MegaNairda:很奇怪...我确实安装了USB疫苗,但是每当我尝试对FAT32 AUTORUN.INF拇指驱动器进行疫苗接种时,该程序都会在驱动器上创建一个(使用与文章中相同的“ caacaa ...”字符串),然后迅速冻结。我完全可以删除自动运行文件...
2012年

尝试BitDefender USB免疫程序链接 插入USB驱动器时,熊猫USB疫苗有时也会在我的系统上冻结。
MegaNairda

@MegaNairda:那个拇指驱动器似乎有问题。这两个程序都无法对其进行疫苗接种。但是,这种巧合有助于显示BitDefender的免疫程序至少使用了类似的技术。错误日志表明它试图I:\autorun.inf\bdsanitize#\bdsanitize#...#“ 1”或“ 2” 下创建一系列嵌套的文件夹/文件。日志文件还在每个级别的文件/目录名后附加.dir或,.file但可能只是为了记录/调试目的而显示。
2012年

1
看来USB确实存在问题。BitDefender的Immunizer确实创建了一个文件夹,autorun.inf但此后,它将被autorun.inf file代替。autorun.inf熊猫USB疫苗的不同之处在于,该文件为空,并且不包含cacaca熊猫创建的文件。
MegaNairda
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.