14

Кто-то использовал мой USB-накопитель, и, вернув его мне, я нашел autorun.inf который невозможно восстановить. Я попытался изменить атрибут файла, который является только H (даже не установлен как системный файл), но он продолжает говорить, что доступ запрещен.

USB установлен на FAT32, спросив моего друга, он сказал мне, что использует Panda USB Vaccine

Как они это делают? Я пытаюсь использовать редактор Disk Sector, но понятия не имею, какой шестнадцатеричный файл они изменяют, чтобы сделать этот тип файла и сделать его снова удаляемым. Форматирование диска удаляет его, но мне любопытно, как можно установить такие атрибуты файла.

2 ответа2

15

Метод испытания

Панда, похоже, не раскрывает точного механизма своей "вакцины", что понятно, поскольку в основном это безопасность через мрак. Если вы знаете, как это работает, вы можете обратить вспять эффект, и "вакцина" станет бесполезной.

Я скачал и установил Panda USB Vaccine и "привил" мою флешку, сбросил раздел флешки с 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 immunidated.img в шестнадцатеричном редакторе и выполнив поиск AUTORUN .

Что делает USB Vaccine

Запись для AUTORUN.INF начинается со следующих двенадцати байтов:

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

Первые одиннадцать байтов - это просто 8.3 имя файла с пробелом : AUTORUN INF

Последний байт определяет атрибуты файла, а его двоичное представление:

01000010

В соответствии со спецификацией файловой системы Microsoft EFI FAT32 этот последний байт является битовым полем, которое принимает следующую форму:

XYADVSHR

где биты A , D , V , S , H и R равны 1 если и только если файл заархивирован, каталог, идентификатор тома 1 , системный файл, скрытый или только для чтения. AUTORUN.INF скрыт, поскольку H имеет значение 1 .

Биты X и Y зарезервированы и должны быть равны 0 . Однако USB Vaccine устанавливает Y в 1 .

Что говорится в спецификации

Два старших бита байта атрибута зарезервированы и всегда должны быть установлены в 0, когда файл создается и никогда не изменяется и не просматривается после этого.

Кроме того, он рекомендует для проверки содержимого каталога:

Эти рекомендации предназначены для того, чтобы утилиты обслуживания дисков могли проверять правильность отдельных записей каталога, одновременно поддерживая совместимость с будущими усовершенствованиями структуры каталогов.

  1. НЕ просматривайте содержимое полей записи каталога, помеченных как зарезервированные, и предполагайте, что, если они имеют любое значение, отличное от нуля, они являются "плохими".

  2. НЕ сбрасывайте содержимое полей записи каталога, помеченных как зарезервированные, в ноль, если они содержат ненулевые значения (при условии, что они "плохие").  Поля записи каталога обозначены как зарезервированные, а не обязательные для заполнения. Они должны игнорироваться вашим приложением. Эти поля предназначены для будущих расширений файловой системы. Игнорируя их, утилита может продолжать работать в будущих версиях операционной системы.

Что на самом деле происходит

CHKDSK, безусловно, следует спецификации и игнорирует запись AUTORUN.INF которую драйвер FAT32 не понимает, но сама Windows, похоже, не соответствует требованию спецификации никогда больше не смотреть на зарезервированные биты: любой вид доступа (кроме распечатка файла и его атрибутов) запрещена.

Например, команда

DIR /A /Q

заявляет, что владельцем AUTORUN.INF является ... Поскольку FAT32 не поддерживает владение файлами, оно должно указывать \All .

Причина этого неожиданного поведения заключается в том, что, согласно FAT32 - записи в каталоге Wikipedia #, Windows использует бит Y для обозначения имени символьного устройства (CON, PRN, AUX, CLOCK $, NUL, LPT1, COM1 и т.д.), и это не должно присутствовать на устройствах хранения. 2

В некотором смысле, USB Vaccine обманывает 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 Несмотря на вопиющее отклонение от спецификации, оно кажется продуманным. Ubuntu оставляет X нетронутым, если он установлен в 1 , так как это не причиняет вреда. Установка бита Y в 1 может быть легко использована злонамеренным приложением, например, путем создания файла, который невозможно восстановить, который занимает все свободное место на диске.

6

Это хитрая хитрость файловой системы, которая использует зарезервированное имя в пространстве имен Win32. Подробности того, как Panda USB Vaccine делает это, изложены здесь.

По сути, программное обеспечение создает папку с именем autorun.inf (что предотвращает создание там файла с таким же именем), а затем в этой папке создается файл с именем LTP1 . В DOS LPT1 относится к порту принтера, и Windows поддерживает это для обратной совместимости. Поэтому, когда вы запрашиваете файл с именем LPT1 , Windows пытается открыть порт принтера, и каким-то образом это препятствует нормальному удалению папки.

Что касается того, как удалить папку / файл без форматирования диска, эта статья базы знаний Microsoft дает несколько советов:

Причина 5: имя файла включает зарезервированное имя в пространстве имен Win32

Если имя файла содержит зарезервированное имя (например, "lpt1") в пространстве имен Win32, вы не сможете удалить файл. Чтобы решить эту проблему, используйте не-Win32 программу для переименования файла. Вы можете использовать инструмент POSIX или любой другой инструмент, который использует соответствующий внутренний синтаксис для использования файла.

Кроме того, вы можете использовать некоторые встроенные команды для обхода типичных проверок зарезервированных имен Win32, если вы используете определенный синтаксис для указания пути к файлу. Например, если вы используете команду Del в Windows XP, вы можете удалить файл с именем "lpt1", если вы укажете полный путь к файлу, используя следующий специальный синтаксис:

del \\?\c:\path_to_file\lpt1

Для получения дополнительной информации об удалении файлов с зарезервированными именами в Windows NT и Windows 2000 щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

120716 Как удалить файлы с зарезервированными именами в Windows

Для получения дополнительных сведений об удалении файлов с зарезервированными именами в Windows XP щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:

315226 Как удалить файлы с зарезервированными именами в Windows XP

Если вы откроете дескриптор файла с помощью типичного механизма Win32 CreateFile , определенные имена файлов зарезервированы для устройств DOS старого стиля. Для обратной совместимости эти имена файлов не разрешены, и их нельзя создать с помощью типичных вызовов файлов Win32. Однако эта проблема не является ограничением NTFS.

Вы можете использовать программу Win32 для обхода типичных проверок имен, которые выполняются при создании (или удалении) файла, используя ту же технику, что вы используете для обхода папок глубже, чем MAX_PATH . Кроме того, некоторые инструменты POSIX не подлежат проверке имен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .