Восстановление файлов по сигнатурам или “черновое” восстановление данных

В статье рассматриваются случаи, когда файловая система на жестком диске, флэшке или на карте пямяти повреждена настолько, что невозможна даже ее частичная сборка. При этом файлы пользователя все еще присутствуют на носителе, но неизвестна структура каталогов и атрибуты фалов (дата и время создания и изменения, а также размещение – в каких папках они хранились). В этом случае и прибегают к так называемому “черновому восстановлению”, или восстановлению файлов по сигнатурам. Это то, что называется “последний шанс”, когда все остальные способы не помогли.
Статья рассчитана на широкую аудиторию, и не требует от читателя специальных знаний.
Время чтения - 10 минут.

Для понимания процесса восстановления файлов по сигнатурам, рассмотрим следующие вопросы:


Как данные хранятся на диске?

Чтобы упростить понимание изложенной в этой статье информации, достаточно представить носитель (жесткий диск, флэшку или любой другой) как книгу с содержанием. То есть, на первых страницах этой книги есть оглавление, которое содержит в себе перечень всех разделов, подразделов и глав книги с указанием страниц, на которых они находятся. Идеология хранения цифровых данных точно такая же, только конкретная реализация зависит от файловой системы: NTFS, exFAT, HFS+, APFS и так далее. Содержание бумажной книги - аналог файловой системы цифрового носителя. Только в первом приближении, конечно.
Если открыть любой исправный жесткий диск в проводнике Windows, мы увидим примерно такую картину:

Отображение диска с данными в проводнике Windows

Если развернуть любую из этих папок, то откроется ее содержимое:

Отображение списка файлов в папке в проводнике Windows

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

Почему файловая система может повредиться? Вот наиболее частые причины:

  • случайное форматирование с последующей записью;
  • физическое повреждение жесткого диска или флэшки, когда область диска с файловой системой не читается;
  • воздействие вирусов, а как же без них!

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

Что такое сигнатура файла?

Как известно, данные в файлах хранятся в цифровом виде. Для того, чтобы отличить один тип файла от другого и придумана сигнатура, то есть подпись (разумеется, тоже цифровая). Она размещена в начале файла и является идентификатором типа файлов. Это проще показать, чем рассказать. Рассмотрим сигнатуру файла на примере распространенного формата для хранения фотографий jpeg. Если открыть любой файл jpeg в шестнадцатеричном редакторе, то мы увидим одну и ту же последовательность символов в одном и том же месте:


Сигнатура jpeg в шестнадцатеричном редакторе

Последовательность FF D8 FF в начале первого сектора каждого файла - это и есть сигнатура: идентификатор файла, который означает, что это - именно jpeg файл.

Сигнатуры есть не у всех типов файлов: если, например, открыть в шестнадцатеричном редакторе текстовый файл (с расширением txt), то мы обнаружим, что там нет никакой сигнатуры: с самого первого байта начинается текст:


Пример текстового файла без сигнатуры

Есть и другие типы файлов, которые не имеют сигнатур, но у большинства распространенных форматов хранения данных, сигнатуры есть. Вот примеры:

  • avi (Audio Video Interleave video format): 52 49 46
  • mp3 (MPEG-1 Layer 3 file): FF FB, FF F3, FF F2
  • tiff (Tagged Image File Format): 49 49 2A 00
На этой особенности и реализованы все алгоритмы поиска файлов по сигнатурам, или так называемого “чернового восстановления”.

Как восстанавливают файлы по сигнатурам

Рассмотрим алгоритм восстановления данных на примере все того же формата jpeg - он наиболее удобен для понимания. Для примера смоделируем ситуацию случайного форматирования флэшки. Для начала я заполнил все сектора нашей подопытной флэшки нулями, чтобы гарантировать, что на ней не останется никаких данных от предыдущих файловых систем. Я сделал это “для чистоты эксперимента”, в реальной жизни все несколько сложнее, но об этом позже. Теперь все сектора флэшки содержат только нули, то есть на ней нет совсем никакой информации, включая файловую систему и даже таблица разделов отсутствует. Такая флэшка, если вставить ее в USB разъем компьютера, то операционная система предложит ее отформатировать:


Пример текстового файла без сигнатуры

А если открыть ее в оснастке “Управление дисками”, то мы увидим, что на ней нет файловой системы:


Отображение пустого диска в оснастке Управление дисками

Компьютер воспринимает ее файловую систему как RAW, то есть “сырые данные”, а проще говоря, - их отсутствие в нашем случае.
Теперь отформатируем флэшку в файловую систему NTFS и запишем на нее файлы jpeg:


Флешка с фотографиями формата jpeg

Я создал на флэше одну папку с именем “Осень 2020” и записал в нее 129 файлов jpeg в среднем качестве: каждый файл занимает приблизительно 4-5 Мб дискового пространства. Если теперь еще раз отформатировать эту флэшку, то она будет отображаться в проводнике как пустой диск:


Пустая флешка отображается в проводнике так

Мы смоделировали ситуацию случайного форматирования флэшки. Займемся восстановлением данных с нее. Вообще-то алгоритм восстановления данных по сигнатурам – самый простой из существующих, и он реализован в очень многих программах автоматического восстановления данных, в том числе бесплатных, но профессиональные лаборатории, конечно используют соответствующее их статусу оборудование и программное обеспечение. Мы воспользуемся программно-аппаратным комплексом PC3000 UDMA. Разумеется, функция поиска файлов по сигнатурам входит в его арсенал.

После создания задачи восстановления данных в комплексе PC-3000 мы увидим такую картину:


Отформатированная флешка в программе восстановления данных PC-3000

Во время последнего форматирования была создана новая файловая система NTFS, которая содержит служебные файлы, созданные ей самой. Эти файлы не отображаются в проводнике Windows, но они показаны в программе восстановления данных. Однако данных предыдущей файловой системы, конечно не видно. Проведем сканирование нашей флэшки поиском по сигнатурам:


Результат сканирования флешки поиском файлов по сигнатурам

Как видите, найдены все файлы, которые были на флэшке до форматирования: 129 файлов с расширением jpeg. Как программа находит файлы по сигнатурам? Она просто сканирует всю флэшку, начиная с нулевого сектора и ищет в начале каждого сектора соответствующую шестнадцатеричную последовательность. В нашем случае – это сигнатура jpeg файла FF D8 FF. Найдя такую последовательность в начале сектора алгоритм считает, что все, что следует дальше – это jpeg файл. Но нужно еще определить, где он заканчивается. В случае jpeg это не трудно – все jpeg файлы всегда заканчиваются последовательностью FF D9, в чем легко убедиться, если открыть такой файл в шестнадцатеричном виде и посмотреть на два его последних байта:


Признак окончания файла jpeg в шестнадцатеричном виде

Такую последовательность программа считает окончанием текущего файла. Осталось только сохранить в памяти смещение, по которому находится начало файла и его размер и можно двигаться дальше в поисках следующего.
Итак, все файлы найдены и теперь их можно сохранить на диск (разумеется не на тот же, с которого мы восстанавливаем данные). После сохранения, зайдя в папку с восстановленными файлами, мы видим, что восстановление прошло корректно:


Восстановленные файлы скопированы на диск

Но здесь мы обнаружим одну особенность: файлы имеют другие названия, а главное они все сложены в одну папку. Почему? Потому, что информация об именах файлов, каталогах в которых они хранились (и множество других атрибутов файлов), хранится только в файловой системе. А при поиске по сигнатурам эту информацию просто негде взять. Это один из существенных минусов способа чернового восстановления данных, но не единственный. Об остальных позже.

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

Итак, восстановить данные по сигнатурам несложно, это умеют делать многие программы автоматического восстановления, но в некоторых случаях не помогает даже такой метод, а в некоторых случаях такой метод хоть и восстанавливает данные, но без информации об их размещении он не имеет смысла. Рассмотрим эти случаи.

Когда восстановление по сигнатурам не поможет?

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

  • удаленные файлы были перезаписаны новыми данными;
  • файлы были фрагментированы на диске;
  • данные на диске были зашифрованы;
  • файлы восстановлены корректно, но без информации о структуре папок и именах файлов, эти данные бессмысленны;

Удаленные файлы были перезаписаны новыми данными

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

Файлы были фрагментированы на диске

Что значит “фрагментированы”? Такая ситуация возникает, когда диском или флэшкой активно пользуются (то есть почти всегда): записывают какие-то данные, потом удаляют ненужную или устаревшую информацию, затем снова записывают новые данные и так далее. В этом случае дисковое пространство становиться похоже на лоскутное одеяло: сначала идет часть с данными, потом пробелы, потом снова данные, снова пробелы из свободного пространства и так далее до конца диска. И если на диск нужно записать новый файл достаточно большого объема, то файловая система ищет на диске большую свободную область, и если весь файл туда не помещается, то записывает туда начало файла, затем дописывает оставшуюся часть (или части) в другую область диска. В этом случае один файл может быть разбит на несколько разных фрагментов, а информация о том, где какой фрагмент находится, хранится опять же в файловой системе (помните про оглавление книги), только теперь уже одному файлу соответствует не одна строчка в нашем оглавлении, а несколько, в зависимости от количества фрагментов, на которые он был разбит. И если этих записей больше нет в файловой системе, то никакой поиск не поможет восстановить файл целиком: ведь по сигнатуре мы можем определить только начало файла, а вот где находится его продолжение алгоритм уже не сумеет определить: эта информация хранится только в самой файловой системе и нигде больше ее нет. Поэтому восстановление файлов по сигнатурам не сработает в случае с фрагментированными файлами. Такие фалы либо вообще не будут открываться, либо будут “битыми” (поврежденными). Вот как выглядит такой “битый”, частично восстановленный файл, на примере все того-же jpeg:


Пример частично восстановленного файла jpeg

Найдено только начало изображения, где находится его вторая половина - неизвестно.

Данные на диске были зашифрованы

Здесь тоже все понятно: зашифрованные файлы с точки зрения любой внешней программы восстановления выглядят как бессмысленная “каша”, найти в ней какие-то разумные последовательности, в том числе сигнатуры файлов попросту невозможно. Вообще-то именно в этом и состоит смысл шифрования, - было бы странно если бы было иначе. А это значит, что восстановить зашифрованные данные можно только имея ключ, которым они были зашифрованы. Впрочем, тема шифрования, как и тема восстановления зашифрованных данных слишком обширна и не так однозначна, как может показаться на первый взгляд. Мы обязательно поднимем ее позже. Следите за новостями.

Требуется полноценное восстановление файловой системы

Часто бывает, что для получения доступа к данным недостаточно извлечь сами файлы, требуется еще и восстановление имен файлов и папок, в которых они были разложены. Например, это необходимо, если сами файлы были частью какого-то структурированного набора данных: базы 1С, коллекцией музыкальных сэмплов, и т.п. В этом случае требуется полноценное восстановление файловой системы со всей структурой папок, иначе программа не заработает, а сами данные будут бессмысленны для пользователя.

Резюмируя, можно сказать, что рассмотренный в этой статье метод восстановления данных по сигнатурам хорошо подходит для восстановления фотографий, а также небольших по объему медиа файлов или документов Office, но только тогда, когда они не фрагментированы и информация об их размещении не важна. Во всех остальных случаях метод чернового восстановления не дает качественного результата.


Ну а у меня на сегодня все. Берегите себя и свои данные!
Автор: Вадим Шестернин aka WAIK.
Лаборатория восстановления данных Advanced Group, Санкт-Петербург
11.09.2020.
Logos unserer Partner