根据已知字符串恢复txt文件

Mad*_*ern 5 data-recovery

我丢失了许多 txt 文件,其中包含重要的个人信息。我不小心从硬盘上删除了它们。我不确定它们位于哪个文件夹中。我不确定它们的文件名是什么(至少不是全部),但我知道其中可能存在一些关键字。例如,我知道其中大多数都包含字符串diary(您可以猜测为什么这些文件对我很重要)。

据我所知,我无法使用像 Scalpel 这样的文件雕刻工具,因为它们依赖于基于页眉和页脚来识别文件,但 txt 文件两者都没有。

所以我想我唯一的选择是在原始转储中搜索这些已知的字符串。

我有 FAT32 分区的转储,一个 150GB 的 img 文件,使用dd.

据我了解FAT32使用4K簇。因此,任何小于 4K 的文件(我正在查找的大多数 txt 文件都是这种情况)将位于一个簇中。其中一些将跨越两个或多个集群,也许是连续的,也许不是。

所以我想我需要一个工具,可以遍历图像上的每个簇,并 grep 获取关键字列表。如果簇包含匹配项,则应将其复制到文件中,可能只是 cluster001.txt、cluster002.txt 等。然后我可以手动将这些簇拼凑在一起。

我想知道我的推理和想法是否有道理?

我可以使用什么工具来实现这一目标?

Den*_*nis 5

我不知道有任何文件恢复工具可以根据文件包含的特定字符串来选择文件,但这三种方法应该有效:

  1. 当 FAT32 分区上的文件被删除时,其文件名不会被覆盖。只有 8.3 文件名的第一个字节被设置为E5,将文件标记为已删除。这不会影响扩展名,因此 TXT 文件仍然很容易识别。

    您可以使用任何允许您指定扩展名的文件恢复工具(例如Recuva),恢复所有 TXT 文件,然后在所有恢复的文件中搜索日记

    由于文本文件(通常)很小,因此恢复文本文件不会花费太多时间(可能比查找它们要少)。对于 150 GB 的分区,这应该相当快。

  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
    '
    
    Run Code Online (Sandbox Code Playgroud)

    怎么运行的:

    • 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来恢复以前的集群。

    要恢复三个集群(一个在包含diary的集群之前,一个在包含 diary 的集群之后),请进行以下更改:

    ((CLUSTER = OFFSET / 4096 - 1))
    
    dd ... count=3
    
    Run Code Online (Sandbox Code Playgroud)