使用C C ++删除文件恢复程序

时间:2010-09-28 13:08:19

标签: windows file-recovery

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

  

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

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

答案 2 :(得分:0)

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

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

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

不确定FAT32但只是使用相同的方法。有一个有用的21 YouTube视频,解释了如何使用winhex访问NTFS上的已删除文件数据。不确定视频,只需输入winhex数字取证恢复已删除的文件。一旦你观看这个视频,它将变得更加清晰。 祝你好运

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

答案 3 :(得分:-2)

有成千上万的这样的节目,为什么要浪费时间在另一个上? 也许最好学习,分叉或贡献existing opensourced one