2

我想编写一个程序,可以从硬盘驱动器(FAT32/NTFS 分区 Windows)中恢复已删除的文件。我不知道从哪里开始。这应该是什么出发点?我应该读什么来追求这个?需要帮助。我应该学习哪些系统级结构?

4

3 回答 3

4

这完全取决于文件系统布局、“文件”在磁盘上的实际外观以及删除文件后剩下的内容。因此,您几乎只需要了解文件系统规范(对于您想要支持的每个文件系统),以及如何获得对 HD 数据的直接块级访问。可能可以重用现有文件系统驱动程序中的一些代码,但需要对其进行修改以处理从文件系统的角度来看已经消失的结构。

于 2010-09-28T13:18:24.663 回答
2

你应该先知道在FAT32/NTFS中文件删除是如何完成的,以及其他取消删除软件是如何工作的。

Undelete 软件了解用于在磁盘上存储文件的系统(文件系统)的内部结构,并使用这些知识来定位已删除文件所占用的磁盘空间。由于另一个文件可能已经使用了部分或全部磁盘空间,因此无法保证可以恢复已删除的文件,或者即使可以恢复,也不能保证它不会遭受某些损坏。但是由于空间不会立即重新使用,因此您很有可能会 100% 完整地恢复已删除的文件。使用已删除文件恢复软件的人通常会惊讶地发现它可以找到几个月甚至几年前被删除的文件。最好的取消删除程序可以告诉您完整恢复文件的可能性,甚至提供文件查看器,以便您在恢复之前检查内容。

这是一个很好的阅读(但不是那么技术性):http ://www.tech-pro.net/how-to-recover-deleted-files.html

于 2010-09-28T13:15:21.720 回答
0

这并不像你想象的那么难。您需要了解文件是如何存储在 fat32 和 NTFS 中的。我建议您使用用于数字取证的应用程序 winhex 来检查您的地址计算是否正确。

即NTFS 使用主文件记录将文件的数据存储在集群中。取消链接删除 c 中的文件,但如果您查看源代码,它所做的只是从表中删除条目并更新记录。使用winhex之类的应用程序读取主文件记录的信息。这里有一些有用的信息。

主引导记录 - 扇区 0 Hex 0x55AA 是 MBR 的结尾。接下来将是 mft 文件名是 mft header。有一个标志来表示文件夹或文件(不确定在哪里)。文件定位标志告诉文件是否被标记为已删除。如果要恢复已删除的文件,则需要更改此标志。如果要访问主文件表中的数据,则需要簇大小和簇数以及数据开始的簇数来计算起始地址。

不确定FAT32,但只是使用相同的方法。有一个有用的 21 YouTube 视频解释了如何使用 winhex 访问 NTFS 上已删除的文件数据。不确定视频,但只需输入 winhex 数字取证恢复已删除的文件。看完这个视频就会清楚很多。祝你好运

刚刚观看了有关如何使用 winhex 恢复在 NTFS 中删除的文件的 21 分钟 YouTube 视频。不要忘记驻留标志,它表示文件是否驻留。这让您了解文件如何存储在集群中或仅存储在 mft 数据部分(如果很小)中。如果您想访问已删除的数据,这可能是必需的。该视频非常适合开始,因为它包含所有偏移字节位置,以访问与文件记录开头相关的大部分所需信息。它甚至向您展示了如何为集群的开始进行地址计算。您将需要使用指针以二进制格式访问表,并向指针添加偏移量以访问所需信息。唯一的方法是遍历整个表并对文件名字节进行二进制比较。

于 2017-01-31T23:03:27.150 回答