使用winhex对已删除文件进行恢复

这周第一次软件安全实验课题为“磁盘格式与数据恢复”,对于磁盘格式比较复杂,内容概念都比较多,且自己理解还不算透彻,等以后再试着归纳。这里就先从应用层角度通过对一个已删除文件的恢复实验来进行说明。
这里暂时只考虑文件系统为FAT32和NTFS的格式,下面也将分别对这两种文件系统的文件恢复进行演示。


FAT32

FAT32逻辑磁盘基本信息描述

用winhex打开一个FAT32分区格式的逻辑盘F盘,查看该逻辑盘的根目录区。
逻辑盘BPB
其中0200(蓝框)表示一个扇区512个字节,08(红框)表示每簇8个扇区,即每簇4kb。(查阅资料可得,FAT32分区当分区大小在260MB-8GB时,簇大小为4KB,符合事实)这里由F盘大小5GB及在FAT表中每簇占4个字节的记录可计算得每个FAT(FAT2为FAT1的备份)大小为5MB,与实际相同。
在F盘根目录下创建一个大概60kb的文本文档。
创建文件
在winhex找到该文件位置,查看目录项的信息。
文件目录项
由红框内目录项信息可分别知道首簇号高四位和第四位进而求得首簇号为10号,以及文件大小。经计算可得文件大小为58.9kb近似为文件大小。又因为每簇4kb,故共需15簇。
fat1(正常)
从第10号开始,形成一个簇链,直到FFFFFF0F结束。

FAT32数据恢复过程

将刚才的test.txt文件永久删除。
删除文件
找到文件目录项,修改对应第一位信息,并由目录项簇号信息及文件大小计算出首簇号为10,簇数为15。
修改第一位
分别将FAT1和FAT2的信息进行修改,从10号开始填补簇链到15个簇被填满,其中最后一个以FFFFFF0F结尾。
fat1(恢复)
保存后发现文件已恢复,内容完整。
恢复成功

至此,FAT32文件恢复已完成。

NTFS

NTFS数据恢复过程

同样,先在NTFS格式的E盘创建一个文本文档,再使用shift+delete进行删除。
创建文件.png
打开$MFT元文件。

查找文件名test的位置(MFT文件名是unicode形式),找到对应的MFT。
查找.png

文件MFT.png
16H为00H说明该文件被删除,系统根据这个标志来决定建立新文件时是否覆盖这个MFT而创建自己的MFT。
再向下找到80H处,往后八个字节为01,则找到相对80H处30H的EE0D00即0DEE为文件大小,经计算为3.48kb基本符合。再向后偏移10H,31表示往后一个字节01H为簇数1,再后三个字节638002即28063H为首簇号,换算成十进制为163939。
文件属性.png
选中$MFT元文件,根据刚才得到的簇号转到文件数据存储扇区。
转到扇区1.png

转到扇区2.png
将起始位置设为起始点,根据文件大小0DEE算出数据结尾处转到当前位置偏移,再设为终止点,即可选中所有数据。
选中数据区域.png

转到终止点.png
选中数据选择复制导入到新文件,我们选择恢复到E盘(其实最好不应选择恢复到原文件盘,但因无其他数据,经试验此次无影响),即可完成文件恢复。
生成文件.png
使用记事本打开发现数据已恢复无误。
恢复成功.png

至此,NTFS文件删除后恢复已完成。

以上便是两种文件系统的数据恢复方法,细节之处及磁盘格式相关内容之后再整理。
参考资料:
(NTFS部分)
如何使用WinHex恢复删除的文件(1)
如何使用WinHex恢复删除的文件(2)

文章作者: Zepeng Wang
文章链接: http://yoursite.com/2019/03/17/使用winhex对已删除文件进行恢复/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 王小鹏's Blog