具体实施方式
1、数据恢复的原理。
在FAT32文件***中,文件的起始簇号共由十六位字节构成,其中的低八位数据存储在相对偏移1AH-1BH处,而高八位则存储在相对偏移1AH-1BH处。可以通过计算,得到该文件原始数据的第一个簇号。以图2-1、图2-2为例,相对偏移1AH-1BH处的数据是“97 02”,相对偏移1AH-1BH处的数据是“03 00”,根据数据字节是按从低到高顺序存储的原则,那么该文件的起始簇号则是“00 03 02 97”,化成十进制便是197271。通过对簇号197291处的数据与图2-1的对比,可证明该簇的数据便是该文件的首簇内容,见图2-3。
数据恢复方法一般是在FDT处查找到文件对应的数据起始簇号,然后根据簇号找到DATA区里的文件数据,读取数据并新建一个同类型的文件,将数据存入其中,便可成功恢复本已删除的文件。
2、数据恢复存在的问题及解决办法。
上述数据恢复原理并不能恢复出所有已删除的文件,除了数据覆盖、数据存储不连续等原因外,还有很重要的一个原因便是删除文件后,该文件还有其他改变的文件。在文件删除原理部分,文件删除后,其对应的FDT里的数据被修改。由于还有其他部分修改,使得普通的数据恢复软件只能恢复首字节被改为E5的文件。对于其他部分有改变的文件,恢复出来的文件数据便是乱码。
以恢复测试文件.txt为例,对它的起始扇区号进行换算,它删除前后的起始扇区分别为1582432和9568。通过BPB参数表,可以获得该存储器每个簇拥有8个扇区,有32个保留扇区,2个FAT,每个FAT有2000个扇区,见图3。
由于簇号是从DATA区开始计算,并且从2开始计数,那么删除前起始簇号为:(1582432-20002-32)8+2=197302。
转换成十六进制则为000302B6H。
而删除后的起始簇号为:(9568-20002-32)8+2=694。
转换成十六进制则为000002B6H。可想而知,它们分别对应的数据也不再相同,见图4、图5。
所以,恢复出来的文本文件自然显示的都是乱码。至此问题产生的原因已经找到,那就是,不能只对删除标志进行恢复。
解决的办法自然就要对被删除文件被修改的其他部分进行恢复。
以1T的硬盘为例,按每个簇16个扇区计算,它最多拥有134217728个簇,即8000000H个,高位为800H,即十进制的2048。如果从0开始对起始簇高位进行填补,一个个进行尝试,最多只有2049个可能性。如果将它们一一恢复出来,其中必有一个数据是正确的。但人工对这2049个文件进行筛选,将是十分耗时的。虽然不能让计算机自己进行精确定位,但还是可以让它来帮对数据进行筛选的。Windows操作***的大部分文件格式都有它自己的识别码,例如,PDF文件的前四个数据必定是“25 50 44 46”,即字符串“%PDF”。显而易见,通过获取文件的类型,然后针对该类型的识别码,对数据进行对比排除,那么的恢复范围将大大地缩减。
本发明支持Windows下的FAT32和NTFS两类操文件***,能够对在这两类文件***下的删除文件进行恢复。
参见图11,对于FAT32操文件***,可按如下步骤实现:S2101:打开目标盘,并转到根目录区;S2102:逐条扫描目录项,找到以E5开头的目录项;S2107:偏移0BH为10H或20H,10H表示其为一个文件夹,20H表示其是一个文件;S2103:偏移0BH为0FH,向下继续寻找到该位置数据为10H或20H的目录项;S2108:偏移14~15H与偏移1A~1BH为文件存储的簇号,读取顺序为15H14H1BH1AH,根据该簇号找到文件起始位置,选择为块开始;S2109:目录项偏移1C~1FH为文件大小(B),从找到的起始位置开始向下转移1FH1EH1DH1CH个字节,并选择为块结束;S2106:右键点击选块任意地方,将所选部分复制到指定位置。
参见图10,对于NTFS操文件***,可按如下步骤实现:S1101:打开目标盘,转到MFT文件区;S1102:从30H属性的最后两行查看要恢复文件的文件名;S1106:80H属性偏移08H为01H;S1107:找到80H属性偏移40H的位置,该数据为“XYH”;S1108:读出80H属性偏移(40+Y+1)H~(40+Y+X)H中的数据,记下该数据,此为文件起始簇号;S1109:80H属性偏移(40+Y)H中的数据为文件所占的簇,单位是簇,记下该数据;S1110:根据如下公式:文件起始扇区=(文件起始簇*8);文件结束扇区=(文件起始簇+文件所占的族)*8;转到文件起始扇区,选择块开始,转到文件结束的扇区,选择块结束;S1105:将文件复制到指定位置;S1103:步骤S1102执行完毕,若80H属性偏移08H为00H;S1104:文件内容就在该MFT中,从80H属性中直接读出文件内容;接续执行步骤S1105。
鉴于本发明是基于Windows操作***平台,需要支持FAT32和NTFS两种文件***,所以按照如下步骤实现。
第一步:在对磁盘进行读取之前,要获取磁盘的文件***;第二步:获取BPB参数,根据参数信息获取根目录起始地址等重要信息;第三步:遍历分区扇区数据,并以二叉树结构存储,其中,节点的左孩子指向下一级文件,右孩子则指向同一级文件。FAT32和NTFS的遍历方法有所不同,由于FAT32文件***中文件属性等信息是存储在FDT中,根目录FDT起始扇区号可以通过公式(4.1)得到:起始扇区号 = DBR扇区数(32) + FAT扇区数×2 +(FDT起始簇号 - 2)×每簇扇区数。
注意,MBR的63个扇区属于隐藏扇区,不参与逻辑扇区运算;子目录FDT起始扇区号分布在DATA区内,没有固定的位置。所以建立FAT文件***二叉树时,以根目录为根节点,遇到子目录时,采用递归算法先进行下一级遍历。而NTFS文件***,所有文件的$MFT项都统一存放在$MFT元文件中,建立二叉树时,将文件一一***父目录下,当父目录在二叉树中尚未***时,则搜索父目录的父目录,仍未***,再循环追溯上一级目录,直至在主二叉树中找到上一级目录,并将其***找到的父目录下,否则,***丢失文件目录下。
第四步:将未删除和删除文件的相关数据分别显示在界面的各个分块中;第五步:获取用户选中文件的相关信息,如:文件起始扇区号、文件大小、文件属性等,并进行数据恢复,恢复过程实质就是创建具有相同数据文件的过程。
本发明基于MFC(Microsoft Foundation Classes,微软基础类)单文档结构,软件界面由若干个标签页构成。
通过单击菜单栏中的“打开磁盘”选项,弹出一个对话框,让用户选择需要打开的磁盘。
选择“确定”后,软件会自动遍历磁盘空间,并进入工作界面。每个打开的磁盘分区的所有信息将显示在一个单独的标签页中。每个标签页划分为左上、右上、左下和右下四块,每个块的大小不固定,可以根据用户需求自己调整。其中,左上部分以树的形式显示该分区的所有文件和文件夹;右上部分以列表的形式显示用户选中文件夹的所有下一级文件,以及相关信息,如:文件扩展名、文件大小、创建时间日期、文件属性,起始扇区号等;左下部分则以对话框的形式显示该分区的相关信息,如序列号、文件***、空间大小等;右下部分是以十六进制的形式显示扇区数据。
右击菜单有两个选择,第一个选项,即“恢复/复制…”,可以对正常文件进行复制或对删除文件进行恢复操作。第二个选项,即“转到目录项”,可以将界面右下部分显示选中文件的登记项数据。当然,用户还可以通过使用菜单栏中的“位置”选项,显示其他偏移处的数据,如:FAT文件***中的FAT1和FAT2,以及FDT。
如果选择“位置”中的“偏移量”选项,那么用户可以自定义显示数据的偏移位置。这里有两个地方需要注意,一个是可以通过Radio控件,选择偏移相对的位置,如:开头、当前位置等;另一个就是可以通过Edit控件后的Button控件,选择偏移值的单位,如十六进制或十进制的字节、十六进制或十进制的扇区等。
此外,本发明还可以通过菜单栏的“打开磁盘”下的“BPB模版”选项,来显示分区的BPB参数。
数据恢复软件比对实验。
实验地点:中国刑事警察学院电子取证实验室。
实验环境:Windows 2000。
实验器材:U盘一个,容量1G。
测试对象:WinHex 15.1、FinalData 2.0、Encase 4.20、取证大师2008 v1.10.2742,以及本发明数据恢复方法。
实验前准备:首先在U盘根目录下的名为“测试文件”的文件夹下存储PDF、PPT、DOC、TXT、RAR和BMP等六种类型的文件。
参见图6-1、图6-2、图6-3、图6-4、图6-5及图6-6,将上述文件作为待测文件。然后,通过Shift+Del组合键,将上述六个文件在操作***下彻底删除。
删除文件后,再通过各恢复软件分别对他们进行数据恢复,并进行对比。
其中,WinHex、FinalData、Encase企业版三种软件对六个文件的恢复全部失败,都是不同程度的出现数据损坏、乱码等现象,见图7-1~图7-6。
另外,取证大师的恢复效果明显优于前三者,但PDF文件和TXT文件恢复也失败。见图8-1~图8-6。
本发明则成功恢复了所有的六个文件,见图9-1-图9-5。
其中,TXT文件则恢复出来了四个文件,包括三个乱码文件和一个正确文件,文件名后面的数字分别代表各自的起始簇号,见图9-6~图9-8。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。