Como tornar um arquivo não deletável em uma unidade USB?

14

Alguém usou minha unidade USB e, ao retorná-la para mim, encontrei um autorun.inf que não pode ser visto. Eu tentei mudar o atributo de arquivo que é apenas H (nem mesmo definido como um arquivo de sistema), mas continua dizendo acesso negado.

O USB está definido no FAT32, ao perguntar ao meu amigo, ele me disse que ele usa Panda USB Vacina

Como eles fazem isso? Eu estou tentando usar algum editor do setor de disco, mas não tenho idéia do arquivo hex que eles mudam para tornar este tipo de arquivo e torná-lo deletable novamente. A formatação da unidade a remove, mas estou curioso para saber como definir esse tipo de atributo de arquivo.

    
por MegaNairda 14.05.2012 / 10:00

2 respostas

15

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.

  1. 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".

  2. 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.

    
por 10.12.2012 / 05:07
6

Este é um truque inteligente de sistema de arquivos que explora um nome reservado no namespace do Win32. Os detalhes de como a Panda USB Vaccine faz isso são descritos aqui .

Essencialmente, o software cria uma pasta chamada autorun.inf (que impede a criação de um arquivo com o mesmo nome) e, nessa pasta, um arquivo chamado LTP1 é criado. No DOS, LPT1 refere-se à porta da impressora, e o Windows suporta isso para compatibilidade com versões anteriores. Portanto, quando você solicita um arquivo chamado LPT1 , o Windows tenta abrir a porta da impressora e, de alguma forma, isso impede que a pasta seja excluída normalmente.

Quanto a como remover a pasta / arquivo sem formatar a unidade, este artigo da Base de Conhecimento da Microsoft fornece algumas dicas:

Cause 5: The file name includes a reserved name in the Win32 name space

If the file name includes a reserved name (for example, "lpt1") in the Win32 name space, you may not be able to delete the file. To resolve this issue, use a non-Win32 program to rename the file. You can use a POSIX tool or any other tool that uses the appropriate internal syntax to use the file.

Additionally, you may be able to use some built-in commands to bypass the typical Win32 reserved name checks if you use a particular syntax to specify the path of the file. For example, if you use the Del command in Windows XP, you can delete a file named "lpt1" if you specify the full path of the file by using the following special syntax:

del \?\c:\path_to_file\lpt1

For more information about deleting files with reserved names under Windows NT and Windows 2000, click the following article number to view the article in the Microsoft Knowledge Base:

120716 How to remove files with reserved names in Windows

     

Para mais informações sobre a exclusão de arquivos com   nomes reservados no Windows XP, clique no número do artigo a seguir para   ver o artigo na Base de Dados de Conhecimento da Microsoft:

     

315226 How to remove files with reserved names in Windows XP

     

Se você abrir um identificador para um arquivo usando o típico Win32 CreateFile   mecanismo, certos nomes de arquivos são reservados para dispositivos DOS de estilo antigo.   Para compatibilidade com versões anteriores, esses nomes de arquivos não são permitidos e   eles não podem ser criados usando chamadas de arquivo Win32 típicas. Contudo,   esse problema não é uma limitação do NTFS.

     

Você poderá usar um programa Win32 para ignorar o nome típico   verificações que são realizadas quando um arquivo é criado (ou excluído) usando   a mesma técnica usada para atravessar pastas mais profundas   que MAX_PATH . Além disso, algumas ferramentas POSIX não estão sujeitas a   essas verificações de nomes.

    
por 14.05.2012 / 10:11