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

15

Alguém usou minha unidade USB e, ao devolvê-la, encontrei uma autorun.infque não pode ser removida. Tentei alterar o atributo do arquivo, que é apenas H (nem mesmo definido como arquivo do sistema), mas continua dizendo Acesso negado.

O USB está definido no FAT32. Ao perguntar ao meu amigo, ele me disse que usa o Panda USB Vaccine

Como eles fazem isso? Estou tentando usar algum editor de setor de disco, mas não tenho idéia de qual arquivo hexadecimal eles alteram para criar esse tipo de arquivo e excluí-lo novamente. A formatação da unidade a remove, mas estou curioso para saber como definir esse tipo de atributo de arquivo.

MegaNairda
fonte
Eu encontrei outra ferramenta que faz a mesma ligação BitDefender USB Immunizer
MegaNairda
Você inspecionou as permissões no arquivo?
Moab
@Moab O sistema de arquivos no USB é FAT32.
MegaNairda
No Windows 7 ou posterior, o autorun.inf criado pelo Panda USB Vaccine será exibido com os atributos de arquivo "HX", enquanto "H" significa oculto e "X" significa FILE_ATTRIBUTE_DEVICE reservado.
Explorer09

Respostas:

16

Método de teste

O Panda parece não revelar o mecanismo exato de sua "vacina", o que é compreensível, já que é basicamente segurança através da obscuridade . Se você souber como funciona, poderá reverter os efeitos e a "vacina" se tornará inútil.

Baixei e instalei o Panda USB Vaccine e "vacinei" minha unidade flash, despejei a partição da unidade flash com o dd for windows usando os comandos

dd --list

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

onde xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxé o GUID fornecido pelo primeiro comando, aberto c:\vaccinated.imgem um editor hexadecimal e pesquisado AUTORUN.

O que a Vacina USB faz

A entrada para AUTORUN.INFcomeça com os seguintes doze bytes:

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

Os onze primeiros bytes são apenas o nome do arquivo 8.3 preenchido com espaço :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 EFI FAT32 da Microsoft , esse último byte é um campo de bit que assume o seguinte formato:

XYADVSHR

onde os bits A, D, V, S, He Rsão 1, se e somente se o arquivo é arquivado, um diretório, o ID do volume 1 , um arquivo de sistema, oculto ou somente leitura. AUTORUN.INFestá oculto, pois Hestá definido como 1.

Os bits Xe Ysão reservados e devem ser ambos 0. No entanto, a Vacina USB define Ycomo 1.

O que a especificação diz

Os dois bits superiores do byte de atributo são reservados e sempre devem ser definidos como 0 quando um arquivo é criado e nunca modificado ou analisado depois disso.

Além disso, recomenda a validação do conteúdo do diretório:

Essas diretrizes são fornecidas para que os utilitários de manutenção de disco possam verificar as entradas individuais do diretório quanto à 'correção', mantendo a compatibilidade com aprimoramentos futuros da estrutura de diretórios.

  1. NÃO examine o conteúdo dos campos de entrada do diretório marcados como reservados e assuma que, se houver algum valor diferente de zero, eles serão "ruins".

  2. NÃO redefina o conteúdo dos campos de entrada do diretório marcados como reservados para zero quando eles contêm valores diferentes de zero (supondo que sejam "inválidos"). Os campos de entrada do diretório são designados reservados , em vez de devem ser zero . Eles devem ser ignorados pelo seu aplicativo. Esses campos são destinados a futuras extensões do sistema de arquivos. Ao ignorá-los, um utilitário pode continuar em execução em versões futuras do sistema operacional.

O que realmente acontece

O CHKDSK certamente segue a especificação e ignora a AUTORUN.INFentrada que o driver FAT32 não entende, mas o próprio Windows parece não cumprir o requisito da especificação de nunca olhar novamente para os bits reservados : Qualquer tipo de acesso (exceto a listagem do arquivo e seus atributos) é negado.

Por exemplo, o comando

DIR /A /Q

afirma que o proprietário de AUTORUN.INFé .... Como o FAT32 não suporta a propriedade de arquivos, ele deve indicar \All.

A razão desse comportamento inesperado é que, de acordo com a entrada do diretório FAT32 - Wikipedia # , o Windows usa o bit Yinternamente para sinalizar o nome de um dispositivo de caractere (CON, PRN, AUX, $ RELÓGIO, NUL, LPT1, COM1 etc.) e não deve estar presente em dispositivos de armazenamento. 2

De certa maneira, a USB Vaccine engana o Windows, assumindo que AUTORUN.INFnão é um arquivo real, mas um dispositivo, do qual não pode ler ou gravar.

Como excluir o arquivo

Se você tiver acesso direto ao sistema de arquivos, basta definir Ypara 0(alterar o byte 42para 02) para tornar o arquivo excluído novamente. Você também pode definir o primeiro byte da entrada do diretório 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 "corrige" automaticamente a entrada do diretório ao lê-la. 4


1 Este atributo é usado para, por exemplo, o rótulo do volume ou a pasta Informações do volume do sistema .

2 Certamente, definir Xcomo 1não parece ter nenhum efeito.

3 Verifiquei isso alterando os bytes correspondentes de C:\vaccinated.imgcom 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 Embora seja um desvio flagrante da especificação, parece ser um pensamento. O Ubuntu deixa Xintacto se estiver definido 1, pois não faz mal. A configuração do Ybit 1pode ser facilmente abusada por um aplicativo mal-intencionado, criando, por exemplo, um arquivo não excluído que ocupa todo o espaço livre da unidade.

Dennis
fonte
6

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

Essencialmente, o software cria uma pasta chamada autorun.inf(que impede que um arquivo com o mesmo nome seja criado lá) e, nessa pasta, um arquivo chamado LTP1é criado. No DOS, LPT1refere-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 Microsoft fornece algumas dicas:

Causa 5: O nome do arquivo inclui um nome reservado no espaço para nome do Win32

Se o nome do arquivo incluir um nome reservado (por exemplo, "lpt1") no espaço para nome do Win32, talvez não seja possível excluir o arquivo. Para resolver esse problema, use um programa não-Win32 para renomear o arquivo. Você pode usar uma ferramenta POSIX ou qualquer outra ferramenta que utilize a sintaxe interna apropriada para usar o arquivo.

Além disso, você poderá usar alguns comandos internos para ignorar as verificações de nome reservado do Win32 típicas, se você usar uma sintaxe específica para especificar o caminho do arquivo. Por exemplo, se você usar o Del comando no Windows XP, poderá excluir um arquivo chamado "lpt1" se especificar o caminho completo do arquivo usando a seguinte sintaxe especial:

del \\?\c:\path_to_file\lpt1

Para obter mais informações sobre como excluir arquivos com nomes reservados no Windows NT e Windows 2000, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da Microsoft:

120716 Como remover arquivos com nomes reservados no Windows

Para obter mais informações sobre como excluir arquivos com nomes reservados no Windows XP, clique no número abaixo para ler o artigo na Base de Conhecimento Microsoft:

315226 Como remover arquivos com nomes reservados no Windows XP

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

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

Lèse majesté
fonte
2
Essa é a maneira antiga da vacina Panda USB de proteger a unidade USB do autorun.inf malicioso. Tente baixar e usar o link que forneci e você verá que ele não cria nenhuma pasta. Apenas um único arquivo chamado autorun.inf
MegaNairda
@MegaNairda: Estranho ... Eu instalei a vacina USB, mas sempre que tento vacinar meu AUTORUN.INFpen drive FAT32, o programa cria uma (com a mesma "caacaa ..." mencionada no artigo) na unidade e prontamente congela. Não tenho nenhum problema para excluir o arquivo de execução automática ...
Lèse majesté 14/05
Experimente o link do imunizador USB do BitDefender Às vezes, a Panda USB Vaccine também congela no meu sistema quando insiro unidades USB.
MegaNairda 14/05
@MegaNairda: Parecia haver um problema com esse pendrive. Nenhum dos programas conseguiu vaciná-lo. No entanto, essa coincidência foi útil, pois mostrou que o imunizador do BitDefender pelo menos usa uma técnica semelhante. O log de erro mostrou que tentou criar uma série de pastas aninhadas / arquivos sob I:\autorun.inf\bdsanitize#\bdsanitize#...onde #é "1" ou "2". O arquivo de log também anexou o arquivo / dirname de cada nível com .dirou .filemas isso pode ser mostrado apenas para fins de registro / depuração.
Lèse majesté
1
Parece que há realmente um problema com o seu USB. O Immunizer do BitDefender cria uma pasta, autorun.infmas depois disso, ela é substituída por um autorun.inf arquivo . A diferença com a autorun.infPanda USB Vaccine é que o arquivo está vazio e não contém o arquivo cacacacriado pelo Panda.
MegaNairda