Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 使用debug.exe还原已删除的文件_Assembly_Debugging - Fatal编程技术网

Assembly 使用debug.exe还原已删除的文件

Assembly 使用debug.exe还原已删除的文件,assembly,debugging,Assembly,Debugging,几年前,我读了一篇关于Windows命令的教程 文章还介绍了如何使用该工具还原已删除的文件 有谁能给我一个关于这是怎么做到的暗示吗 它可能用于基于FAT的系统,在该系统中删除文件相当于在表中将文件标记为已删除。清除该标记将取消删除文件(当然,同时内容可能已被覆盖) 同样的原理仍然适用于NTFS,但我不知道是否有可能以这种方式更改NTFS结构而不会遇到麻烦。通过调试,您可以直接从硬盘读取和写入。这是一个非常复杂和危险的过程 基本上,您需要做的是找到引导记录,以找到从中恢复文件所需的文件分配表(FA

几年前,我读了一篇关于Windows命令的教程

文章还介绍了如何使用该工具还原已删除的文件


有谁能给我一个关于这是怎么做到的暗示吗

它可能用于基于FAT的系统,在该系统中删除文件相当于在表中将文件标记为已删除。清除该标记将取消删除文件(当然,同时内容可能已被覆盖)


同样的原理仍然适用于NTFS,但我不知道是否有可能以这种方式更改NTFS结构而不会遇到麻烦。

通过调试,您可以直接从硬盘读取和写入。这是一个非常复杂和危险的过程

基本上,您需要做的是找到引导记录,以找到从中恢复文件所需的文件分配表(FAT)。然后,您将在驱动器上找到文件的第一个集群以及文件条目中的文件大小。一旦知道了第一个块和大小,您就希望文件不会被分割或覆盖,只需提取其中的信息即可

还有一个取消删除的应用程序可以自动为您完成这项工作

现在,所有这些都可以通过使用卷路径
\\\.\C:
上的::CreateFile()和直接从卷中使用::ReadFile()的句柄来完成。成功率特别高,如果您确切知道文件头的外观,那么您可以很容易地逐扇区搜索驱动器以查找特定的头,并希望文件不会被分割或覆盖。然后,您可以直接从驱动器中读取信息并将其转储到新文件中。没有必要修改文件系统


如果文件在删除之前被分割,它可能会永远消失,因为您不再有信息来定位文件的所有部分,可能除了第一个集群。

这有点硬核。我从来没有听说过debug能够还原一个被删除的文件。我只是好奇。一个基于模糊记忆的小实验。我不想使用debug.exe:DYes开发一个新的“UnErase”应用程序,这听起来像是我模糊不清的记忆。我在某处更改了一个字节(E5?),文件又出现了。但如果我必须在FAT上重新安装XP,我将放弃我的小实验:)