Имя файла. Вместо файлов «иероглифы» (непонятные символы) на флешке

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

Флешка была открыта стандартными средствами Windows и дополнительно был , увы, это не дало положительных результатов.

Пропали все файлы на флешке, кроме одного. Появились несколько файлов с непонятными именами: &, t, н-& и т.д.

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

Хотя файлы и исчезли, но место занято. В конкретном случае, занято 817 МБ

Первая мысль о причине случившегося — действие вируса. Раннее, когда вирус , был использован файловый менеджер FAR manager, который, как правило, видит все файлы (скрытые и системные). Однако в этот раз, FAR manager увидел только то, что и стандартный проводник Windows…

«Потерянные» файлы не смог увидеть даже FAR manager

Поскольку Windows не видит пропавших файлов, то и не прокатывает трюк с изменением атрибутов файлов при помощи командной строки и команды attrib -S -H /S /D.

А что увидит Linux?

При таком раскладе, в качестве эксперимента, решил использовать операционную систему на основе Linux. В конкретном случае, был использован диск с операционной системой Ubuntu 10.04.3 (подробней об Ubuntu и где её скачать, ).

Важно! Нет необходимости устанавливать Ubuntu на компьютер — просто загружаемся с CD диска, точно также, как это делается с .

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

Как и предполагалось, Ubuntu увидела больше файлов по сравнению с Windows.

Ubuntu отображает и те файлы, которые были не видны из под Windows (кликабельно)

Далее, чтобы не заморачиваться с атрибутами файлов, были проделаны элементарные действия: все отображаемые файлы были выделены и скопированы на локальный диск «D» (естественно, можно скопировать файлы и на системный диск «C»).

Теперь можно снова загрузить Windows и проверить, что получилось.

Теперь Windows видит несколько вордовских файлов. Обратите внимание, что правильно отображаются и имена файлов

Увы, проблема не решена, так как файлов на флешке было явно больше (судя по объему в 817 МБ), чем удалось вытащить. По этой причине, попробуем провести проверку флешки на ошибки.

Устранение ошибок на флешке

Для поиска и устранение ошибок на дисках, в Windows есть стандартная утилита.

Шаг 1. Щелкаем по значку флешки правой клавишей мыши и выбираем команду «Свойства».

Шаг 2. Переходим на вкладку «Сервис» и щелкаем по кнопке «Выполнить проверку».

Шаг 3. Щелкаем по кнопке «Запуск».

После выполнения проверки и исправления системных ошибок, появится соответствующее сообщение.

Сообщение: «Были найдены и устранены некоторые ошибки»

После устранения ошибок, файлы с иероглифами исчезли, а в корневом каталоге флешки появилась скрытая папка с именем FOUND.000.

Внутри папки FOUND.000 оказалось 264 файла с расширением CHK. В файлах с расширением CHK, могут храниться фрагменты файлов различных типов, извлеченных с жестких дисков и флешек при помощи утилит ScanDisk или CHKDISK.

Если все файлы на флешке были одного типа, например, документы Word с расширением docx, то в файловом менеджере Total Commander выделяем все файлы и нажимаем сочетание клавиш Ctrl + M (Файлы — Групповое переименование). Указываем какое расширение искать и на что его менять.

В конкретном случае, я только знал, что на флешке есть вордовские документы и файлы с презентациями Power Point. Менять расширения методом научного тыка весьма проблематично, поэтому лучше воспользоваться специализированными программами — они сами определят, какой тип данных хранится в файле. Одной из такой программ является бесплатная утилита , которая не требует установки на компьютер.

Указываем исходную папку (я сбросил файлы CHK на жесткий диск). Далее я выбрал вариант, при котором файлы с разными расширениями будут разложены по разным папкам.

Осталось нажать «Старт»

В результате работы утилиты появилось три папки:

  1. DOC — с документами Word;
  2. JPG — с картинками;
  3. ZIP — с архивами.

Содержимое восьми файлов осталось нераспознанным. Однако выполнена главная задача, восстановлены вордовские документы и фотографии.

Минусом является то, что не удалось восстановить сходные имена файлов, так что явно придется повозиться с переименованием вордовских документов. Что касается файлов с картинками, то сгодятся и такие названия как FILE0001.jpg, FILE0002.jpg и т.д.

Статья написана для журнала "Хакер" в 2004 году. Она вышла в номере 02/04 (62) .

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

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

Правила, касающиеся имен файлов, содержатся в так называемых «Соглашениях об именах файлов» (Filename Conventions). В этом документе описано, какие символы допустимо использовать в названиях файлов, какие символы являются разделителями пути, максимальная длина пути, и т.п. Здесь же оговариваются и ограничения. К примеру, символы “\”, “/”, “?”, “|”, “*”, “<”, “>” и “:” имеют специальное значение в Windows при операциях с файлами, в частности, из командной строки, и поэтому не могут быть использованы в имени отдельного файла. Это ограничение, по-видимому, обойти невозможно, так как при обращении к системным функциям для работы с файлами Windows стопроцентно выделяет их среди других символов и по-своему интерпретирует. Здесь нужно обратить внимание на специфическое использование символов точки «.», двоеточия «:», и пробела. Символ пробела может встречаться в имени файла или каталога, точка используется как разделитель имени файла от расширения, а двоеточие – как разделитель между буквой диска и остальной частью пути. Использование двоеточия не допускается нигде, кроме как после буквы диска, с исключением для файловой системы NTFS, где двоеточие используется еще и в качестве разделителя между нормальным именем файла и прикрепленными к нему файловыми потоками. Точка и пробел могут стоять в любом месте в имени файла, но не могут быть завершающими символами. Это странное, на первый взгляд, ограничение существует, как объясняет Microsoft, ради совместимости новых файловых систем со старыми, такими как HPFS, используемой в OS/2 и FAT16. Я думаю, что это ограничение частично связано с двумя существующими во всех используемых в Windows файловых системах виртуальными файловыми объектами (так называемые «точки»). При работе с файловыми менеджерами типа TotalCMD, для перехода в предыдущую папку надо щелкать по каталогу с названием «..». В файловых системах так обозначается родительский каталог относительно текущего пути, а текущая папка обозначается как «.». Строго говоря, эти объекты не являются настоящими файлами или каталогами. Это просто абстрактные объекты, используемые по традиции для навигации между папками. В Windows Explorer они вообще не показываются. Так как пользователь может создавать файлы, имена которых начинаются с точки (но не в Windows Explorer), то Microsoft заблокировала возможность ставить точки в конце названия, чтобы было невозможно создать файл «..». Чем мелкомягких не устраивают пробелы в конце названия, мне не понятно.

Имена DOS-устройств

В каждой Windows системе существует эмуляция MS-DOS, и этот факт тоже накладывает свои ограничения. При работе в командной строке используются псевдонимы для устройств, работа с которыми ничем не отличается от работы с обычными файлами. Под устройства зарезервированы следующие имена файлов: AUX, CON, NUL, PRN, COM1-COM9 и LPT1-LPT9. Простейший пример работы с этими объектами: если в командной строке ввести «dir > prn | sort», то отсортированный список файлов и каталогов текущей папки начнет распечатываться из принтера. Здесь «prn» означает принтер. Понятно, что если бы существовала возможность называть файлы зарезервированными именами устройств, то возникла бы путаница, поэтому эта возможность заблокирована.

Способы обхода ограничений

Мне известно три способа обхода описанных ограничений. Общий принцип их действия таков: определенным образом составляется название файла, после чего оно передается какой-либо системной функции для работы с файлами. В результате этого алгоритм проверки параметра на корректность не срабатывает, и мы получаем нужный результат - файл или каталог с некорректным с точки зрения системы названием. Какие это открывает возможности, я опишу позже. А пока поговорим о самих способах. Некоторые способы можно использовать не только программно, но и на пользовательском уровне. Способ первый: Использование UNC-путей. Это, на мой взгляд, самый простой и удобный способ. Разберем его на примере создания файла с точкой в конце названия. При его создании мы будем использовать стандартные функции для работы с файлами, но при этом мы будем указывать полный путь до объекта, и добавлять в начале пути четыре символа "\\?\" или "\\.\". Получится примерно следующее: "\\?\f:\test\prn". Дальше работаем с файлом как обычно, то есть мы можем писать в него, читать из него, копировать, удалять и делать все остальное, используя обычные функции. Надо только не забывать, что везде, где требуется имя файла, необходимо указывать полный путь с UNC-префиксом.

Тестирование показало, что использование префикса "\\?\" более надежно, чем "\\.\". При использовании второго префикса, к примеру, можно потерпеть неудачу при попытке удаления файла. Этот способ еще хорош тем, что работает и в командной строке. Действительно, возможны манипуляции с файлами прямо из командной строки, не прибегая к каким либо языкам программирования. Набранная в командной строке команда "type \\?\f:\test\prn" отобразит содержимое созданного файла. Пример создания файла и записи в него информации смотри в листинге 1. Способ второй: Подстановка символов <.>. Тоже довольно удобный способ, который позволяет работать с файлами/папками любыми обычными средствами, а затем просто поменять название файла на какое-либо другое, некорректное. Этот способ реализовывается так: Если при использовании функций MoveFile, CopyFile, MkDir, RmDir и некоторых других подставить в конец нового названия файла или каталога два символа ".\", то файл создастся с любым нужным нам именем.

Этот способ тоже можно использовать в командной строке, но только с каталогами. Если набрать в ней строку то появится каталог, имя которого будет <.strange.>. При использовании этого способа в своих программах надо перед передачей параметра, содержащего путь к новому файлу или папке, добавить в его конец эти два символа. При использовании этого способа с функциями CopyFile и MoveFile два символа добавляются ко второму параметру функции. Использование способа в программе иллюстрирует листинг 2. Способ третий: Использование файловых потоков. Наименее удобный способ, так как годится только для создания файлов, и работает только на NT-системах с NTFS. Но, для полноты картины, я должен был упомянуть и его. Смысл способа в том, что мы создаем файл с прикрепленным к нему потоком, используя синтаксис, принятый при работе с файловыми потоками. Согласно Q115827 из Microsoft Knowledge Base, функция CreateFile проверяет последний символ переданного ей параметра, содержащего путь к файлу, и удаляет этот символ, если он является пробелом или точкой. В данном случае, последний символ этого параметра является последним символом не имени создаваемого файла, а названия потока. В этом и состоит хитрость - при таком подходе мы можем задать любое имя файла, в том числе и зарезервированное за DOS-устройством, а система будет не замечать этого. Посмотри на листинг 3. Для разнообразия создадим файл с именем, оканчивающимся на пробел. Созданный файл будет содержать прикрепленный файловый поток, который в принципе нам не был нужен, ведь наша цель была получить файл с зарезервированным именем. Недостатки этого способа в том, что перед его использованием в программе, нужно обязательно проверять, какая файловая система используется на конкретном диске.

А что мне с этого?

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

Ну что, получилось что-нибудь? Вряд ли, потому что при попытке доступа к файлу система использует те же самые функции, которые используем мы, но, в отличие от нас, система не знает наших хитрых способов, и поэтому получается так, что система фактически блокирует сама себя. Ну как, может сам догадаешься, какие возможности это предлагает? Первое что приходит в голову - это блокировка доступа к секретной информации. Конечно, это не так надежно, как шифрование, но что мешает тебе зашифровать какой либо файл, и, для верности, еще и закрыть к нему доступ, задав некорректное имя. Кроме того, мало кто сможет скопировать такой файл, что бы подобрать позже пароль в спокойной обстановке. Есть возможность вообще спрятать файл так, что его не будет видно. Способ работает только с файловыми системами FAT\FAT32. Если переименовать существующий файл, содержащий информацию, задав ему имя <..>, то файл перестает быть видимым в Проводнике. Соответственно найти невидимый файл будет довольно сложно. Файл можно увидеть только из командной строки, или в файловых менеджерах. Однако если файл создать в корневом каталоге диска, то файловые менеджеры его тоже не видят. Еще один возможный трюк: создается папка с таким же именем, и тоже невидимая. Суть в том, что в этой папке, используя способ №1 можно создавать файлы! В эту папку можно сохранять какие либо файлы, а чтобы получить к ним доступ, нужно как минимум знать их имена. Средствами Windows получить список файлов из этой папки невозможно, и получается защита не хуже архива с паролем!

Другое возможное использование - в западлостроении. Ничто не мешает нам создать на компе ламера некоторое количество файлов, размером по 4Гб каждый (если у ламера FAT32), или один большой файл любого размера (если NTFS), и переименовать их, ну, например, в имена DOS-устройств. Или можно сделать их невидимыми. В любом случае, эти файлы удаляются неочевидным способом, и поэтому большинству людей, скорее всего, придется форматировать винт и переустанавливать систему (если винт содержит только один раздел). Кстати, scandisk и другие подобные утилиты, почему-то не видят ничего странного в файлах с такими названиями. Наверное, каждый программист хоть раз в жизни пробовал писать вирус или троян. Естественно, чтобы вирус был настоящим вирусом, нужно намертво закрепить его в системе, а так же принять меры к тому, чтобы его как можно дольше не обнаружил антивирус. Я попытался использовать некорректные имена файлов в этих целях. Я создал на винте новую папку и поместил в него файл, содержащий тестовый вирус EICAR. Это вирус не приносит никакого вреда, и создан специально для тестирования антивирусов. Затем я просканировал папку с помощью Norton Antivirus. NAV правильно определил вирус и предложил отправить его в карантин. Я отказался, а вместо этого сделал вот что: я переименовал файл в <..> и просканировал папку заново. На этот раз NAV показал, что каталог чист. Затем я проделал тоже самое, но на томе с NTFS и вирус переименовал в. Результаты были аналогичными. Этот несложный опыт показал, что метод может найти применение и в сфере создания вирусов. Когда я изучал эту тему, я написал себе небольшую прогу, позволяющую быстро создавать и удалять файлы и каталоги с некорректными именами. Специально для нее я написал модуль на Дельфях, в котором реализовал наиболее часто используемые мной функции для работы с файлами, приспособив их для работы с некорректными именами файлов. Если ты не хочешь сам возиться с реализацией описанных способов, то можешь взять прогу с Xakep-CD, или скачать ее с инета, и использовать этот модуль в собственных разработках. Я думаю, что описанные мной способы не единственные из возможных, и если ты поэкспериментируешь с разными функциями для работы с файлами, то ты можешь найти какие то свои новые способы. Так что удачных экспериментов!

Файловые потоки NTFS

Файловая система NTFS поддерживает так называемые "альтернативные файловые потоки" (Alternate Data Streams) во всех версиях NTFS. Эта технология позволяет прикреплять к файлу, расположенному на томе с NTFS другие файлы (называемые потоками), содержащие любые данные. Прикрепленный к файлу поток не виден ни из проводника, ни из командной строки. Путь к потоку, относительно файла, к которому он прикреплен, выглядит так: "file.ext:stream". Допускается также такой синтаксис для доступа к потоку: "file.ext:stream:$DATA". Более того, главный файл, к которому прикреплены потоки, сам может рассматриваться в качестве потока. В этом случае путь будет выглядеть так: . Потоки широко используются системой для хранения какой либо служебной информации о файле, к примеру сводки документа. Атрибуты файла или каталога тоже хранятся в потоке с названием $Attribute_List. Вообще, символ "$" в названии потока говорит о том, что он каким то образом используется системой.

Universal Naming Convention

Universal Naming Convention - сокращенно UNC, можно дословно перевести как "Универсальное Соглашение об Именах", это формат для записи пути к файлу расположенному на удаленном компьютере. Он имеет вид "\\server\share\path". Server это, как ни странно сервер, share - это расшаренный ресурс на нем, а дальше следует путь к файлу в обычном формате. Такой способ доступа к файлам можно использовать и для локальной машины, только в этом случае вместо "server" нужно подставлять "?" или ".", а путь к файлу указывать вместе с буквой диска. Например так: "\\?\C:\folder\file.txt".

Листинг 1.

#include #include void CreateStrangeFile(char *filename) { char *curdir; //текущая папка char *uncpath; //полный путь до файла в формате UNC GetCurrentDirectory(MAX_PATH,curdir); //получаем текущий каталог wsprintf(uncpath,"\\\\?\\%s\\%s",curdir,filename); //формируем UNC-путь //создаем новый файл HANDLE hFile = CreateFile(uncpath, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, NULL, NULL); DWORD ret; //записываем секретную инфу WriteFile(hFile,"This is a super secret info",28,&ret, NULL); CloseHandle(hFile); } int main() { CreateStrangeFile("prn"); //создаем файл

(ФС), обычно называемом каталогом , директорией или папкой. Имена файлов строятся по правилам, принятым в той или иной файловой и операционной системах (ОС). Многие системы позволяют назначать имена как обычным файлам, так и каталогам и специальным объектам (символическим ссылкам , блочным устройствам и т. п.).

Имя файла является частью полного имени файла , также называемого полным или абсолютным путём к файлу. Полное имя может включать следующие компоненты:

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

Имя файла состоит из двух частей, разделенных точкой:

Имена файлов в разных системах

Полным , или абсолютным , называется имя файла, содержащее все директории до корня файловой системы. Относительные имена файлов не содержат полного пути и обычно привязываются к текущему каталогу .

Windows

  • \ - разделитель подкаталогов
  • / - разделитель ключей командного интерпретатора
  • : - отделяет букву диска или имя альтернативного потока данных
  • * - заменяющий символ (маска "любое количество любых символов")
  • ? - заменяющий символ (маска "один любой символ")
  • " - используется для указания путей, содержащих пробелы
  • < - перенаправление ввода
  • > - перенаправление вывода
  • | - обозначает конвейер

В UNIX и UNIX-подобных ОС запрещен слеш (/) - разделитель подкаталогов - и символ конца строки (\0). Перечисленные выше символы (кроме слеша) использовать можно, но из соображений совместимости их лучше избегать.

Расширение имени файла

Расширение имени файла (англ. filename extension , часто говорят просто расширение файла или расширение ) - последовательность символов, добавляемых к имени файла и предназначенных для идентификации типа (формата) файла . Это один из распространённых способов, с помощью которых пользователь или программное обеспечение компьютера может определить тип данных, хранящихся в файле. Расширение отделяется от основной части имени файла последней точкой . Иногда могут использоваться несколько расширений, следующих друг за другом, например, «.tar.gz».

ОС или менеджер файлов могут устанавливать соответствия между расширениями файлов и приложениями . Когда пользователь открывает файл с зарегистрированным расширением, автоматически запускается соответствующая этому расширению программа. Некоторые расширения могут показывать, что файл является исполняемым (в Windows).

См. также

Литература

  • Робачевский А. Н., Немнюгин С. А., Стесик О. Л. Имен файлов / Базовая файловая система System V / Глава 4. Файловая система // Операционная система UNIX. - 2-е изд. - СПб. : БХВ-Петербург, 2008. - С. 338-339. - 656 с. - ISBN 978-5-94157-538-1

Wikimedia Foundation . 2010 .

  • Ясака-дзиндзя
  • Дубовик

Смотреть что такое "Имя файла" в других словарях:

    Атрибуты файла - совокупность байтов, выделяющих файл из множества других файлов. Атрибутами файла являются: имя файла и тип содержимого; дата и время создания файла; имя владельца файла; размер файла; права доступа к файлу; метод доступа к файлу. См. также:… … Финансовый словарь

    Расширение имени файла - (англ. filename extension, часто говорят просто расширение файла или расширение) последовательность символов, добавляемых к имени файла и предназначенных для идентификации типа (формата) файла. Это один из распространённых способов, с… … Википедия

    перенос файла - Передача файла из одного каталога либо папки в другую. Нередко при переносе пользователь изменяет имя файла. В результате файл записывается в новом месте и стирается в старом. В отличие от этого, при копировании файла он появляется в новом месте… …

    Формат X файла - формат файла для хранения 3D объектов, созданный компанией Microsoft. Этот формат хранит информацию о геометрии 3D объекта (координаты вершин и координаты нормалей), текстурные координаты, описание материалов, пути и названия к текстурам, которые … Википедия

    Формат файла - Формат спецификация структуры данных, записанных в компьютерном файле. Формат файла обычно указывается в его имени, как часть, отделённая точкой (обычно эту часть называют расширением имени файла, хотя, строго говоря, это неверно). Например,… … Википедия

    атрибуты файла - Идентифицируемые атрибуты файла (имя и др.) [Е.С.Алексеев, А.А.Мячев. Англо русский толковый словарь по системотехнике ЭВМ. Москва 1993] Тематики информационные технологии в целом EN file attributes … Справочник технического переводчика

Похожие публикации