Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #62, ФЕВРАЛЬ 2004 г.

Обход ограничений FAT32/NTFS

A.M.D.F. (amdf@mera.net.ru)

Xakep, номер #062, стр. 062-080-1


Манипулирование файлами с некорректными именами

Во времена операционной системы MS-DOS и файловой системы FAT16 существовали серьезные ограничения, касающиеся имен файлов. Так, максимальная длина имени файла составляла 8 символов, а расширения – 3 символа. С появлением Windows 95 максимальная длина имени файла увеличилась до 255 символов, и теперь нам не приходится гадать, что скрывается в файле с названием MIAF9D~1.ZIP. В новых файловых системах FAT32 и NTFS с тех времен остались другие, менее заметные ограничения, которые можно обходить и использовать в своих целях.

Запрещенные символы

Правила, определяющие имена файлов, содержатся в так называемых «Соглашениях об именах файлов» (Filename Conventions). В этом документе описано, какие символы допустимо использовать в названиях файлов, какие символы являются разделителями пути, определена максимальная длина пути и т.д.

Здесь же оговариваются и ограничения. К примеру, символы «\», «/», «?», «|», «*», «<», «>» и «:» имеют специальное значение в Windows при операциях с файлами, в частности, из командной строки, и поэтому не могут быть использованы в имени отдельного файла. Это ограничение, по-видимому, обойти невозможно, т.к. при обращении к системным функциям для работы с файлами, Windows стопроцентно выделяет их среди других символов и интерпретирует по-своему.

Здесь нужно обратить внимание на специфическое использование символов точки «.», двоеточия «:» и пробела. Символ пробела может встречаться в имени файла или каталога. Точка используется как разделитель имени файла от расширения. Двоеточие – это разделитель между буквой диска и остальной частью пути. Использование двоеточия не допускается нигде, кроме как после буквы диска. Исключением является файловая система NTFS, где двоеточие используется еще и в качестве разделителя между нормальным именем файла и прикрепленными к нему файловыми потоками. Точка и пробел могут стоять в любом месте имени файла, но не могут быть завершающими символами.

Это странное, на первый взгляд, ограничение существует, как объясняет Microsoft, ради совместимости новых файловых систем со старыми, такими как HPFS, используемой в OS/2 и FAT16. Я думаю, что это ограничение частично связано с двумя существующими виртуальными файловыми объектами (так называемые «точки»). При работе с файловыми менеджерами типа TotalCMD, для перехода в предыдущую папку надо щелкать по каталогу с названием «..». В файловых системах так обозначается родительский каталог относительно текущего пути, а текущая папка обозначается как «.». Строго говоря, эти объекты не являются настоящими файлами или каталогами. Это просто абстрактные объекты, используемые по традиции для навигации между папками. В Windows Explorer они вообще не показываются. Так как пользователь может создавать файлы, имена которых начинаются с точки (но не в Windows Explorer), то Microsoft заблокировала возможность ставить точки в конце названия, чтобы было невозможно создать файл «..». А вот чем мелкомягких не устраивают пробелы в конце названия, непонятно.

Содержание  Вперед на стр. 062-080-2