<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
    <title>Блог</title>
    <subtitle>Заметки о реверсе, форензике и разработке</subtitle>
    <link rel="self" type="application/atom+xml" href="https://blog.merud.online/atom.xml"/>
    <link rel="alternate" type="text/html" href="https://blog.merud.online"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2026-10-23T00:00:00+00:00</updated>
    <id>https://blog.merud.online/atom.xml</id>
    <entry xml:lang="ru">
        <title>Что такое $MFT и из чего он состоит</title>
        <published>2026-10-23T00:00:00+00:00</published>
        <updated>2026-10-23T00:00:00+00:00</updated>
        
        <author>
          <name>Unknown</name>
        </author>
        
        <link rel="alternate" type="text/html" href="https://blog.merud.online/posts/mft/"/>
        <id>https://blog.merud.online/posts/mft/</id>
        
        <content type="html" xml:base="https://blog.merud.online/posts/mft/">&lt;p&gt;Начнем с определения: MFT (Master File Table) — это главная таблица файлов в NTFS, представляет собой таблицу, в которой строки соответствуют файлам тома, а столбцы — атрибутам файлов.&lt;/p&gt;
&lt;h2 id=&quot;struktura-zapisi&quot;&gt;Структура записи&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Смещение&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Размер&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Поле&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Описание&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x00&lt;/code&gt; – &lt;code&gt;0x03&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Signature&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Сигнатура &lt;code&gt;&quot;FILE&quot;&lt;/code&gt; (валидная запись) или &lt;code&gt;&quot;BAAD&quot;&lt;/code&gt; (запись не прошла проверку Fixup).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x04&lt;/code&gt; – &lt;code&gt;0x05&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Fixup Offset&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Смещение до массива Fixup Array (обычно &lt;code&gt;0x30&lt;/code&gt; / 48 байт).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x06&lt;/code&gt; – &lt;code&gt;0x07&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Fixup Count&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Количество элементов в массиве Fixup (обычно &lt;code&gt;3&lt;/code&gt;: 1 проверочный + 2 для секторов).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x08&lt;/code&gt; – &lt;code&gt;0x0F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;$LogFile LSN&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Порядковый номер транзакции в журнале NTFS.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x10&lt;/code&gt; – &lt;code&gt;0x11&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Sequence Number&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Номер версии записи (увеличивается при каждом удалении/пересоздании файла).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x12&lt;/code&gt; – &lt;code&gt;0x13&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Hard Link Count&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Количество жестких ссылок (имён) на этот файл.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x14&lt;/code&gt; – &lt;code&gt;0x15&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;First Attr Offset&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Смещение до первого атрибута (обычно &lt;code&gt;0x38&lt;/code&gt; / 56 байт).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x16&lt;/code&gt; – &lt;code&gt;0x17&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Flags&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x00&lt;/code&gt; — удален, &lt;code&gt;0x01&lt;/code&gt; — активный файл, &lt;code&gt;0x02&lt;/code&gt; — удаленная папка, &lt;code&gt;0x03&lt;/code&gt; — активная папка.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x18&lt;/code&gt; – &lt;code&gt;0x1B&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Used Size&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Реально занятый размер записи (атрибутами и заголовком).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x1C&lt;/code&gt; – &lt;code&gt;0x1F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Allocated Size&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Выделенный размер записи на диске (всегда ровно &lt;code&gt;1024&lt;/code&gt; байта).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x20&lt;/code&gt; – &lt;code&gt;0x27&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Base Record Reference&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0&lt;/code&gt; для обычного файла. Если &lt;code&gt;≠ 0&lt;/code&gt; — ссылка на базовую запись (для Extension-записей).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x28&lt;/code&gt; – &lt;code&gt;0x29&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Next Attribute ID&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;ID следующего атрибута, который будет добавлен к файлу.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x2A&lt;/code&gt; – &lt;code&gt;0x2B&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;2 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Align / Reserved&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Выравнивание до 4-байтной границы.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x2C&lt;/code&gt; – &lt;code&gt;0x2F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Record Number&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Порядковый номер этой MFT-записи в таблице (начиная с 0).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x30&lt;/code&gt; – &lt;code&gt;0x37&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Fixup Array&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Массив контрольных байт: 2 байта USN + по 2 байта оригинальных данных из конца первого и второго секторов (итого 6, еще 2 байта выравнивание).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x38&lt;/code&gt; – &lt;code&gt;0x3FF&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;~968 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Attributes Chain&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Цепочка атрибутов (&lt;code&gt;$SI&lt;/code&gt;, &lt;code&gt;$FN&lt;/code&gt;, &lt;code&gt;$DATA&lt;/code&gt;), завершающаяся маркером &lt;code&gt;0xFFFFFFFF&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Размер сектора равен 512 байтам, а запись в MFT занимает 1024 байта, то есть два сектора. Чтобы не было разрыва записи (например, когда пишется файл на диск и резко пропадает свет, то первый сектор может записаться, а второй нет) NTFS берет байты 510–511 и 1022–1023 записи и сохраняет их в специальный массив в заголовке: &lt;strong&gt;Fixup Array&lt;/strong&gt; (Update Sequence Array). На их место записывается одинаковое контрольное значение (Update Sequence Number). При чтении NTFS проверяет, что в конце каждого сектора лежит это значение, и возвращает оригинальные байты на место. Если значения не совпали, значит запись порвана&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real Size&lt;/strong&gt; - показывает реальный размер файла&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Allocated Size&lt;/strong&gt; - показывает сколько он занимает на диске. Разница между этими параметрами в том, что файл занимает целое число кластеров, поэтому Allocated Size всегда кратен размеру кластера (по умолчанию 4 КБ). Если реальный размер файла не делится нацело на размер кластера, то какая-то часть последнего кластера будет просто пустовать. Если нужно посмотреть размер файла - смотрим на &lt;strong&gt;Real Size&lt;/strong&gt;, а если сколько места на диске занимает физически, то &lt;strong&gt;Allocated Size&lt;/strong&gt;. Оба поля лежат в атрибуте $DATA (не путать с Used Size и Allocated Size из заголовка записи, они описывают саму MFT запись, а не файл)&lt;/p&gt;
&lt;p&gt;Для маленьких файлов NTFS не выделяет кластеры в ФС, их содержимое сразу пишется в сам атрибут $DATA (такой атрибут называется Resident). Размер ограничен самой записью MFT: в 1024 байтах помимо данных лежат заголовок и другие атрибуты, поэтому на практике это порядка 700 байт. Так что если такой мелкий файл был удален, его можно получить сразу из MFT записи без необходимости доступа к диску (пока эта запись не была переиспользована под другой файл)&lt;/p&gt;
&lt;p&gt;Думаю ни для кого не секрет, что при удалении файла MFT запись не стирается, а просто помечается удаленной посредством замены флага In Use на Deleted. Физически данные также остаются на диске, такие программы как recuva берут данные именно из MFT записей, а чтобы понять номера кластеров, в которых хранится файл читают атрибут Data Runs и проверяют, не заняты ли эти кластеры другим файлом, ведь их в любой момент фс может перезаписать.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;file-name&quot;&gt;$FILE_NAME&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Смещение в $FN&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Размер&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Поле&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Описание&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x00&lt;/code&gt; – &lt;code&gt;0x07&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Parent Directory ID&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Номер родительской папки (нижние 6 байт — MFT ID, верхние 2 байта — Sequence).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x08&lt;/code&gt; – &lt;code&gt;0x0F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Created (C)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время создания файла (Windows FILETIME, UTC).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x10&lt;/code&gt; – &lt;code&gt;0x17&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Modified (M)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время изменения содержимого файла.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x18&lt;/code&gt; – &lt;code&gt;0x1F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;MFT Modified (B)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время изменения самой MFT-записи.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x20&lt;/code&gt; – &lt;code&gt;0x27&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Accessed (A)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время последнего доступа к файлу.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x28&lt;/code&gt; – &lt;code&gt;0x2F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Allocated Size&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Размер, выделенный под файл на диске (на момент создания записи имени).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x30&lt;/code&gt; – &lt;code&gt;0x37&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Real Size&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Реальный размер файла в байтах.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x38&lt;/code&gt; – &lt;code&gt;0x3B&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Flags&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Атрибуты (Read-only &lt;code&gt;0x1&lt;/code&gt;, Hidden &lt;code&gt;0x2&lt;/code&gt;, System &lt;code&gt;0x4&lt;/code&gt;, Archive &lt;code&gt;0x20&lt;/code&gt;, Directory &lt;code&gt;0x10000000&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x3C&lt;/code&gt; – &lt;code&gt;0x3F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Reparse Tag&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Тег точки повторной обработки (для симлинков и точек монтирования Junction).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x40&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Name Length (N)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Длина имени файла &lt;strong&gt;в символах UTF-16&lt;/strong&gt; (до 255 символов).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x41&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;1 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Namespace&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Пространство имён: &lt;code&gt;0&lt;/code&gt; = POSIX, &lt;code&gt;1&lt;/code&gt; = Win32, &lt;code&gt;2&lt;/code&gt; = DOS 8.3, &lt;code&gt;3&lt;/code&gt; = Win32 &amp;amp; DOS одновременно.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x42&lt;/code&gt; ..&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;N × 2 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;File Name&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Имя файла&lt;/strong&gt; в кодировке UTF-16 Little Endian.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;В $FILE_NAME содержатся даты создания, модификации, доступа и модификации MFT. Эти даты выставляются системой при создании, переименовании и перемещении файла, а при обычной записи в файл не меняются. Через winAPI их прочитать и изменить нельзя (GetFileTime и SetFileTime работают с $STANDARD_INFORMATION), прочитать можно только напрямую с тома с правами администратора, как это делают парсеры MFT. Поэтому в форензике этим датам доверяют больше&lt;/p&gt;
&lt;p&gt;Размеры в $FILE_NAME (Allocated и Real Size) не обновляются при изменении файла, поэтому там часто нули или устаревшие значения, актуальные размеры лежат в $DATA&lt;/p&gt;
&lt;p&gt;У файла обычно не один $FILE_NAME, а два (плюс еще по одному на каждую жесткую ссылку). Для совместимости со старыми программами (DOS и 16-битными), которые не понимают длинные имена, NTFS дополнительно хранит короткое имя в формате 8.3 (например, PROGRA~1). Оно лежит в отдельном $FILE_NAME с Namespace = 2, а длинное имя с Namespace = 1. Если имя файла и так укладывается в 8.3, то хранится один $FILE_NAME с Namespace = 3. На современных системах создание коротких имен можно отключить, поэтому второго $FILE_NAME может и не быть&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;standard-information&quot;&gt;$STANDARD_INFORMATION&lt;/h2&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style=&quot;text-align: left&quot;&gt;Смещение в $SI&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Размер&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Поле&lt;/th&gt;&lt;th style=&quot;text-align: left&quot;&gt;Описание&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x00&lt;/code&gt; – &lt;code&gt;0x07&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Created (C)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время создания файла (FILETIME, 100-нс интервалы с 1 января 1601 г.).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x08&lt;/code&gt; – &lt;code&gt;0x0F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Modified (M)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время последнего изменения содержимого (Data Modified).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x10&lt;/code&gt; – &lt;code&gt;0x17&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;MFT Modified (B)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время изменения метаданных в записи MFT (Entry Modified).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x18&lt;/code&gt; – &lt;code&gt;0x1F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Accessed (A)&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Время последнего чтения/доступа (в современных Windows часто отключено для скорости).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x20&lt;/code&gt; – &lt;code&gt;0x23&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;DOS Flags&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Флаги проводника Windows (Read-Only &lt;code&gt;0x1&lt;/code&gt;, Hidden &lt;code&gt;0x2&lt;/code&gt;, System &lt;code&gt;0x4&lt;/code&gt;, Archive &lt;code&gt;0x20&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x24&lt;/code&gt; – &lt;code&gt;0x27&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Max Versions&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Максимальное количество версий файла (обычно &lt;code&gt;0&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x28&lt;/code&gt; – &lt;code&gt;0x2B&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Version Number&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Номер версии файла (обычно &lt;code&gt;0&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x2C&lt;/code&gt; – &lt;code&gt;0x2F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Class ID&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Идентификатор класса (обычно &lt;code&gt;0&lt;/code&gt;).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x30&lt;/code&gt; – &lt;code&gt;0x33&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Owner ID&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Идентификатор владельца файла в системе дисковых квот NTFS.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x34&lt;/code&gt; – &lt;code&gt;0x37&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;4 байта&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Security ID&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Ссылка на дескриптор прав доступа (ACL) в системном файле &lt;code&gt;$Secure&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x38&lt;/code&gt; – &lt;code&gt;0x3F&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;Quota Charged&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Сколько места файл занимает в дисковой квоте (только NTFS 3.0+).&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;code&gt;0x40&lt;/code&gt; – &lt;code&gt;0x47&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;8 байт&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;&lt;strong&gt;USN&lt;/strong&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left&quot;&gt;Номер последней записи об этом файле в журнале &lt;code&gt;$UsnJrnl&lt;/code&gt; (только NTFS 3.0+). Не путать с USN из Fixup.&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;В $STANDARD_INFORMATION также содержатся все даты файла, и именно их читает проводник и пользователь через winAPI. Также не составляет труда их поменять, в отличие от дат в $FILE_NAME. Здесь и находится дата модификации MFT записи. Как бы странно ни звучало, она обновляется всегда, когда обновляется MFT запись, т.е. когда вы изменяете файл, перемещаете его в другую папку, изменяете его флаги (Hidden, System, Read-only и так далее). Через SetFileTime эту дату выставить нельзя, ее ставит система, но через NtSetInformationFile ее тоже можно подменить, так что полностью доверять и ей нельзя&lt;/p&gt;
&lt;p&gt;Поэтому, например, программа (распаковщик архива, копировщик) может выставить файлу через winAPI дату 2002 года. Она запишется в $STANDARD_INFORMATION, но при этом в $FILE_NAME окажется дата реального появления файла на диске. Если дата создания в $SI оказывается раньше, чем в $FN - это классический признак timestomping (подмены дат). Само по себе это еще не доказательство, так же будет выглядеть файл, перенесенный с другого тома или распакованный из архива с сохраненными датами, но это повод посмотреть на файл внимательнее&lt;/p&gt;
&lt;p&gt;Параметр USN берется из журнала &lt;code&gt;$UsnJrnl&lt;/code&gt;, там логируются все изменения файлов (создание, удаление, переименование, запись), но он фиксированного размера, поэтому при активном пользовании компьютером старые записи довольно быстро затираются и можно посмотреть только действия за последние 3-4 дня. Для быстрого анализа советую утилиту &lt;a rel=&quot;external&quot; href=&quot;https://github.com/ponei/JournalTrace&quot;&gt;JournalTrace&lt;/a&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;al-ternativnye-potoki-dannykh-ads&quot;&gt;Альтернативные потоки данных (ADS)&lt;/h2&gt;
&lt;p&gt;У некоторых файлов в NTFS есть скрытый поток данных ADS (Alternate Data Streams), впервые они появились еще в Windows NT 3.1 (1993 год) для совместимости с Macintosh (Apple). Технически это просто дополнительный именованный атрибут $DATA в той же MFT записи, а содержимое самого файла лежит в безымянном $DATA. Альтернативные потоки указываются после имени файла через двоеточие (file.txt:stream). Обычно альтернативный поток носит имя Zone.Identifier (Mark of the Web), но можно задать ему любое. Это один из самых важных артефактов, в него пишут архиваторы и браузеры место появления файла. Для архиваторов это архив из которого был распакован файл:
&lt;img src=&quot;https://blog.merud.online/posts/mft/image.png&quot; alt=&quot;ADS_Archive&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Для файлов скачанных при помощи браузера из интернета это точный адрес
&lt;img src=&quot;https://blog.merud.online/posts/mft/image_1.png&quot; alt=&quot;ADS_Internet&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Но конкретного url также может и не быть, firefox, например, записывает просто about:internet
&lt;img src=&quot;https://blog.merud.online/posts/mft/image_2.png&quot; alt=&quot;ADS_Firefox&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Как вы могли заметить на всех скриншотах указан ZoneId=3. Это файлы из интернета. Всего зон пять: 0 - локальная машина, 1 - локальная сеть (интранет), 2 - доверенные сайты, 3 - интернет, 4 - ограниченные сайты. Но кроме тройки их сейчас практически не встретишь. Чего не скажешь о потоке, который создает системная служба Windows SmartScreen, это то самое синее или красное окошко, которое просит не запускать программу. Т.е. все файлы на которых есть этот поток проверялись SmartScreen, что является зацепкой при анализе
&lt;img src=&quot;https://blog.merud.online/posts/mft/image_3.png&quot; alt=&quot;SmartScreen&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Если в ADS пишут в основном маленькие записи, как на скриншотах выше (они, кстати, тоже resident и лежат прямо в MFT записи), не значит, что туда нельзя записать что-то большое. В ADS спокойно записывается любой файл, даже исполняемый. В некоторых случаях кажется, что это поможет вирусу быть более скрытным, учитывая, что запуск из альтернативных потоков ломает некоторые forensic программы, например, в winPrefetchView запись отображаться не будет, т.к. prefetch запись создается в нестандартном виде: file:hash-evil.exe.pf (file - это легитимный пустой файл, в альтернативном потоке которого скрыт evil.exe).&lt;/p&gt;
&lt;p&gt;В BAM, AppCompatCache этот бинарник светится как гирлянда, будет тяжело не заметить там обычный файл в котором через двоеточие прописан исполняемый.&lt;/p&gt;
&lt;hr /&gt;
&lt;h2 id=&quot;utility-dlia-analiza-mft&quot;&gt;Утилиты для анализа MFT&lt;/h2&gt;
&lt;p&gt;Для дампа MFT обычно используют MFTECmd от Эрика Зиммермана в связке с MFT Explorer от него же, инструменты довольно полезные, но для того чтобы быстро просмотреть содержимое MFT слишком тяжелые, поэтому я написал небольшой парсер на Rust + Egui, советую попробовать: &lt;a rel=&quot;external&quot; href=&quot;https://github.com/gemakfy/Rmft&quot;&gt;Rmft на GitHub&lt;/a&gt;&lt;/p&gt;
</content>
        
    </entry>
</feed>
