Método de teste
O Panda não parece revelar o mecanismo exato de sua "vacina", o que é compreensível, já que é basicamente segurança através da obscuridade . Se você sabe como funciona, você pode reverter os efeitos e a "vacina" se torna inútil.
Eu baixei e instalei Panda USB Vaccine e "vacinei" meu pen drive, despejado a partição da unidade flash com dd para windows usando os comandos
dd --list
dd if=\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx} of=C:\vaccinated.img
em que xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
é o GUID fornecido pelo primeiro comando, abriu c:\vaccinated.img
em um editor hexadecimal e pesquisou AUTORUN
.
O que a vacina USB faz
A entrada para AUTORUN.INF
começa com os doze bytes seguintes:
41 55 54 4F 52 55 4E 20 49 4E 46 42
Os primeiros onze bytes são apenas o nome do arquivo 8.3 : AUTORUN INF
O último byte especifica os atributos do arquivo e sua representação binária é:
01000010
De acordo com a Especificação do sistema de arquivos Microsoft EFI FAT32 , este último byte é um campo de bits que assume o seguinte formato:
XYADVSHR
em que os bits A
, D
, V
, S
, H
e R
são 1
se e somente se o arquivo for arquivado, um diretório, o ID do volume 1 , um arquivo do sistema, oculto ou somente leitura. AUTORUN.INF
está oculto, pois H
está definido como 1
.
Os bits X
e Y
são reservados e devem ser ambos 0
. No entanto, a Vacina USB define Y
para 1
.
O que a especificação diz
The upper two bits of the attribute byte are reserved and should always be set to 0 when a file is created and never modified or looked at after that.
Além disso, recomenda a validação do conteúdo do diretório:
These guidelines are provided so that disk maintenance utilities can verify individual directory entries for 'correctness' while maintaining compatibility with future enhancements to the directory structure.
DO NOT look at the content of directory entry fields marked reserved and assume that, if they are any value other than zero, that they are "bad".
DO NOT reset the content of directory entry fields marked reserved to zero when they contain non-zero values (under the assumption that they are "bad"). Directory entry fields are designated reserved, rather than must-be-zero. They should be ignored by your application. These fields are intended for future extensions of the file system. By ignoring them an utility can continue to run on future versions of the operating system.
O que realmente acontece
O CHKDSK certamente segue a especificação e ignora a entrada AUTORUN.INF
que o driver FAT32 não entende, mas o próprio Windows não parece estar em conformidade com a exigência da especificação de nunca mais olhar para os bits reservados : Qualquer tipo de acesso (além de listar o arquivo e seus atributos) é negado.
Por exemplo, o comando
DIR /A /Q
indica que o proprietário de AUTORUN.INF
é ...
. Como o FAT32 não suporta a propriedade de arquivos, ele deve indicar \All
.
A razão para esse comportamento inesperado é que, de acordo com a FAT32 - entrada da # Wikipedia # Directory , o Windows usa o bit Y
internamente para sinalizar um nome de dispositivo de caractere (CON, PRN, AUX, CLOCK $, NUL, LPT1, COM1 etc.) e não deve estar presente em dispositivos de armazenamento. 2
De certa forma, o USB Vaccine engana o Windows, assumindo que AUTORUN.INF
não é um arquivo real, mas sim um dispositivo, do qual ele não pode ler ou gravar.
Como excluir o arquivo
Se você tiver acesso direto ao sistema de arquivos, será suficiente definir Y
para 0
(altere o byte 42
para 02
) para tornar o arquivo deletável novamente. Você também pode definir o primeiro byte da entrada de diretório para E5
, marcando diretamente o arquivo como excluído. 3
Outra opção seria usar um driver diferente. O Ubuntu 12.04, por exemplo, pode excluir o arquivo sem problemas. Na verdade, ele automaticamente "corrige" a entrada do diretório ao lê-la. 4
1 Este atributo é usado, por exemplo, no rótulo do volume ou na pasta Informações sobre o volume do sistema .
2 Certamente, a configuração de X
to 1
parece não ter nenhum efeito.
3 Eu verifiquei isso alterando os bytes correspondentes de C:\vaccinated.img
com um editor hexadecimal e gravando a imagem modificada na unidade flash usando o seguinte comando:
dd if=C:\vaccinated.img of=\.\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
4 Enquanto um desvio flagrante da especificação, parece ser pensado. O Ubuntu deixa o X
intacto se estiver configurado para 1
, já que não causa nenhum dano. Configurar o Y
bit para 1
poderia ser facilmente abusado por um aplicativo mal-intencionado, por exemplo, criando um arquivo undeletable que ocupa todo o espaço livre da unidade.