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

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

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

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


Этот способ можно использовать в командной строке, но только с каталогами. Если в ней набрать строку «mkdir .STRANGE..\», то появится каталог, имя которого будет «.STRANGE.». При использовании этого способа в своих программах надо перед передачей параметра, содержащего путь к новому файлу или папке, добавить в его конец эти два символа. При использовании такого способа с функциями CopyFile и MoveFile два символа добавляются ко второму параметру функции. Использование способа в программе иллюстрирует листинг 2.

Способ третий - использование файловых потоков. Наименее удобный способ, т.к. годится только для создания файлов и работает только на NT-системах с NTFS. Но, для полноты картины поговорим и о нем. А суть заключается в том, что мы создаем файл с прикрепленным к нему потоком, используя синтаксис, принятый при работе с файловыми потоками. Согласно Q115827 из Microsoft Knowledge Base, функция CreateFile проверяет последний символ переданного ей параметра, содержащего путь к файлу, и удаляет этот символ, если он является пробелом или точкой. В нашем случае последний символ этого параметра является последним символом не имени создаваемого файла, а названия потока. В этом и состоит хитрость – при таком подходе мы можем задать любое имя файла, в том числе и зарезервированное за DOS-устройством. Система же не будет этого замечать. Посмотри на листинг 3.

Для разнообразия создадим файл с именем, оканчивающимся пробелом. Созданный файл «space » будет содержать прикрепленный файловый поток. В принципе, он нам не нужен, но ведь наша цель была получить файл с зарезервированным именем. Недостатки этого способа в том, что перед его использованием в программе необходимо проверять, какая файловая система используется на конкретном диске.

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

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

Ну что, получилось что-нибудь? Вряд ли, потому что при попытке доступа к файлу, система использует те же самые функции, которые используем и мы, но, в отличие от нас, система не знает наших хитрых способов, и поэтому получается, что система блокирует сама себя.

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

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

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