- Создать новую папку, начиная с точки в Windows
- Преимущества и недостатки
- Создать новую папку, начиная с точки в Windows 10
- Другой способ назвать папку, начиная с точки
- А файлы?
- PowerShell позволяет нам создавать файлы и папки, которые начинаются с периода
- В Windows 10 1903 можно создавать файлы, имена которых начинаются с точки
- Обход ограничений FAT32/NTFS
- Запрещенные символы
- Имена DOS-устройств
- Способы обхода ограничений
- А что мне с этого?
Создать новую папку, начиная с точки в Windows
Windows, как и любая другая операционная система, позволяет нам создавать новые каталоги, которые мы называем папками, для организации и сохранения нужных данных. Операционная система позволяет нам давать этим папкам то имя, которое мы хотим. Однако Windows не позволяет нам использовать определенные символы при создании новой папки, а также не позволяет нам, например, начать имя новой папки с точки , Хотя это последнее ограничение можно относительно легко пропустить.
In Linux, Точка в начале файла или папки означает, что папка или файл скрыты. Однако в Windows он ничего не делает.
Microsoft позволяет использовать точку при именовании файлов или папок операционной системы, но единственное условие — наличие текста до и после этой точки. Следовательно, в нормальных условиях имя файла или папки не может ни начинаться с точки, ни заканчиваться точкой. Это связано с тем, что Microsoft обычно интерпретирует точку как часть расширения файла.
Если мы попытаемся создать новую папку таким образом, Windows 10 автоматически переименует папку, чтобы удалить точки, если они не соответствуют вышеуказанному условию. К счастью, если у нас есть базовые знания CMD, мы можем легко создать папку (или файл) с точками, которые мы хотим.
Преимущества и недостатки
Правда в том, что этот прием не дает больших преимуществ при использовании операционной системы. Основное преимущество, которое мы можем получить от размещения каталогов и файлов, начинающихся с точки, состоит в том, что когда они упорядочено по имени в браузере они появятся первыми. Это поможет нам всегда иметь самые важные папки под рукой. Также есть программы (например, GIMP), что при использовании устаревших программ для Linux в их собственных каталогах используется точка в именах. Поэтому для правильной работы некоторых программ нам, возможно, придется прибегнуть к этой технике.
Тем не менее, мы также можем столкнуться с некоторыми неудобствами. Если Windows применяет эти ограничения, к именам файлов и каталогов что-то будет. Наверняка, ничего не случится и все будет работать нормально. Однако некоторые программы могут не иметь доступа к этим типам папок. И в этом случае мы ничего не сможем сделать.
Создать новую папку, начиная с точки в Windows 10
Чтобы создать эту папку, первое, что мы должны сделать, это открыть окно CMD , Разрешения администратора не являются обязательными, если папка, в которой мы собираемся ее создавать, не требует таких разрешений. Для этого мы нажмем сочетание клавиш Windows + R и выполним команду «cmd» в появившемся окне.
Как только эта папка будет открыта, следующим шагом будет использование команды «cd» для перехода в каталог, где мы собираемся создать эту новую папку. И однажды там мы выполним следующую команду:
Новая папка уже создана. Теперь нам просто нужно перейти в папку, в которую мы поместили себя в CMD, чтобы создать папку, и мы сможем увидеть эту новую папку, имя которой начинается с точки, среди других.
Теперь мы можем использовать эту папку для чего угодно.
Другой способ назвать папку, начиная с точки
Если мы не хотим прибегать к CMD, чтобы сделать это, есть второй прием (хотя он не работает 100% времени) для этой самой вещи. Этот трюк быстрее и проще, и все, что нам нужно сделать, это создать новую папку, как всегда, но когда мы даем ей имя, которое мы хотим, мы должны начать и закончить имя по точке .
Например, в нашем случае папка должна называться «.ITIGIC».
Когда мы нажимаем снаружи, чтобы применить новое имя, Windows удалит точку справа, но оставит точку слева, поэтому у нас будет та же папка, что и в предыдущем процессе.
А файлы?
Нам может понадобиться файл (не папка), чтобы начать с точки. При именовании файлов Windows использует те же правила. Другими словами, он не позволяет, чтобы они начинались или заканчивались точкой. Однако предыдущий прием не помогает нам, поскольку мы не создаем новый файл и не можем использовать прием двоеточия при наличии расширения файла.
Что мы должны сделать в этом случае, чтобы используйте CMD для переименования файла , Мы открываем окно CMD, помещаем себя в каталог файлов с помощью команды «cd» и выполняем следующую команду:
ren archivos.extension .archivo.extension
Автоматически файл (независимо от типа) изменит свое имя, чтобы начать с точки.
PowerShell позволяет нам создавать файлы и папки, которые начинаются с периода
PowerShell это продвинутая консоль Windows 10. С его помощью мы можем сделать то же самое, что и с CMD, и многое другое. Поэтому, как очевидно, эта консоль также позволяет нам создавать файлы и папки, имя которых начинается с точки. Хотя команды несколько отличаются.
Для этого нам нужно открыть окно PowerShell в Windows, поместить себя в каталог, в котором мы хотим создать папку или файл, и выполнить следующую команду (изменив «имя_фолдера» на имя, которое мы хотим дать новому папка):
New-Item .nombrecarpeta -type directory
И то же самое для создания новых файлов. Мы выполним команду следующим образом (изменив «имя файла» на имя, которое мы хотим дать новому файлу:
New-Item .nombrearchivo -type file
Готов. У нас уже будет новый файл или новый каталог, имена которых начинаются с точки.
В Windows 10 1903 можно создавать файлы, имена которых начинаются с точки
Если вы более или менее хорошо разбираетесь в Linux, то должны знать, что в этой ОС представляют собой файлы DOT . Для тех, кто не в курсе, файлы этого типа являются конфигурационными и хранят настройки разных консольных и десктопных программ, а также журналы и прочие данные пользователя. В отличие от большинства других конфигурационных файлов, их имена начинаются с точки, но если вы попробуете создать такой файл в Windows, то получите ошибку «Следует ввести имя файла» .
Если же имя с точкой вначале вы попробуете вставить из буфера обмена, Windows попросту обрежет точку.
Так было раньше и пока что так есть в последней стабильной версии системы.
Начиная с Windows 10 18342 , это ограничение было снято разработчиками и отныне вы сможете создавать в Проводнике файлы, имена которых начинаются с точки. Это маленькое нововведение может оказаться весьма полезным при работе с функцией WSL , обеспечивающей в Windows 10 доступ к файловой системе Linux через стандартный Проводник.
Чтобы продемонстрировать новую возможность «десятки», создадим на рабочем столе файл .htaccess .
Кликаем как обычно по рабочему столу ПКМ, выбираем Создать — Текстовый документ.
Удаляем название вместе с расширением и даем ему новое имя .htaccess .
Файл переименуется без какого-либо намека на ошибку.
Вот и всё, прибегать к ухищрениям при создании любых конфигурационных файлов с точкой в начале имени больше не придется.
Обход ограничений FAT32/NTFS
Статья написана для журнала «Хакер» в 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 и некоторых других подставить в конец нового названия файла или каталога два символа «.\», то файл создастся с любым нужным нам именем.
Этот способ тоже можно использовать в командной строке, но только с каталогами. Если набрать в ней строку то появится каталог, имя которого будет . При использовании этого способа в своих программах надо перед передачей параметра, содержащего путь к новому файлу или папке, добавить в его конец эти два символа. При использовании этого способа с функциями 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, или скачать ее с инета, и использовать этот модуль в собственных разработках. Я думаю, что описанные мной способы не единственные из возможных, и если ты поэкспериментируешь с разными функциями для работы с файлами, то ты можешь найти какие то свои новые способы. Так что удачных экспериментов!