Восстановление текстовых файлов на основе известных строк

Я потерял несколько txt файлов, которые содержат важную личную информацию. Я случайно удалил их с жесткого диска. Я не уверен, в какой папке они были. Я не уверен, какие имена файлов у них были (по крайней мере, не все из них), но я знаю некоторые ключевые слова, которые, вероятно, будут в них. Например, я знаю, что большинство из них содержат строку diary (вы можете догадаться, почему эти файлы важны для меня).

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

Так что мой единственный вариант-искать эти известные строки из сырого дампа.

у меня есть дамп раздела FAT32, файл img 150GB, созданный с помощью dd.

насколько я понимаю, FAT32 использует кластеры 4K. Таким образом, любой файл размером меньше 4K, что относится к большинству txt-файлов, которые я ищу, будет находиться в одном кластере. Некоторые из них будут охватывать два или более кластеров, возможно, смежных, возможно, нет.

поэтому я думаю, что мне нужен инструмент, который может пройти каждый кластер на изображение, и grep для списка ключевых слов. Если кластер содержит совпадение, его следует скопировать в файл, возможно, просто cluster001.txt, cluster002.TXT, и т. д. Затем я могу вручную собрать эти кластеры вместе.

Я хотел бы знать, если мои рассуждения и идеи, смысла?

какие инструменты я могу использовать для достижения это?

1 ответ:

Я не знаю ни одного инструмента восстановления файлов, который выбирает файлы на основе определенной строки, которую они содержат, но эти три метода должны работать:

  1. при удалении файла из раздела FAT32 его имя файла не перезаписывается. Только первый байт имени файла 8.3 получает значение E5, пометив файл как удаленный. Это не повлияет на расширение, поэтому файлы TXT по-прежнему легко распознаются.

    вы можете использовать любой инструмент для восстановления файлов это позволяет указать расширение (например, Recuva), восстановить все файлы TXT, а затем искать дневник во всех восстановленных файлов.

    поскольку текстовые файлы (обычно) небольшие, восстановление текстовых файлов не должно занимать много времени (возможно, меньше, чем их поиск). Для раздела 150 ГБ это должно быть довольно быстро.

  2. программы, как PhotoRec идентифицировать файлы по их содержанию и попытаться восстановить их. В то время как это правда, что текстовые файлы не имеют заголовков, PhotoRec все еще удается идентифицировать их (путем исключения, я полагаю).

    опять же, вы можете восстановить все текстовые файлы, а затем искать дневник во всех восстановленных файлов.

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

  3. так как вы не ожидаете, что текстовые файлы будут большой, вы также можете искать дневник в дампе раздела и восстановить кластер, содержащий его:

    sudo bash -c '
        for OFFSET in $(grep -abio diary /dev/sda3 | cut -d: -f 1); do
            ((CLUSTER = OFFSET / 4096))
            dd if=<imgfile> of=cluster$CLUSTER.txt bs=4096 skip=$CLUSTER count=1
        done
    '
    

    как работает:

    • grep -Pabio diary /dev/sda3 | cut -d: -f 1 выведет смещения байтов каждого вхождения строки дневник в файле изображения.

      на -i переключатель делает поиск без учета регистра. Элемент -P переключатель включает Perl-совместимые регулярные выражения. Это необходимо из-за ошибки в некоторых версиях (GNU)grep это делает поиск без учета регистра невыносимо медленным, если вы не используете PCRE.

    • ((CLUSTER = OFFSET / 4096)) вычисляет смещение в кластерах из смещения в байтах.

    • dd if=<imgfile> of=cluster$CLUSTER.txt bs=4096 skip=$CLUSTER count=1 записывает кластер со смещением X в файле с именем clusterX.txt.

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

    взыскать трех кластеров (один до и один после кластера, содержащего дневник), внести следующие изменения:

    ((CLUSTER = OFFSET / 4096 - 1))
    
    dd ... count=3