Scalpel: современный инструмент восстановления данных.
В прошлой статье я рассказывал о Foremost, наследнике работавшей в DOS программы CarvThis. Сегодня поговорим о Scalpel, форке Foremost.

Общие принципы работы здесь те же: удаленные или утерянные файлы ищутся по первым и последним байтам, а также другим характерным признакам. Однако, есть и важные отличия, на которых я обязательно остановлюсь. Словом, если вы нечаянно удалили или повредили свои данные, 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 из репозитория:

sudo apt install scalpel

Простой пример использования Scalpel в Ubuntu

После этого отредактируем конфиг Scalpel в Ubuntu:

sudo gedit /etc/scalpel/scalpel.conf

Здесь нам нужно раскомментировать интересующий нас тип файлов или добавить соответствующую строку, если он отсутствует (об этом далее). Давайте попробуем поискать pdf:

Простой пример использования Scalpel в Ubuntu

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

Запускаем Scalpel в Ubuntu, выполнив в терминале команду:

sudo scalpel ~/flash_image/my_flash_image.img -o ~/restored -v

Здесь ~/flash_image/my_flash_image.img — путь к образу устройства, с которого восстанавливаются данные. Вместо ~/restored, соответственно, подставьте свой путь к папке, предназначенной для записи результатов.

Простой пример использования Scalpel в Ubuntu

Простой пример использования Scalpel в Ubuntu

Смотрим, что получилось:

Простой пример использования Scalpel в Ubuntu

Простой пример использования Scalpel в Ubuntu

Как и в случае с Foremost, папка с файлами и отчет.

Добавление собственных типов файлов в конфиг Scalpel и Foremost.

Итак, давайте предположим, что нам нужно восстановить cdr файл. Нам понадобится простой HEX-редактор, а также файл этого же типа в качестве образца. В качестве первого я буду использовать Ghex.

sudo apt install ghex

Откроем с его помощью наш файл:

ghex ~/2.cdr

Добавление собственных типов файлов в конфиг Scalpel и Foremost

Слева данные представлены в HEX (шестнадцатеричном) формате. Справа — ISCII. Нас интересуют первые символы. Выделяя символы с одной стороны, вы увидите соответствующие им значения слева. RIFF — это распространенный контейнер, в котором могут находиться самые разные бинарные файлы. Уже кое-что, но явно недостаточно. Далее, после точек, в ISCII мы видим CDR, что указывает на тип содержимого. За этим идет версия, что нам уже ни к чему. Итак, нам нужны HEX-значения (слева) до символа R в CDR включительно.

Добавление собственных типов файлов в конфиг Scalpel и Foremost

Если вы испытываете затруднения с вашим форматом файла, не ленитесь обратиться к поисковым системам. По запросу «расширение_вашего_файла signatures» вы наверняка найдете подробную информацию.

Открываем scalpel.conf и добавляем следующую строку:

cdr y 100000000 \x52\x49\x46\x46\xF0\xBD\x08\x00\x43\x44\x52  \x21\x04\x00\x00\x00\x00\x00\x00\xDC\x05\x00\x00

Добавление собственных типов файлов в конфиг Scalpel и Foremost

Первое значение (cdr) — расширение искомого файла. Если оно не имеет значения, укажите NONE. Второе значение определяет, нужно ли учитывать регистр символов, у — да, n — нет. Далее идет максимальный размер в байтах. Для версий Scalpel от 1.9 можно указывать и минимальное, и максимальное значение в формате мин:макс. Следующие две строки мы взяли из начала и конца файла нужного нам типа (см. выше), а затем добавили \x, чтобы указать на шестнадцатеричный формат.

Запускаем Scalpel:

sudo scalpel ~/images/image.img -o ~/restored -v

Немного ждем — и… вот он, наш файл:

Добавление собственных типов файлов в конфиг Scalpel и Foremost

Открывается тоже без проблем.

Добавление собственных типов файлов в конфиг Scalpel и Foremost


Комментарии отключены