有人使用了我的USB驱动器,将其退还给我后,我发现它无法autorun.inf
删除。我尝试更改它的文件属性,该属性仅为H(甚至没有设置为系统文件),但一直说“访问被拒绝”。
USB设置在FAT32上,当问我的朋友时,他告诉我他使用了熊猫USB疫苗
他们如何做到这一点?我试图使用某些“磁盘扇区”编辑器,但不知道他们更改了哪个十六进制文件来制作这种文件并再次将其删除。格式化驱动器会将其删除,但是我很好奇如何设置此类文件属性。
有人使用了我的USB驱动器,将其退还给我后,我发现它无法autorun.inf
删除。我尝试更改它的文件属性,该属性仅为H(甚至没有设置为系统文件),但一直说“访问被拒绝”。
USB设置在FAT32上,当问我的朋友时,他告诉我他使用了熊猫USB疫苗
他们如何做到这一点?我试图使用某些“磁盘扇区”编辑器,但不知道他们更改了哪个十六进制文件来制作这种文件并再次将其删除。格式化驱动器会将其删除,但是我很好奇如何设置此类文件属性。
Answers:
熊猫似乎没有透露其“疫苗”的确切机制,这是可以理解的,因为它基本上是通过默默无闻来实现的安全性。如果知道它是如何工作的,则可以逆转效果,而“疫苗”将变得无用。
我下载并安装了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
。
的条目以AUTORUN.INF
以下十二个字节开头:
41 55 54 4F 52 55 4E 20 49 4E 46 42
前11个字节只是带空格的8.3文件名:AUTORUN INF
最后一个字节指定文件的属性,其二进制表示为:
01000010
根据Microsoft EFI FAT32文件系统规范,最后一个字节是一个位字段,采用以下形式:
XYADVSHR
其中位A
,D
,V
,S
,H
和R
是1
当且仅当该文件被存档,目录,卷ID 1,系统文件,隐藏或只读的。AUTORUN.INF
由于H
设置为,因此已隐藏1
。
位X
和Y
被保留,都应为0
。但是,USB疫苗设置Y
为1
。
属性字节的高两位保留,并且在创建文件时始终应设置为0,并且从不对其进行修改或查看。
此外,它建议验证目录内容:
提供这些准则是为了使磁盘维护实用程序可以验证各个目录条目的“正确性”,同时保持与将来对目录结构的增强的兼容性。
不要查看标记为保留的目录条目字段的内容,并假设它们是零以外的其他任何值,则它们是“错误的”。
当目录条目字段包含非零值(假定它们为“错误”)时,请勿将标记为保留的目录条目字段的内容重置为零。目录条目字段被指定为保留字段,而不是必须为零。您的应用程序应忽略它们。这些字段用于将来的文件系统扩展。通过忽略它们,实用程序可以继续在操作系统的将来版本上运行。
CHKDSK当然会遵循该规范,并且会忽略AUTORUN.INF
FAT32驱动程序无法理解的条目,但是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
不是实际文件,而是无法读取或写入的设备。
如果您可以直接访问文件系统,则只需将设置Y
为0
(将字节更改42
为02
)即可再次删除该文件。您还可以将目录条目的第一个字节设置为E5
,直接将文件标记为已删除。3
另一种选择是使用其他驱动程序。例如,Ubuntu 12.04可以毫无问题地删除文件。实际上,它在读取目录条目时会自动“修复”目录条目。4
1此属性用于例如卷标签或文件夹System Volume Information。
2当然,设置X
为1
似乎没有任何效果。
3我通过C:\vaccinated.img
使用十六进制编辑器更改的相应字节并使用以下命令将修改后的映像写入闪存驱动器来验证了这一点:
dd if=C:\vaccinated.img of=\\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
4尽管明显偏离了规范,但似乎是一个深思熟虑的问题。X
如果将Ubuntu 设置为1
,则保留原样,因为它没有害处。通过例如创建占用驱动器整个可用空间的不可删除文件,将该Y
位设置为1
容易被恶意应用程序滥用。
这是文件系统诡计的巧妙之处,它利用了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工具不受这些名称检查的约束。
AUTORUN.INF
拇指驱动器进行疫苗接种时,该程序都会在驱动器上创建一个(使用与文章中相同的“ caacaa ...”字符串),然后迅速冻结。我完全可以删除自动运行文件...
I:\autorun.inf\bdsanitize#\bdsanitize#...
在#
“ 1”或“ 2” 下创建一系列嵌套的文件夹/文件。日志文件还在每个级别的文件/目录名后附加.dir
或,.file
但可能只是为了记录/调试目的而显示。
autorun.inf
但此后,它将被autorun.inf
file代替。autorun.inf
熊猫USB疫苗的不同之处在于,该文件为空,并且不包含cacaca
熊猫创建的文件。