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

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

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

据我所知,我无法使用 Scalpel 之类的文件雕刻工具,因为它们依赖于根据页眉和页脚来识别文件,但 txt 文件却没有。

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

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

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

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

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

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

答案1

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

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

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

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

  2. 类似项目相簿根据内容识别文件并尝试恢复。虽然文本文件确实没有任何标题,但 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在名为的文件中簇X.txt

    就其本质而言,这仅适用于适合一个群集的文件。您可以增加数数恢复多个集群并减少恢复先前的集群。

    要恢复三个群集(一个在包含日记),做如下修改:

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

答案2

老问题了,但有一天可能会对某人有用......

使用 WinHex,您可以对整个分区运行多个关键字或表达式的“同时搜索”,然后它会显示命中列表,并且如果文件系统被正确分析,它会指示每个找到的字符串属于哪个文件,即使该文件已被删除(虽然它在 FAT32 中并不总是可靠的,但在 NTFS 分区中效果更好)。

相关内容