如果只能使用Windows本身提供的工具,那么我们可以认为清空回收站之后,被删除的文件已经彻底清除了。不过事实并非如此,只要有专用的硬件和软件,即使数据已经被覆盖、驱动器已经重新格式化、引导扇区彻底损坏,或者磁盘驱动器不再运转,我们还是可以恢复几乎所有的文件。
一、磁盘如何保存数据
要理解如何恢复已删除的数据,首先要搞清楚磁盘如何保存数据。硬盘驱动器里面有一组盘片,数据就保存在盘片的磁道(Track)上,磁道在盘片上呈同心圆分布,读/写磁头在盘片的表面移动访问硬盘的各个区域,因此文件可以随机地分布到磁盘的各个位置,同一文件的各个部分不一定要顺序存放。
存放在磁盘上的数据以簇为分配单位,簇的大小因操作系统和逻辑卷大小的不同而不同。如果一个硬盘的簇大小是4 K,那么保存1 K的文件也要占用4 K的磁盘空间。大的文件可能占用多达数千、数万的簇,分散到整个磁盘上,操作系统的文件子系统负责各个部分的组织和管理。
当前,Windows支持的硬盘文件系统共有三种。第一种是FAT,即所谓的文件分配表(File Allocation Table),它是最古老的文件系统,从DOS时代开始就已经有了。Windows 95引入了第二种文件系统,即FAT 32,Windows NT 4.0则引入了第三种文件系统NTFS。这三种文件系统的基本原理都一样,都用一个类似目录的结构来组织文件,目录结构包含一个指向文件首簇的指针,首簇的FAT入口又包含一个指向下一簇地址的指针,依此类推,直至出现文件的结束标记为止。
二、Windows不能真正清除文件
在Windows中,如果我们用常规的办法删除一个文件,文件本身并未被真正清除。例如,如果我们在Windows资源管理器中删除一个文件,Windows会把文件放入回收站,即使我们清空了回收站(或者不启动回收站功能),操作系统也不会真正清除文件的数据。
Windows所谓的删除实际上只是把文件名称的第一个字母改成一个特殊字符,然后把该文件占用的簇标记为空闲状态,但文件包含的数据仍在磁盘上,下次将新的文件保存到磁盘时,这些簇可能被新的文件使用,从而覆盖原来的数据。因此,只要不保存新的文件,被删除文件的数据实际上仍旧完整无缺地保存在磁盘上。
因此,我们可以用工具软件绕过操作系统,直接操作磁盘,恢复被删除的文件。这类工具软件很多,EasyRecovery就是其中的佼佼者。
如果不小心删除了某个重要文件,想要恢复,这时千万不要覆盖它。立即停用计算机,不要再向磁盘保存任何文件,包括不要把恢复工具安装到已删除文件所在的硬盘,因为任何写入磁盘的内容都有可能覆盖已删除文件释放的磁盘簇。如果必须安装恢复工具,可以安装到其他硬盘分区、软盘,或者干脆拆下硬盘到另一台机器上去恢复。
三、覆盖七次才能清除的蛛丝马迹
如果数据已经覆盖,用通常的恢复工具就无能为力了,但这并不意味着我们绝对不能挽救丢失的数据。读取硬盘上被覆盖的数据通常有两种办法。
读/写磁头向磁盘写入数据时,它会将磁化数据位的信号调整到某个适当的强度,但信号不是越强越好,不应超出一定的界限,以免影响相邻的数据位。由于信号强度不足以使存储媒介达到饱和的磁化状态,所以实际记录在媒介上的信号受到以前保存在同一位置的信号的影响,例如,如果原来记录的数据位是0,现在被一个1覆盖,那么实际记录在磁盘媒介上的信号强度肯定不如原来数据位是1的强度。
专用的硬件设备能够精确地检测出信号强度的实际值,将这个值减去当前数据位的标准强度,就得到了被覆盖数据的副本。理论上,这个过程可以向前递推七次,所以如果要彻底清除文件,必须反复覆盖数据七次以上,每次都用随机生成的数据覆盖。
第二种数据恢复技术的依据是,磁头每次读/写数据时,不可能绝对精确地定位在同一个点上,写入新数据的位置不会刚好覆盖在原来的数据上。原有数据总是会留下一些痕迹,利用专用的设备可以分析出原有数据的副本--称为影子数据。当然,如果我们反复执行覆盖操作,原有数据的痕迹也会越来越弱。
● 影子数据:被覆盖的数据总是与新写入的不离左右,就象人的影子总是紧跟着人,因此被覆盖的数据就称为影子数据。英文功力好的读者可以参见这篇专著:http://www.forensics-/art15.html。
通常而言,能够恢复已删除、覆盖的数据应该算是一件好事,当然,某些必须彻底清除数据的场合除外。这方面最为著名的标准是美国国防部订立的磁盘清洗规范,它要求数据必须覆盖三次:第一次用一个8位的字符覆盖,第二次用该字符的补码(0和1全反转的字符)覆盖,最后用一个随机字符覆盖。不过这个清洗方法不适用于包含高度机密信息的媒介,这类媒介必须进行消磁处理,或者销毁其物理载体。当然,对于大多数场合来说,简单的覆盖处理已经足够。
四、被遗忘的角落
删除和覆盖文件还不能清除硬盘上的所有敏感数据,因为数据可能隐藏在某些意料之外的地方,所以文件占用的每一个扇区都必须彻底清除所谓扇区,就是大小为512字节的数据片断,每个簇包含多个扇区。
向磁盘写入文件时,文件的最后一部分通常不会恰好填满最后一个扇区,这时操作系统就会随机地提取一些内存数据来填充空余区域。从内存获取的数据称为RAM Slack(内存渣滓),它可能是计算机启动之后创建、访问、修改的任何数据。另外,最后一个簇中没有用到的扇区就原封不动,即保留原来的数据,称为Drive Slack(磁盘渣滓)。问题在于许多号称安全删除文件的工具不会正确清除内存渣滓和磁盘渣滓,而这些被称为渣滓的地方却可能包含大量的敏感信息。
在NTFS文件系统中,每个文件包含多个流,其中一个流用来保存访问权限之类的信息,另一个流用来保存真正的文件数据。除此之外,NTFS还允许额外的数据流,即ADS(Alternative Data Stream),ADS可以用来保存任何信息,最常见的用途是保存图形文件的缩略图。由于许多安全删除文件的工具不能清除ADS,所以即使存放文件实际数据的流已经清除,但缩略图仍可能泄露机密。微软知识库文章319300()介绍了如何防止系统创建缩略图使用的流,即删除注册键HKEY_LOCAL_MACHINE/System/Currentcontrolset/Control/Contentindex/FilterTrackers。
●ADS:ADS这个缩写词经常用来表示活动目录服务(Active Directory Services),不过本文中ADS是指“可选数字流”,是文件主体数据之外的附属信息存储区域。就象你的公文包,包里面是正式存放物品的主空间,但包的外面还会有一二个附属小口袋便于快速取用物品,这些小口袋就相当于ADS。
ADS已是人们熟知的隐藏数据和病毒之地,经常被计算机犯罪分子利用。但除此之外,硬盘上还有其他可以隐藏数据的区域。
扇区是在低级格式化期间创建的,通常由硬盘制造厂完成。低级格式化工具会标记出损坏的扇区,从而避免磁盘控制器向损坏的区域写入数据。簇包含多个扇区,由高级格式化工具创建,如Windows或DOS的format命令。如果高级格式化期间发现坏扇区,整个簇被标记为坏簇,但是,坏簇里面还有好的扇区,有些人就利用这些扇区来隐藏数据。
在老式磁盘上,数据还可以隐藏在称为扇区缝隙的地方。老式磁盘的每一个磁道都有数量相同的扇区,但外圈的磁道显然要比内圈的磁道长,有些人就利用外圈磁道上扇区之间的缝隙来保存数据。新型磁盘利用一种称为分区记录(Zoned Recording)的技术避免了这种空间浪费,它能够根据磁道的位置调整每个磁道的扇区数量。
要访问磁盘上的这类隐藏区域,必须使用绕过操作系统磁盘访问功能的工具。搜索一下网络,可以看到正规的专业工具都很昂贵,例如EnCase Forensic Edition()要2000多美元;Directory Snoop可能最便宜,也要29美元,但它不支持NTFS。
综上所述,我们可以说恢复数据实际上要比彻底清除数据简单。如果你不小心删除了某个重要的文件(谁都会遇到这类事情),恢复工具就是救命的稻草。反之,如果你想出售二手机或二手磁盘,应当考虑一下是否有必要彻底地清洗一下硬盘。