Просмотреть содержимое любого файла можно соответствующей ему программой, но в действительности файл может содержать больше данных, причем совершенно иного типа. Например, изображение может хранить в себе текст или даже исполняемый код, оставаясь с виду тем же изображением. Такое возможно благодаря особенностям файловой системы NTFS, а если быть конкретными — альтернативным потокам, которые могут хранить любые данные параллельно с основным контентом.
На низком уровне файл — это бинарный код, однако с точки зрения NTFS файл представляет собой пул массивов, именуемых атрибутами. Каждый атрибут, читай массив, имеет свойства или потоки, представленные набором данных, которые могут быть как видимыми, так и невидимыми (метаданные). Так, атрибут $SECURITY_DESСRIPTOR содержит сведения о владельце, атрибут $STANDART_INFORMATION — временные метки файла, $DATA — основные данные, то есть контент, а $FILE_NAME — имя файла длиной не более восьми символов.
Ну хорошо, а что, если имя файла содержит более восьми символов, ведь такое встречается сплошь и рядом? Всё очень просто, системой будет создан второй атрибут специально для длинного имени. То есть файл может иметь несколько атрибутов одного и того же типа, включая и атрибут $DATA. Однако нам уже известно, что атрибут $DATA хранит основные данные, если у нас появится дополнительный атрибут, будет ли это означать, что файл содержит еще какие-то основные данные?
Нет, основной массив данных потому-то и называется основным, что он один, все остальные будут уже дополнительными или иначе альтернативными.
Продемонстрируем это на примере, добавив в обычный текстовый файл альтернативный поток данных, представленный изображением формата JPG.
Создать альтернативный поток NTFS можно в командной строке, но гораздо удобнее использовать для этой цели утилиту NTFS Stream Explorer.
Создадим текстовый файл log.txt и запишем в него какой-нибудь текст, допустим «Hello».
Открываем его утилитой NTFS Stream Explorer и на первой же вкладке «Базовая информация» идем в меню «Добавить» и выбираем «Файловый поток».
В следующем окне жмем кнопку с изображением знака плюс, даем альтернативному потоку имя и нажимаем «Создать».
Так как добавлять в него мы будем файл, оставляем в настройках «Из файла» и указываем через обзор путь к нашему изображению. При этом в окне утилиты тут же появляется новая вкладка «Потоки» с созданным нами дополнительным атрибутом.
Открыв такой файл текстовым редактором, вы не обнаружите в нём никаких изменений, но если открыть его свойства, то можно будет увидеть, что он занимает на диске больше места, чем следует исходя из его содержимого.
Где же изображение? Открываем диск в шестнадцатеричном редакторе WinHex, находим файл, пробуем его открыть и получаем сообщение, что файл имеет некий дочерний объект.
Жмем «Explorer» и видим в расположении (Root directory) некий объект с именем HIDE — наш альтернативный поток в MFT.
Если его скопировать на рабочий стол и присвоить расширение JPG, то его можно будет открыть любой программой для просмотра картинок.
Извлечь альтернативный поток из файла можно и в самой NTFS Stream Explorer, воспользовавшись опцией «Export».
Также для оных целей подойдет бесплатная тулза AlternativeStreamView от NirSoft. К сожалению, определять тип содержимого альтернативного потока придется по его заголовку.
Существуют и другие ограничения работы с файлами, имеющими дополнительный атрибут $DATA.
При копировании файлов «два в одном» на другой физический диск данные альтернативного потока $DATA будут потеряны.
Чтобы его передать по сети или скопировать на другой диск, файл необходимо заархивировать, не забыв установить на вкладке «Дополнительно» птичку «Сохранять файловые потоки».
Тулза для работы с атрибутами: freesoft.ru/windows/ntfs_stream_explorer
Добавить комментарий