C中的安全文件删除
我需要安全地删除C中的文件,这是我的工作:
fopen
获取文件句柄lseek
/ ftell
fflush
/ fclose
文件句柄这是怎么做到的?因为我在橡皮擦中读到了“Gutmann 25 pass”的名字,所以我猜25是文件被覆盖的次数,'Gutmann'是随机化算法?
答案 0 :(得分:8)
如果没有操作系统的合作,你就无法安全地完成这项工作 - 而且往往不是这样。
当您打开文件并写入文件时,无法保证操作系统会将新文件放在与旧文件相同的旋转生锈位上。即使它确实如此,您也不知道新写入是否会像以前一样使用相同的簇链。
即使这样,你也不确定驱动器是否由于某些故障而没有映射出磁盘块 - 将你的世界统治计划留在标记为坏但仍然可读的块上。
ps - 不再需要25x覆盖,在头部跟踪较差的旧低密度MFM驱动器上需要它。在现代GMR驱动器上覆盖一次就足够了。
答案 1 :(得分:1)
是的,实际上它正在覆盖 n 文件上的不同模式
这是通过写一系列35个模式来实现的 要擦除的区域。
模式的选择假设用户不知道 驱动器使用的编码机制,包括模式 专为三种不同类型的驱动器而设计。一个用户 知道驱动器使用哪种类型的编码只能选择那些 用于驱动的模式。具有不同编码的驱动器 机制需要不同的模式。
更多信息是here。
答案 2 :(得分:1)
@Martin Beckett是对的;除非你知道硬件在驱动器上一直在做什么,否则就会出现“安全删除”这样的事情。 (即使在那时,我也不会对资源充足的攻击者在获得物理媒体的情况下可以恢复的事情下注。)
但假设操作系统和磁盘将重复使用相同的块,则您的方案不能用于更基本的原因:fflush
通常不会向磁盘写入任何内容。
在大多数多任务操作系统(包括Windows,Linux和OS X)上,fflush
仅强制来自用户空间缓冲区的数据进入内核。然后内核将自己进行缓冲,只有在感觉就像写入磁盘一样。
例如,在Linux上,您需要致电fsync(fileno(handle))
。 (或者首先使用文件描述符。)OS X类似。 Windows有FlushFileBuffers
。
底线:您描述的循环很可能只是覆盖内核缓冲区10-15次而不是磁盘上的文件。在C或C ++中没有可移植的方法来强制数据到磁盘。为此,您需要使用依赖于平台的界面。
答案 3 :(得分:0)
Gutmann方法适用于较旧的磁盘技术编码方案,并且Gutmann方法的35遍擦拭方案不再需要,即使Gutmann承认也是如此。参见:Gutmann方法:https://en.wikipedia.org/wiki/Gutmann_method在批评部分,Gutmann讨论了这些差异。
通常最多可以通过一些随机传递来安全地删除文件(可能还有一个额外的归零传递)。
来自thc.org的安全删除软件包包含用于安全擦除硬盘驱动器上的磁盘和inode空间的sfill命令。
答案 4 :(得分:0)
MFT(主文件表)类似于 FAT(文件分配表), MFT 保留记录:磁盘上的文件偏移,文件名,日期/时间,ID,文件大小,甚至文件数据,如果文件数据适合记录的空白空间,大约512字节,1记录大小是1KB。 / p>
注意:新硬盘数据设置为0x00。(只是让你知道)
假设您要覆盖file1.txt OS MFT在记录中找到此文件偏移量。 你开始用二进制模式二进制(00000000)覆盖file1.txt。
您将覆盖磁盘上的文件数据100%这就是 MFT 在磁盘上有文件偏移的原因。 在您重命名并删除之后。
注意:MFT会将文件标记为已删除,但您仍可以获取有关此文件的一些数据,即日期/时间:创建,修改,访问。文件偏移,属性,标志。
1- create folder in c:\ and move file and in same time rename in to folder( use rename function ) rename file to 0000000000 or any another without extention
2- overwrite file with 0x00 and check if file was overwrited
3- change date/time
4- make without attributes
5- leave file size untouched OS faster reuse empty space.
6- delete file
7- repeat all files (1-6)
8- delete folder
or
(1, 2, 6, 7, 8)
9- find files in MFT remove records of these files.