Как сделать файл не удаляемым на USB-накопителе?

15

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

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

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

MegaNairda
источник
Я нашел другой инструмент, который делает ту же ссылку BitDefender USB
Immunizer
Вы проверяли права доступа к файлу?
Моав
@Moab Файловая система на USB - FAT32.
MegaNairda
В Windows 7 или более поздней версии файл autorun.inf, созданный Panda USB Vaccine, будет отображаться с атрибутами файла «HX», а «H» означает скрытый, а «X» означает зарезервированный FILE_ATTRIBUTE_DEVICE.
Explorer09

Ответы:

16

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

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

Я скачал и установил Panda USB Vaccine и «привил» мою флешку, сбросил раздел флешки с dd для windows с помощью команд

dd --list

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

где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxGUID, предоставленный первой командой, открытый c:\vaccinated.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 щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Microsoft:

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

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

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

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

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

Лез Мажесте
источник
2
Это старый способ вакцины Panda USB защитить USB-диск от вредоносного autorun.inf. Попробуйте загрузить и использовать предоставленную мной ссылку, и вы увидите, что она не создает никаких папок. Просто один файл с именем autorun.inf
MegaNairda
@MegaNairda: Странно ... Я установил USB Vaccine, но всякий раз, когда я пытаюсь вакцинировать мой привод FAT32, программа создает AUTORUN.INF(с той же строкой "caacaa ...", упомянутой в статье) на диске, а затем быстро замерзает. У меня нет проблем с удалением файла автозапуска вообще ...
Lèse majesté
Попробуйте BitDefender USB Immunizer link Panda USB Vaccine также иногда зависает в моей системе, когда я вставляю USB-накопители.
MegaNairda
@MegaNairda: Похоже, проблема с этим приводом. Ни одна из программ не смогла его вакцинировать. Однако это совпадение было полезным, поскольку показало, что иммунизатор BitDefender, по крайней мере, использует похожую технику. Журнал ошибок показал, что он пытался создать серию вложенных папок / файлов, I:\autorun.inf\bdsanitize#\bdsanitize#...где #«1» или «2». К файлу журнала также добавляется файл / dirname каждого уровня с помощью .dirили, .fileно это может быть просто показано для целей ведения журнала / отладки.
Lèse Majesté
1
Похоже, что действительно есть проблема с вашим USB. Иммунизатор BitDefender создает папку, autorun.infно после этого она будет заменена autorun.inf файлом . Разница с autorun.infPanda USB Vaccine заключается в том, что файл пуст и не содержит cacacaтого, который был создан Panda.
MegaNairda