Windows

Восстановление файлов в разделах NTFS

То что NTFS — это надежно, известно каждому. Но это одна сторона вопроса. А файлы которые были удалены по ошибке — это совсем другое. Файловая система, даже такая мощная, как NTFS, бессильна защитить пользователя от самого себя. Замечательно, если удаленный файл сохраняется в корзине, но что делать, если его там нет? Что, если вы случайно удалили нужный файл и теперь в отчаянии кусаете себе локти? Главное не паниковать, но сейчас я расскажу, как с этим бороться и про Восстановление файлов в разделах NTFS.

FILE_DISPOSITION_INFORMATION

IRP_MJ_SET_INFORMATION / FILE_DISPOSITION_INFORMATION — это пакеты, которые отправляются драйверу при удалении файла (обратите внимание на это при дизассемблировании). Чтобы восстановить удаленные файлы, вам необходимо точно знать, что происходит, когда вы удаляете файл из раздела NTFS. Вот порядок действий, которые нужно выполнить.

  1. Кор­ректи­рует­ся файл /$MFT:$BITMAP, каж­дый бит которо­го опре­деля­ет «занятость» соот­ветс­тву­ющей фай­ловой записи (FILE Record) в MFT (зна­чение 0 говорит о том, что запись не исполь­зует­ся).
  2. Кор­ректи­рует­ся файл /$BITMAP, каж­дый бит которо­го опре­деля­ет «занятость» соот­ветс­тву­юще­го клас­тера (зна­чение 0 говорит о том, что клас­тер не исполь­зует­ся).
  3. Фай­ловые записи, соот­ветс­тву­ющие фай­лу, помеча­ются как уда­лен­ные (поле FLAG, находя­щееся по сме­щению 16h от начала фай­ловой записи, сбра­сыва­ется в нуль).
  4. Ссыл­ка на файл уда­ляет­ся из дво­ично­го дерева индексов. Тех­ничес­кие под­робнос­ти это­го про­цес­са здесь не рас­смат­рива­ются, пос­коль­ку вос­ста­новить таб­лицу индексов вруч­ную смо­жет толь­ко «гуру». Кро­ме того, в таком вос­ста­нов­лении нет необ­ходимос­ти. Ведь в NTFS индексы игра­ют вспо­мога­тель­ную роль, и гораз­до про­ще пере­индекси­ровать каталог заново, чем вос­ста­нав­ливать сба­лан­сирован­ное дво­ичное дерево (B-tree).
  5. Об­новля­ется атри­бут $STANDART_INFORMATION катало­га, в котором хра­нит­ся уда­ляемый файл (вре­мя пос­ледне­го дос­тупа и т. д.).
  6. В фай­ле /$LogFile обновля­ется поле Sequence Number (изме­нения, про­исхо­дящие в жур­нале тран­закций, здесь не рас­смат­рива­ются).
  7. По­ля Update Sequence Number сле­дующих фай­ловых записей уве­личи­вают­ся на еди­ницу: сам уда­ляемый файл, текущий каталог, $MFT, /$MFT:$BITMAP, /$BITMAP, /$BOOT, /$TRACKING.LOG.

Каталоги удаляются аналогично файлам. Это неудивительно, поскольку с точки зрения файловой системы каталог также представляет собой файл особого типа, который содержит в себе двоичное индексное дерево (B-дерево).

При этом он не будет безвозвратно удален, а может быть легко восстановлен. Легкое и быстрое извлечение возможно в том случае, если запись файла (запись FILЕ), принадлежащая этому файлу и содержащая его резидентное тело или перечень выполнения, не перезаписывается. Потеря файловой записи очень неприятна, так как в этом варианте файл придется собирать в кластеры. Чем более фрагментирован удаленный файл, тем труднее задача. Но это еще не все – в отличие от FAT, NTS не перезаписывает первый символ имени файла, что существенно упрощает восстановление.

Автоматическое восстановление

Утилиты для восстановления удаленных файлов не входят в стандартный дистрибутив Windows. Конечно, это явный недостаток — помните, такая утилита была в MS-DOS! Поэтому эти средства нужно покупать отдельно. Одна из автоматических утилит для восстановления удаленных файлов — GetDataBack. Из-за боязни безвозвратного разрушения файловой системы большинство таких утилит избегают записи непосредственно на диск. Вместо этого пользователю предлагается считать удаленный файл и перезаписать его в другом месте, но не в самом разделе. Это не самое лучшее решение. Как быть в том случае, если на имеющихся дисках нет свободного места или на восстановленном диске только один логический раздел?

Допустим, нам нужно восстановить базу данных в несколько гигабайт. Вы, конечно, можете подключить второй жесткий диск, скопировать его и затем сделать резервную копию. Однако подумайте, сколько времени это займет, не говоря уже о том, что сервер лучше не выключать, так как не все жесткие диски поддерживают горячую замену!

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

Ути­лита GetDataBack за вос­ста­нов­лени­ем уда­лен­ных фай­лов

В то же время утилиты, которые вносят изменения непосредственно в структуру NTFS, могут серьезно повредить дисковый том, что может привести к серьезным последствиям. Настоящие хакеры не доверяют никакому другому коду, кроме своего собственного, особенно если исходный код недоступен, а документация расплывчата и неоднозначна. Различные версии NTFS отличаются друг от друга. Последнее кардинальное изменение произошло в Windows XP (NTFS версии 3.1): массив порядковых номеров обновлений-n-Array был перемещен вперед на шесть байтов, и его место заняло поле выравнивания и номера записи текущего файла (номер этого Запись MFT). С тех пор формат файловой системы не претерпел значительных архитектурных изменений.

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

Ручное восстановление

Начнем с самого простого. Файл был только что удален, и его файловая запись еще не заменена. Как мне найти его на диске? Есть два пути — «теоретический» и «практический». Теоретический метод чрезвычайно надежен, но требует дополнительных операций, которых можно избежать, сделав ряд практических предположений.

Теоретически грамотный и правильный подход заключается в следующем. Мы извлекаем указатель на MFT из загрузочного сектора, извлекаем первую запись (описывает $ MFT), находим атрибут $ DATA (80h), декодируем список сегментов (запуск данных) и последовательно считываем все записи в MFT. , разбирая содержимое файла $ FILE_NAME (30h) — Имя файла. Обратите внимание, что у файла может быть несколько таких атрибутов. Этот атрибут также хранит ссылку на родительский каталог. Поэтому, если из разных директорий было удалено несколько файлов с одинаковым именем, нужно выяснить, какие из них нужно восстановить.

Здесь, как правило применяется практический подход к решению проблемы. В девяти из десяти случаев файл $ MFT не фрагментирован и располагается в самом начале диска. Имена файлов хранятся по смещению EAh от начала сектора, в начале которого находится подпись FILE0. Таким образом, вы можете просто запустить любой редактор диск, ввести восстановленное имя файла в коде UNICODE и указать редактировать его по смещению F0h с начала сектора.

Если строка поиска найдена, то необходимо убедиться, что подпись FILЕ0 находится в начале сектора. Для продолжения поисков необходимо продолжать искать подпись в начале сектора и в конце его. В двухбайтовом поле со смещением 16h от конца сектора содержится флаги записи: 00h — в данном случае запись не используется или была удалена; 01h — в данном случае запись используется, 02h — запись присутствует и описывает каталог. Кроме того, есть и другие значения — например 04h, 08h. Данные значения не зафиксированы.

Исправляем 00h на 01h, записываем изменения и … ничего не выходит ?! А что вы хотели! Наконец, необходимо предпринять еще несколько действий. Во-первых, вам нужно сообщить файлу / $ MFT: $ BITMAP, что эта запись MFT будет повторно использована. Во-вторых, вам нужно исключить номера кластеров, связанных с восстановленным файлом, из файла / $ BITMAP. Наконец, вам нужно будет перестроить двоичное индексное дерево, в котором будет храниться содержимое каталога.

Первые два пункта не представляют серьезной проблемы, но последнюю задачу придется исправить. Хотя это можно значительно упростить, просто запустив chkdsk с параметром / F. Утилита chkdsk самостоятельно найдет «потерянный» файл и внесет все необходимые изменения в файловую систему. Все, что вам нужно сделать, это установить флаг со смещением от 16h до единицы, а chkdsk сделает все остальное. После этих несложных манипуляций восстановленный файл окажется в своем домашнем каталоге.

В операционной системе Windows 10 утилиту chkdsk можно запустить с помощью командной строки (cmd-exe), либо из консоли PowerShell. Для запуска chkdsk требуется системные привилегии, поэтому консольная система должна запускаться от имени администратора. Если вы попытаетесь проверить системный раздел, в котором находится текущая версия операционной системы, программа не сможет проверить жесткий диск, поскольку том заблокирован. В этом случае вам будет предложено проверить это при следующем запуске Windows.

Более слож­ный слу­чай

Теперь рассмотрим более сложный вариант – это ситуация с восстановлением записи файла, которая уже была перезаписана. Если удаленный файл был резидентным (он хранил свое тело в MFT), восстанавливать нечего. Даже если нерезидентный файл создается в месте, ранее занимаемом им (и набор файлов нерезидентного файла заканчивается там, где начинается резидентное тело), ​​операционная система тщательно заполняет оставшийся «хвост» нулями и восстанавливает исходное содержимое, вы должны прибегнуть к дорогостоящему оборудованию, которое считывает поверхность жесткого диска на физическом уровне.

Не столь плачевна ситуация с нерезидентными файлами, хранящими свое тело вне MFT, хотя и здесь проблем хватает. Порядок, в котором файл помещается на диск, сохраняется в списке выполнения в записи файла в MFT. В этом случае, поскольку запись файла уже была перезаписана, возможен только контекстный поиск по содержимому. Запускаем редактор диска, вводим последовательность, которая явно содержится в удаленном файле, но не встречается во всех остальных, и даем редактору команду начать поиск. Чтобы ускорить поиск, вы можете искать только на свободном дисковом пространстве (за это отвечает файл / $ BITMAP).

Вос­ста­нов­ление неф­рагмен­тирован­ных фай­лов осу­щест­вля­ется эле­мен­тарно. 

Ни в коем слу­чае не записы­вай фай­лы на сам вос­ста­нав­лива­емый том!

Единственная проблема — определение исходной длины. Некоторые типы файлов позволяют мусору оставаться в очереди. В этом случае вы можете следовать правилу, согласно которому перерегулирование лучше, чем недостижение. Однако это верно не для всех файлов! Если конец файла невозможно определить визуально (например, PDF-файлы заканчиваются подписью %% EOF), проанализируйте заголовок файла. Как правило, наряду с другой полезной информацией присутствует и размер файла. В этом случае все зависит от структуры конкретного файла и дать универсальные рекомендации невозможно.

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

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

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

Если мы посмотрим на отображение диска, представленное файлом / $ BITMAP, мы сможем восстановить точный порядок фрагментов удаленного файла, быстро собрав их вместе. Во всяком случае, теоретически такая возможность есть. Однако на практике на этом пути нас ждут коварные препятствия. Дело в том, что распределение свободного места могло радикально измениться с момента создания восстанавливаемого файла. Каждый процесс удаления файла обнаруживает одну или несколько «дыр», которые хаотично смешиваются с «дырами» восстановленного файла. Как можно устоять? Мы сканируем MFT на предмет записей, которые были помечены как удаленные, но еще не перезаписаны. Расшифровываем списки сегментов и удаляем соответствующие фрагменты из списка кандидатов на восстановление. Это значительно ограничивает диапазон поиска, хотя количество комбинаций, в которые можно собрать фрагментированный файл, все еще велико. Но это не самое главное.

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

Для восстановления документов, созданных в Microsoft Office, необходимо приложить больше усилий. Приложение создаёт большое количество резервированных копий редактируемого файла как в текущем каталоге, так и в каталоге %TEmp%. Не всегда можно понять какой фрагмент какому файлу принадлежит.  

Из всех восстанавливаемых файлов проще всего восстанавливаются ZIP-архивы. Для этого вам даже не нужно запускать редактор диска. Откройте временный файл на запись, посмотрите количество свободного места на диске, закройте файл. Теперь обработайте его с помощью инструмента pkzipfix.exe (или воспользуйтесь инструментом восстановления ZIP). Все уцелевшие ZIP-архивы волшебным образом появятся в «отремонтированном» файле! Внутренняя структура ZIP-архива такова, что pkzipfix может легко распознавать даже переупорядоченные блоки, поэтому высокая степень фрагментации не является препятствием.

Восстановление после форматирования

Представьте себе худшее: вы потеряли весь раздел NTFS. Возможно, вы случайно отформатировали его или столкнулись с серьезным отказом диска. Где-то там миллиарды байтов ценных данных больше не доступны операционной системе. Как вернуть информацию к жизни? До сих пор мы имели дело только с небольшими сбоями дисков и незначительными повреждениями данных, такими как случайно удаленные файлы. Пришло время подумать о восстановлении после серьезного повреждения, когда предыдущее содержимое тома становится недоступным для операционной системы. Это может быть вызвано, например, непреднамеренным форматированием или повреждением основной файловой таблицы. Но не расстраивайтесь! NTFS выходит из-под любых изменений с минимальными потерями, и во всех таких случаях возможно полное восстановление данных, если вы правильно подойдете к делу.

Для начала, нужно просто сделать Форматирование. Для экспе­римен­та нам по­требу­ется ути­лита format.com, входящая в стандартный ком­плект поставки Windows, и дис­ковый раздел, не содержащий никакой ценной информации.

При всем при этом лучше всего проводить экспе­римен­ты с виртуальной машиной – VirtualBox или VmWare, эму­лирующей жесткий диск и ускоряющей процесс формо­тиро­вания в сотни раз.

Команда форматирования в Windows 10 работает с одной интересной функцией, которую вполне можно назвать ошибкой: она не позволяет форматировать том, если пользователь не указал его метку, что дает ошибку: «указана неверная метка диска». Чтобы исправить эту ошибку, сделайте следующее. Перейдите в командную строку на диске, который вы хотите отформатировать, и введите vol. В окне командной строки отображается информация об имени метки и серийном номере тома. Затем, набрав команду форматирования с именем диска, по запросу программы format.exe введите метку тома, полученную на предыдущем шаге. Если том в настоящее время используется, примите предложение операционной системы отключить его.

Лучше не трогатй «живой» винчестер, если ты не умеешь его восстанавливать.

Действия, выполняемые при форматировании

Форматирование диска — это сложная многоэтапная операция, гораздо более сложная и многоэтапная, чем может показаться на первый взгляд. Мы начнем наше исследование с изучения случайно переформатированного тома NTFS.

После выполнения коман­ды format X:/U /FS://NTFS в фай­ловой системе дис­ка X: происходит следующее изменение (форматирование дис­ка утилитой GUI, вызываемой из контексного меню «проводника», осуществляется по ана­логичной схеме):

  1. Фор­миру­ется заг­рузоч­ный сек­тор NTFS.
  2. Генери­рует­ся новый серий­ный номер тома, который затем записы­вает­ся в заг­рузоч­ный сек­тор по сме­щению 48h бай­тов от его начала.
  3. Рас­счи­тыва­ется новая кон­троль­ная сум­ма заг­рузоч­ного сек­тора, которая затем записы­вает­ся по сме­щению 50h от его начала. Соз­дает­ся новый файл $MFT, содер­жащий све­дения обо всех фай­лах на дис­ке. Как пра­вило, он записы­вает­ся поверх ста­рого фай­ла $MFT. Исклю­чения из это­го пра­вила быва­ют, но они край­не ред­ки. Обыч­но они про­исхо­дят, если преж­ний файл $MFT был заб­лагов­ремен­но переме­щен деф­рагмен­татором, или если при перефор­матиро­вании был наз­начен новый раз­мер клас­тера. Во всех осталь­ных слу­чаях пер­вые 24 фай­ловых записи (FILE Record) погиба­ют без­воз­врат­но. Эти записи содер­жат непос­редс­твен­но сам файл $MFT, $MFTMirr, кор­невой каталог, /$LogFile — файл тран­закций, /$BITMAP — кар­ту сво­бод­ного прос­транс­тва, /$Secure — дес­крип­торы безопас­ности, а так­же ряд дру­гих слу­жеб­ных фай­лов.
  4. Ини­циали­зиру­ется файл $MFT:$DATA — наз­нача­ются новая дли­на фай­ла (ини­циали­зиру­ются $MFT:$30.AllocatedSize, $MFT:$30.RealSize, $MFT:$80.AllocatedSize, $MFT:$80.RealSize, $MFT:$80.CompressionSize, $MFT:$80.InitializedSize и $MFT:$80.LastVCN), дата и вре­мя соз­дания и пос­ледней модифи­кации (ини­циали­зиру­ются $MFT:$10.FileCreationTime, $MFT:$10.FileAlertedTime, $MFT:$10.FileReadTime, $MFT:$30.FileCreationTime, $MFT:$30.FileAlertedTime, $MFT:$30.MFTChangeTime и $MFT:$30.FileReadTime) и, самое глав­ное, соз­дает­ся новый спи­сок отрезков (data-runs), необ­ратимо затира­ющий ста­рый. Это зна­чит, что собирать фраг­менти­рован­ный файл $MFT нам при­дет­ся по час­тям.
  5. Соз­дает­ся новый файл /$MFT:$BITMAP, отве­чающий за занятость фай­ловых записей в MFT. При этом все ста­рые записи помеча­ются как сво­бод­ные, одна­ко их фак­тичес­кого уда­ления не про­исхо­дит (поле FileRecord.flags оста­ется нет­ронутым), бла­года­ря чему про­цеду­ра вос­ста­нов­ления замет­но упро­щает­ся. Чаще все­го $MFT:$BITMAP рас­полага­ется на том же самом мес­те, что и ста­рый (т. е. меж­ду заг­рузоч­ным сек­тором и MFT), забивая преж­нее содер­жимое нулями, одна­ко с помощью ути­литы chkdsk его мож­но вос­ста­новить.
  6. Соз­дает­ся новый файл /$BITMAP, отве­чающий за рас­пре­деле­ние дис­кового прос­транс­тва (сво­бод­ные и занятые клас­теры). Этот файл так­же записы­вает­ся поверх преж­него фай­ла /$BITMAP, который, тем не менее, может быть вос­ста­нов­лен с помощью chkdsk.
  7. Соз­дает­ся новый файл жур­нала тран­закций — /$LogFile.
  8. B заголо­вок фай­ловой записи $MFT заносит­ся новый LSN (LogFile Sequence Number).
  9. $MFT наз­нача­ется новый номер пос­ледова­тель­нос­ти обновле­ния (Update Sequence Number).
  10. Соз­дает­ся новое зер­кало $MFTMirr, необ­ратимо затира­ющее ста­рое (в текущих вер­сиях фай­ловых сис­тем оно рас­положе­но в середи­не раз­дела NTFS).
  11. Соз­дают­ся новые /$Volume, /$AttrDef и дру­гие слу­жеб­ные фай­лы, игра­ющие сугубо вспо­мога­тель­ную роль и лег­ко вос­ста­нав­лива­емые ути­литой chkdsk. Сле­дует отме­тить, что хотя /$Volume и при­сутс­тву­ет в зер­каль­ной копии MFT, его цен­ность явно пре­уве­личе­на.
  12. Осу­щест­вля­ется про­вер­ка целос­тнос­ти повер­хнос­ти дис­ка, и все обна­ружен­ные «пло­хие» клас­теры заносят­ся в файл /$BadClus.
  13. Фор­миру­ется новый кор­невой каталог.
  14. Ес­ли до фор­матиро­вания тома на нем при­сутс­тво­вал файл /System Volume Information, то он обновля­ется, в про­тив­ном слу­чае новый файл /System Volume Information соз­дает­ся толь­ко пос­ле перезаг­рузки.

  В действительности процесс форматирования гораздо сложнее. Тем не менее представленной здесь информации достаточно для восстановления данных с случайно переформатированных разделов. Подробное обсуждение этих технических деталей требуется только программисту, разрабатывающему собственную утилиту для форматирования. Заинтересованные читатели могут самостоятельно разобрать утилиту format.com (рекомендуется делать это с помощью IDA Pro).

Утилита format.com содержит только надстройку высокого уровня, основанную на библиотеках fsutil.dll, untfs.dll и непосредственно на самом драйвере файловой системы. Так что разбирать придется много. Чтобы упростить себе работу, вы можете наблюдать за процессом форматирования с помощью «шпионских» инструментов, например, утилит Mark Russinovich Process Monitor (procmon.exe), Diskmon.exe, бесплатные копии которых можно скачать с https: / /docs.microsoft. com / en-us / sysinternals /. Кроме того, не забывайте о точках останова в основных собственных функциях API, таких как NtFsControlFile, NtDeviceIoControlFile и т. д.

Автоматическое восстановление диска

Форматирование не удаляет файловые записи пользовательских файлов и полностью восстанавливается. Существует множество утилит для восстановления данных, таких как R-Studio, EasyRecovery, GetDataBack и др. Однако прямых потомков утилиты unformat среди них нет. Утилита unformat.exe восстановила весь том, и все современные инструменты, упомянутые выше, извлекают только отдельные уцелевшие файлы и каталоги и перезаписывают их на новый носитель. Здесь мы столкнулись с рядом проблем.

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

На примере утилиты R-Studios от R-Tools Technology мы покажем, как можно восстановить данные с поврежденных носителей. Это мощный, но простой в использовании инструмент, которому можно доверять. После запуска утилиты на экране появится окно панели «Диск», в котором перечислены все физические устройства и логические разделы. Найдите среди них то, что вы хотите восстановить, и, щелкнув правой кнопкой мыши, выберите опцию Проверить.

Программа предложит указать начальный сектор для исследования, который по умолчанию равен нулю. Этот показатель останется без изменений. Размер сканируемой области (поле Объем) по умолчанию увеличивается на весь раздел в целом. Этот факт гарантирует, что сканер найдет все файлы, которые сохранились в архиве, хотя сам поиск займет длительное время. Как ускорить этот процесс? А теперь возьмем ручку и посчитаем. И допустим на данный момент, что восстанавливаемый раздел содержит стотысяч файлов и имеет размер. Файловая запись в формате MFT имеет размер 1 КБ. Если же файл $ MFT не фрагментарен, достаточно просканировать только примерно 100 МБ от начала раздела. Если это значение (размер пространства, зарезервированного для MFT) не превышает 10% от общей емкости тома, а диск никогда не был заполнен более чем на 90%, то, скорее всего, так и есть.   

В противном случае файл $ MFT будет фрагментирован и  разбросан по всему диску. Но если ошибка будет допущена, то мы ничем не рискуем. Задаем значение N КБ, где N — это примерное количество файлов (каталоги также считаются файлами), и сканируем. При отсутствии одного или нескольких файлов, обратитесь к настройкам по умолчанию и повторитесь попытку сканирования еще раз (если количество имеющихся файлов заранее не известно, необходимо указать число, равное 10% емкости тома) Для того чтобы выбрать файловую систему NTFS, нужно в поле Файловая система выбрать файловую систему NTFTS (можно оставить настройки по умолчанию. Затем нажмите “Анализировать”, и начнется анализ.

R-Studio осу­щест­вля­ет поиск уце­лев­ших фай­ловых записей

Во время проведения сканирования будут найдены все оставшиеся файлы. При этом будет восстановлена структура каталога и корневой каталог. Подождите минуту! Почему? Но, как вы помните, при форматирвании корневой каталог был уничтожен и преобразовался! Ничего удивительного в этом нет. Файловая система NTFS в очередном раз показала свою живучесть: ее, скореевсего, можно уничтожить только динамитом. Отличие от FAT в том, что каталоги NTFS – это просто вспомогательная структура данных, которая индексируется для ускорения их отображения. Каждый файл, независимо от его источника, содержит ссылку на родительский каталоги, которые являются номерами записей в MFT. При этом запись в корневом каталоге всегда располагается по одному и тому же адресу!

Вос­ста­нов­ленная струк­тура катало­гов

Удаленные наборы файлов могут относиться к каталогам, которые уже были уничтожены. R-Studio собирает их в папке $$$ FolderXXX, где XXX — порядковый номер каталога. Поэтому в большинстве случаев иерархия подкаталогов будет успешно восстановлена.

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

Ручное восстановление жесткого диска

Наша цель – вручную восстановить весь отформатированный диск без использования дополнительных носителей и платных сторонних утилит. Нужно только выбрать любой редактор диска (например, DiscExplorer от Runtimesoftware) и встроенную утилиту chkdsk.

Ди­зас­сем­бли­рова­ние показы­вает, что единс­твен­ной струк­турой дан­ных, без которой не может работать chkdsk, явля­ется атри­бут $DATA фай­ла $MFT. А раз так, все, что тре­бует­ся сде­лать, сво­дит­ся к вос­созда­нию преж­него фай­ла $MFT:$DATA и его раз­мещению поверх ста­рых фай­ловых записей. В прос­тей­шем слу­чае, если файл $MFT:$DATA не фраг­менти­рован, это дос­тига­ется так называ­емым спе­куля­тив­ным уве­личе­нием его дли­ны. Как это сде­лать?

Запустите DiskExplorer, перейдите к началу MFT (Перейти к | Mft), выберите файл $ MFT, найдите атрибут $ DATA (80h) и увеличьте поля «Выделенный размер», «Фактический размер» и «Сжатый размер» на требуемую величину, одновременно регулируя список параллельных отрезков. Поле Last VCN трогать не нужно, оно будет исправлено утилитой chkdsk. Как определить длину нефрагментированного файла MFT? Он равен разнице между номерами первого и последнего секторов, в начале которых присутствует сигнатура ФАЙЛА, умноженной на 512 байтов (без учета секторов, принадлежащих $ MFTMirr). Известные мне редакторы дисков не поддерживают поиск по последнему вхождению, поэтому вам придется написать соответствующую утилиту самостоятельно. К счастью, совсем не обязательно определять точную длину MFT, и вполне допустимо брать ее с запасом, так как избыток всегда будет отфильтровывать chkdsk. Действуйте по принципу — лучше превзойти, чем терпеть.

Утилита DiskExplorer не позволяет изменять поля в режиме естественного отображения, вынуждая нас переключаться в режим HEX и самостоятельно искать смещения всех значений. Заголовок атрибута $ DATA найти очень легко — в начале идет последовательность 80 00 00 00 xx 00 00 00 01. Поле «Фактический размер» во всех версиях NTFS расположено по смещению 30h от заголовка, а поле «Выделено» Поля size и Initialized size со смещением 28h и 38h байтов соответственно, а Allocated size должны быть кратны размеру кластера. Убедитесь, что размер кластера не изменился при переформатировании диска, иначе произойдет сбой.

Каким образом можно восстановить изначальный объем ккластера? Просто возьмите и измените диск с ключом /A:x, в котором x — размер кластера. По каким признакам можно понять? Для того чтобы сделать это необходимо взять любой файл с известным содержанием и проанализировать его список сегментов. Запускаем контекстный поиск по всему диску, находим файл, запоминаем (отмечаем на листе бумаги) его начальный сектор, затем открываем запись присвоенного ему файла, декодируем список сегментов и вычисляем номер первого кластер. Для того, чтобы получить желаемое значение, необходимо разделить номер сектора на номер кластера .

Ручное вос­ста­нов­ле­ние MFT. Указаны поля ( подчеркнуты ) для изменения.

Теперь нам нужно создать новый список строк. В большинстве случаев это выглядит так: 13 XX XX XX YY 00, где XX XX XX — трехбайтовое значение размера $ MFT в кластерах, и YY — начальный кластер. Стартовый кластер должен указывать на первый кластер MFT, иначе chkdsk не сможет работать. А если новый список сегмента больше предыдущего (возможно, так и будет), то длину названия атрибута необходимо увеличить (он находится со смещением 04ht от его начала). После выполнения этой несложной операции нажмите клавишу / F, для запуска chkdsk. После этого можно наблюдать как восстнавливаются файлы и папки.

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

При восстановлении тома с сильно фрагментированной MFТ требуется больше усилий и времени. По­след­нее измене­ние списка отрезков при фор­матировании было унич­тожено, а также повреждена зеркальная копия. Осталось только собрать все фрагменты своими руками. К счастью, на практике это оказывается совсем не сложно. По сравнению с другими файлами на диске, файл $ MFT содержит очень хорошую подпись FILE в конце каждой записи файла. Итак, для того чтобы получить желаемый результат, мы должны выполнить следующие операции. Выбирая фрагмент, который относится к MFT (от 1-го кластера до последнего), запишите начало и конец каждого из них. Затем из этой цепоч­ки необ­ходимо исклю­чить файл $MFTMirr. Его лег­ко узнать, так как он рас­положен в середи­не раз­дела и содер­жит копии фай­ловых записей $MFT, $MFTMirr, $LogFile и $Volume, при­чем $MFTMirr ссы­лает­ся на себя. В рас­смат­рива­емом при­мере наш спи­сок выг­лядит так: 08h 333h, 669h 966h, 1013 3210h. В гру­бом приб­лижении ему будет соот­ветс­тво­вать сле­дующий спи­сок отрезков: 2 2B 03 08 22 23 03 69 96 22 FD 21 13 10

Вывод

Какие последствия могут быть у нарушения порядка сборки файла MFT? В MFT все записи файлов ссылаются друг на друга по их порядковым номерам, которые являются индексами массива. Здесь они нужны чтобы восстановить структуру каталога и организовать жесткие ссылки (hard links) и некоторые другие структуры служб. Все ссылки на родительский каталог, которые были удалены из индекса, можно восстановить с помощью ссылок на родительский каталог. Все жесткие ссылки безвозвратно утеряны (если вы хотите восстановить их, то вам придется заново создать файл $ MFT). Они почти нигде не используются и совсем не используются; поэтому их потеря не так уж и значительна.

 

 

 

 

 

 

 

 

 

 

 

Click to rate this post!
[Total: 4 Average: 3]
faza

View Comments

Recent Posts

Лучший адаптер беспроводной сети для взлома Wi-Fi

Чтобы взломать сеть Wi-Fi с помощью Kali Linux, вам нужна беспроводная карта, поддерживающая режим мониторинга…

11 месяцев ago

Как пользоваться инструментом FFmpeg

Работа с консолью считается более эффективной, чем работа с графическим интерфейсом по нескольким причинам.Во-первых, ввод…

11 месяцев ago

Как создать собственный VPN-сервис

Конечно, вы также можете приобрести подписку на соответствующую услугу, но наличие SSH-доступа к компьютеру с…

11 месяцев ago

ChatGPT против HIX Chat: какой чат-бот с искусственным интеллектом лучше?

С тех пор как ChatGPT вышел на арену, возросла потребность в поддержке чата на базе…

11 месяцев ago

Разведка по Wi-Fi и GPS с помощью Sparrow-wifi

Если вы когда-нибудь окажетесь в ситуации, когда вам нужно взглянуть на спектр беспроводной связи, будь…

11 месяцев ago

Как обнаружить угрозы в памяти

Elastic Security стремится превзойти противников в инновациях и обеспечить защиту от новейших технологий злоумышленников. В…

11 месяцев ago