Общие принципы работы здесь те же: удаленные или утерянные файлы ищутся по первым и последним байтам, а также другим характерным признакам. Однако, есть и важные отличия, на которых я обязательно остановлюсь. Словом, если вы нечаянно удалили или повредили свои данные, Scalpel поможет их вернуть.
Дальнейший текст подразумевает, что вы читали предыдущую статью, где речь шла о восстановлении данных с помощью Foremost. В крайнем случае прочтите хотя бы вступление и первый раздел: Foremost — программа для восстановление утраченных данных в домашних условиях.
Особенности программы Scalpel в Ubuntu.
Важная и полезная особенность Scalpel заключается в том, что эта программа ориентирована на скорость работы. Более высокая производительность достигается за счет многопоточности на многоядерных процессорах и асинхронного ввода-вывода. Более того, внеся небольшие изменения в исходный код программы, можно включить поддержку GPU (только для Nvidia). В этом случае число работающих одновременно потоков значительно увеличится, а работа программы ускорится.
Конфигурационный файл Scalpel очень похож на таковой у Foremost, хотя отличия все же есть. Одно из самых полезных — возможность использовать регулярные выражения для описания содержимого файла. Это очень удобно, когда нужно найти текстовый файл, точного содержания которого вы не знаете, но известно, например, что там есть последовательно идущие символы «GPU», а затем, через неизвестное количество символов, встречается «Nvidia». Поскольку текстовые документы, в отличие от бинарных, нельзя вычислить по первым и последним байтам, регулярные выражения очень пригодятся для поиска утраченных логов, исходных кодов программ и многого другого.
При желании можно использовать конфиг от Foremost, указав путь к нему после ключа -c. При этом рекомендуется добавить ключ -b.
А теперь ложка дегтя. И многопоточность, и поддержка регулярных выражений появились в версии 1.9, но в репозитории Ubuntu 16.04 (как, впрочем, и новейшей 17.04) находится версия 1.6. Если вам нужны эти возможности, придется скачать программу из репозитория на Github и собрать самостоятельно. Я же буду использовать версию 1.6.
Простой пример использования Scalpel в Ubuntu.
Как обычно, установим программу Scalpel в Ubuntu из репозитория:
После этого отредактируем конфиг Scalpel в Ubuntu:
Здесь нам нужно раскомментировать интересующий нас тип файлов или добавить соответствующую строку, если он отсутствует (об этом далее). Давайте попробуем поискать pdf:
Не нужно раскомментировать сразу все, это замедлит обработку данных. Включайте только те типы файлов, которые нужно восстановить.
Запускаем Scalpel в Ubuntu, выполнив в терминале команду:
Здесь ~/flash_image/my_flash_image.img — путь к образу устройства, с которого восстанавливаются данные. Вместо ~/restored, соответственно, подставьте свой путь к папке, предназначенной для записи результатов.
Смотрим, что получилось:
Как и в случае с Foremost, папка с файлами и отчет.
Добавление собственных типов файлов в конфиг Scalpel и Foremost.
Итак, давайте предположим, что нам нужно восстановить cdr файл. Нам понадобится простой HEX-редактор, а также файл этого же типа в качестве образца. В качестве первого я буду использовать Ghex.
Откроем с его помощью наш файл:
Слева данные представлены в HEX (шестнадцатеричном) формате. Справа — ISCII. Нас интересуют первые символы. Выделяя символы с одной стороны, вы увидите соответствующие им значения слева. RIFF — это распространенный контейнер, в котором могут находиться самые разные бинарные файлы. Уже кое-что, но явно недостаточно. Далее, после точек, в ISCII мы видим CDR, что указывает на тип содержимого. За этим идет версия, что нам уже ни к чему. Итак, нам нужны HEX-значения (слева) до символа R в CDR включительно.
Если вы испытываете затруднения с вашим форматом файла, не ленитесь обратиться к поисковым системам. По запросу «расширение_вашего_файла signatures» вы наверняка найдете подробную информацию.
Открываем scalpel.conf и добавляем следующую строку:
Первое значение (cdr) — расширение искомого файла. Если оно не имеет значения, укажите NONE. Второе значение определяет, нужно ли учитывать регистр символов, у — да, n — нет. Далее идет максимальный размер в байтах. Для версий Scalpel от 1.9 можно указывать и минимальное, и максимальное значение в формате мин:макс. Следующие две строки мы взяли из начала и конца файла нужного нам типа (см. выше), а затем добавили \x, чтобы указать на шестнадцатеричный формат.
Запускаем Scalpel:
Немного ждем — и… вот он, наш файл:
Открывается тоже без проблем.