ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Безопасность и Уязвимости > Безопасность > Windows
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Особенности файловой системы Ntfs
  #1  
Старый 31.12.2006, 04:10
Аватар для ~!DoK_tOR!~
~!DoK_tOR!~
Banned
Регистрация: 10.11.2006
Сообщений: 829
Провел на форуме:
2634544

Репутация: 1559


Отправить сообщение для ~!DoK_tOR!~ с помощью ICQ
По умолчанию Особенности файловой системы Ntfs

В последнее время, в связи с удешевлением аппаратных средств (в долларовом эквиваленте) все большее число пользователей компьютера получает в распоряжении ресурсы вполне достаточные для работы операционной системы Microsoft Windows NT (i200MMX + 32-64 Mb). Ненадежность и непредсказуемость Windows 95/98, а также неспособность ее к управлению на должном уровне ресурсами современных компьютеров приводит многих пользователей к мысли о переходе на NT.

При этом многие неискушенные пользователи не находят для себя ничего кардинально нового. И действительно, установив Internet Explorer 4 и не пользуясь многочисленными возможностями NT по применению политики безопасности и защиты, самыми большими отличиями от Windows 98 может показаться наличие двух папок “Автозагрузка” в пусковом меню (текущего пользователя и общей для всех пользователей) и отсутствие апплета Add/Remove Hardware в Панели управления. А если еще и не форматировать диск файловой системой NTFS, то разницы можно больше и не найти.

Но эта статья как раз и описывает некоторые отличия NTFS от FAT, VFAT, FAT16 и FAT32. Общеизвестные отличия: способность к самовосстановлению, отложенная запись, максимальный размер тома и файла на нем до 16 Экзабайт (1 Экзабайт = 1000000 Гбайт), возможность сжатия отдельных файлов и папок, установки разрешений и аудита достаточно широко освещены в литературе и документации к Windows NT. Но существуют еще малоизвестные и малоиспользуемые возможности NTFS: жесткие ссылки (hardlinks) и множественные потоки данных (multiply data flows или forks). Далее пойдет речь именно о них.

Множественные потоки данных. Этот термин знаком пользователям Macintosh. В этой системе файл может иметь два потока (forks): поток данных и поток ресурсов. В потоке данных хранятся данные файла - этот поток и копируется как единственный при переносе файла с Macintosh на PC. Второй поток файла - поток ресурсов, содержащий данные операционной системы – меню, значки, шрифты, в общем, все то, что принято называть ресурсами. Когда Windows NT Server обслуживает клиентов Macintosh и предоставляет им дисковое пространство для хранения файлов, необходимо чтобы файловая система сервера поддерживала формат файлов клиента. Это является одной из причин появления множественных потоков данных в NTFS.

Каким образом это реализовано? Любая информация о файле, начиная с его имени, разрешений и заканчивая собственно данными, хранящимися в файле, с точки зрения NTFS представляет собой атрибут, хранящийся в собственном потоке (stream). Разработчики NTFS посчитали, что можно не ограничиваться одним потоком для данных – безымянным, и добавили возможность создания нескольких, помимо основного, именованных потоков. Для создания множественных потоков можно применить функцию Win32 API, но можно поступить и проще.

Со времен Кернигана и Ричи – разработчиков языка C и операционной системы UNIX у многих операционных систем существует возможность обобщения операций ввода – вывода. С этой точки зрения, любая операция ввода – вывода может рассматриваться как операция ввода из потока или вывода в поток независимо оттого, что является источником данных (консоль, т.е. клавиатура, файл или порт) и приемником (опять же консоль, в данном случае уже экран монитора, принтер или файл). Существует и возможность перенаправить ввод – вывод программы с экрана на принтер и вводить команды не с клавиатуры, а из файла. В наше время повсеместного использования графического пользовательского интерфейса эти возможности применяются очень редко, поэтому поясним сказанное примером.

Команда операционных систем Microsoft echo используется для вывода информации на экран в текстовом режиме:

PHP код:
C:>echo HelloWorld!

HelloWorld!

C:> 
Команда echo в качестве устройства вывода информации использует экран монитора. Вывод этой команды можно перенаправить с консоли в файл (для этого используется символ “ > ”):

PHP код:
C:>echo HelloWorld! > file

C
:> 
Как видите, команда echo в данном случае на экран ничего не вывела. Но в файле file можно обнаружить строку “Hello, World!”. Аналогично вывод команды echo можно перенаправить и на принтер:

PHP код:
C:>echo HelloWorld! > lpt1

C
:> 
На экране опять ничего, но на листе бумаги в принтере можно обнаружить все ту же строку “Hello, world!”, если конечно принтер подсоединен к порту lpt1. Таким образом, вывод любой программы текстового режима можно перенаправить на любое устройство, поддерживающее потоковый ввод информации или в файл, за исключением тех программ, которые в текстовом режиме используют для вывода информации непосредственную модификацию видеопамяти и другие нестандартные, с точки зрения классического C, возможности.

Аналогично можно перенаправить и ввод программы. Команда more операционных систем Microsoft используется для буферизации вывода команд, выводящих информации больше, чем умещается на экран. Но эту команду можно использовать и для иллюстрации перенаправления ввода:

PHP код:
C:>more file

Hello
World!

C:> 
В файле file находилась строка “Hello, World!”, которая была направлена на экран.

Точно также, с помощью перенаправления ввода - вывода можно создавать и читать множественные потоки данных:

PHP код:
C:>echo string1 file:fork1 
Записью file:fork1 определяется в файле file поток с именем fork1 (поскольку он еще не существует, то создается новый с этим именем) и перенаправляем в него вывод команды echo. При этом размер файла при просмотре его свойств не изменяется, и стандартными средствами Windows NT, не зная имени потока его существования нельзя определить. Но, зная его имя, можно с помощью команды more определить и его содержимое:

PHP код:
C:>more file:fork1

string1 
Таким образом, можно создавать и читать содержимое потоков данных файла. Количество потоков, создаваемых в одном файле ограничено только наличием свободного пространства на диске. Аналогично можно создавать потоки данных в каталогах, но для просмотра содержимого потока придется применить другое средство вывода потока на экран, так как команда more при этом выдает следующую ошибку:

Если ничего подходящего найти не удалось, то можно написать в любом компиляторе C++ такую программу:

PHP код:
 <[#include

void main () {

char ch;

while (
cin.get(ch)) cout.put(ch);

}

]> 
Скомпоновать эту программу лучше как консольное Win32 приложение, и использовать как средство для изучения потоков каталогов.

Windows NT не предоставляет стандартных средств для получения информации о множественных потоках данных. Но что делать, если все же необходима такая информация? В этом случае можно воспользоваться программой streams Марка Руссиновича (Mark Russinovich), которую вместе с исходным кодом можно взять на www.sysinternals.com. В этой программе для получения информации о множественных потоках данных используются недокументированные функции Windows NT. Вот информация, полученная с помощью программы streams о файле file:

PHP код:
C:>streams file 
NTFS Streams Enumerator v1.0

Здесь можно видеть как название потока данных, так и его размер в байтах (дополнительные 3 символа это пробел после символа “ > ”, возврат каретки и перевод строки, добавляемые командой echo). К сожалению, streams не позволяет определить множественные потоки данных в каталогах.

Для чего можно применять множественные потоки данных? Помимо применения, найденного для них фирмой Apple, можно сказать о самом простом средстве для скрытия информации, например, для запоминания даты установки программы shareware. На заре технологии OLE Microsoft предполагала использовать потоки данных для хранения информации о внедренных объектах, но видимо обеспечить потоки данных на FAT оказалось сложнее, чем создать длинные имена файлов и от этой идеи пришлось отказаться. Создание “файла ресурсов” для скрипта с хранением в нем всех надписей, выводимых на разных языках, также может быть интересной возможность применения потоков. Помимо приведенных, существует еще множество интересных применений для множественных потоков данных, чтобы не обходить их своим вниманием.

Жесткие ссылки. Пользователям различных клонов UNIX хорошо знакомо это понятие. В отличии от файловой системы FAT, в которой принято, что у каждого файла может быть только одно имя, в UNIX такого ограничения нет – каждый файл может иметь несколько имен и его данные не могут быть удалены, пока счетчик имен файла не равен 0. В UNIX существуют также символьные ссылки – аналог ярлыков (shortcut) в Windows, но следящих за перемещением объекта, на который они ссылаются.

Windows NT ограниченно соответствует стандарту POSIX (Portable Operating System Interface for Computing Environments). Один из примеров ограниченности – поддержка жестких ссылок и отсутствие поддержки символьных. Видимо, было решено, что ярлыки являются достойным аналогом символьных ссылок.

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

Для изготовления жесткой ссылки необходима программа для подсистемы POSIX Windows NT. Такая программа вместе с исходными текстами находится на компакт-диске “Ресурсы Windows NT”. По аналогии с UNIX эта программа называется ln. Синтаксис этой команды:

PHP код:
C:>Ln file hardlink1 
С помощью этой команды мы создаем для файла file второе имя или жесткую ссылку hardlink1 и, изменяя содержимое файла file можно изменить содержимое hardlink1, точнее это один и тот же файл, но с двумя именами. Аналогично можно менять и другие атрибуты файла. Количество имен у файла не ограничено, но при копировании имени файла ссылка разрывается и создается еще один файл. Существует возможность создания ссылки в другом каталоге:

PHP код:
C:>Ln file ../temp/hardlink2 
В этом случае необходимо указывать не абсолютное, а относительное имя каталога.

Применений для жестких ссылок можно найти не меньше, чем для множественных потоков данных. Например, создавать жесткие ссылки для библиотек dll, чтобы обезопасить свою программу от случайного удаления необходимого файла. Другие возможные применения жестких ссылок лучше всего искать в литературе, относящейся к UNIX. И, конечно же, применение жестких ссылок можно комбинировать с описанными выше множественными потоками данных.

Взято с http://www.oszone.net/190/

Последний раз редактировалось ~!DoK_tOR!~; 31.12.2006 в 13:19..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа для сравнивания снимков файловой системы je0n Реверсинг 3 09.10.2006 15:08
Обнаружение атак D=P=CH= MOD= Защита ОС: вирусы, антивирусы, файрволы. 3 03.10.2006 21:29
Алгоритмы анализа удаленной системы KPOT_f!nd Чужие Статьи 2 30.09.2006 02:50
Основные команды командной строчки. silveran Windows 5 27.10.2005 14:45
Бета-версию WinFS файловой системы Trinux Мировые новости 3 31.08.2005 23:12



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ