kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 设计应用> 基于Windows的磁盘数据清除技术
基于Windows的磁盘数据清除技术
电子技术
何 娜,赵亦工,江 华
摘要:在研究Windows操作系统中文件管理系统NTFS的基础上,提出一种彻底清除磁盘数据的方法。NTFS对文件的访问操作,主要通过与文件相关的MFT表进行,这与FAT系统存在较大差异。通过分析MFT表管理磁盘数据的方法,建立一种树形目录结构,并以该树形目录作为管理磁盘中所有MFT表的工具。采用遍历之后立即释放树结点的方法,解决了内存过度占用的问题。该技术可以在磁盘扇区直接清除数据,还可对数据进行更加直接的管理,减少了对操作系统的
Abstract:
Key words :

安全的磁盘清理软件可以很好地为数字化信息系统服务。目前大部分磁盘清理软件未能彻底清除在磁盘中的数据,对于磁盘上已经删除的文件信息在未重新写入新的文件时,Windows只是标记,并没有进行数据清理。这就使得可以通过数据恢复的手段获取保密信息,大多数清理软件只是采用重新填写无效文件的方式清除磁盘上的数据。而这样会大大缩短磁盘的使用寿命。文中研究了Windows的文件系统NTFS清除磁盘数据的原理,采用直接访问NTFS的主文件列表找到文件具体存储的位置,并解码二进制文件,从而彻底清除文件,减少了对操作系统的依赖,避免了大量盲目填写无效文件的操作,并保护了磁盘使用寿命。

1 NTFS系统结构原理
1.1 基本原理
NTFS是Windows NT引入的新型文件系统,由于NTFS的结构复杂,内容繁多,这里仅对NTFS卷上的底层结构做分析。在NTFS格式中,文件以簇的形式分配。最小的单位为扇区,N个扇区为一簇。其中,N的值由引导扇区规定。NTFS格式磁盘的数据分为4大部分:引导区、主文件列表、系统文件和文件数据区。
引导区(Partition boot sector):所有磁盘格式都有这个区,占用了磁盘第一个扇区。
主文件列表(Master File List):记录了卷上所有文件,每个文件对应了表上的一条记录。
系统文件(System file):NTFS一共有16个系统文件,8个隐藏文件。
文件数据区(File Area):存放文件数据。
NTFS跟FAT16,FA332一样都在引导扇区中有一些BPB参数,但与FAT32,FAT16并不完全相同。文献对NTFS引导扇区一些重要数据的含义进行了详细介绍。
1.2 主控文件表与元数据文件
MFT是一个对应的数据库,由一系列的文件记录组成,卷中每一个文件都有一个文件记录。主文件表本身也有自己的文件记录。实际上,MFT自身也是一个文件,因此,主文件列表的第一个记录就是它自身。MFT的每个记录都有一个编号,这里称为ID号,这个ID从0开始。MFT自身是NTFS系统的第一个文件,所以文件$MFT的ID号为0。
MFT和其他23个文件一起,用户每添加一个文件ID号加1。MFT头的长度跟偏移处的数据含义不变,但属性列表是可变的,其不同的属性列表,有着不同的含义,最后能看到MFT表以FFFFFFFFH结束。
MFT头的标准信息见文献,它对MFT表的结构进行了全面的分析。MFT前16个文件属于系统文件,也称为元文件,用于存放系统中的元数据,元数据文件及其作用见文献。
1.3 文件的MFT记录及其包含的属性
一个文件通常占用一条文件记录。然而当一个文件具有多项属性值的时候,就可以占用一个以上的文件记录。这样的情况下,第一个文件记录就是基本文件记录。其中存储了该文件需要其他文件记录的位置。小文件和小的文件夹将全部存放在MFT记录中。
文件记录包含索引信息,小的文件夹记录完全存储在MFT结构里。然而大文件与文件夹被组织成为B+树结构,一个指针指向一个外部簇,该簇用来存放那些MFT内存储不了的文件夹属性。
在MFT记录中的每个属性都有一个属性头,这个属性头包含一些该属性的重要信息,如属性类型、大小、名字以及是否为常驻属性等。

2 具体实现方法
具体实现分为两个模块:(1)索引磁盘中所有文件的数据段在磁盘中存放的起始簇号。(2)动态建立一个与磁盘文件存放相对的文件树,对子树进行遍历查找每个文件数据段的簇号,从而可以从扇区直接清除数据信息。最后删除所建立的子树,释放占据的内存空间。
2.1 索引磁盘中未删除文件的簇号
在NTFS中,文件目录仅是文件名的一个索引,NTFS使用了一种特殊的方式把文件名组织起来,以便快速访问。当创建一个目录时,NTFS必须对目录中的文件名属性进行索引。

一个目录的MFT将其目录中的文件名与子目录名进行排序,并保存在索引根属性中。所以可以通过访问根目录的索引分配找到磁盘上面的一级目录,并记录下其MFT参考号,然后在通过该参考号获取MFT文件,进而再找到其索引分配,就可以将一级目录下的子目录全部及找到,直到不再有子目录为止。可建立出整个磁盘的目录树,每项MFT文件中都记录了该文件是被删除或正在被使用的目录。通过解析以上分析的属性就能获取这些信息,该算法流程如图1所示。

c.JPG


图中每一步操作都是根据MFT表的属性进行编码。
第一步从分区信息表即中可以获得这些有用的信息。读取特定扇区的信息可以调用CreateFile与ReadFile来实现。读取某个MFT元文件的具体方法是:通过BPB参数获取$MFT的位置,然后根据源文件的MFT记录号,移动句柄,就可以顺利读取MFT元文件。由于每个MFT文件的大小是1 kB,所以句柄的偏移dwStartSector=MFT文件记录号×2+$MFT所在的扇区号。即可访问任何一个磁盘的MFT元数据文件信息。
第二步根据根目录的MFT文件信息,解析索引A0H属性从而找出索引信息,这涉及到解码二进制文件。
第三步根据索引中的信息找出根目录的子目录的MFT编号,再根据这个编号打开MFT文件内容,找出30H属性与MFT属性头,解析文件名,以及标记文件是否为目录,是否被删除的信息。
第四步如果该文件是目录,则继续查找它下面的子目录,否则转第五步。
第五步 如果该文件已删除,则返回第一步;否则,打开它对应的MFT文件,然后解析80H属性,找到文件数据段开始的簇号,并记录下来。
2.2 建立磁盘对应的文件树
建立一个N叉树来表示每一个磁盘中的文件存放,只是它的数据信息就是上面获取的文件数据段开始的簇的编号。遍历文件树的过程,即是获取簇号以及对相应簇的信息进行清除的过程。每个磁盘中MFT表的数量巨大,所以在遍历完根目录下子目录的所有文件时,要删除该子树,便于释放内存,从而减少算法的空间开销。而且N叉树的数据结构本身对遍历效率也有很大提升,笔者采用深度优先递归搜索,并对此进行优化,取得了良好效果。

测试平台为windows7,测试工具为winhex。清除之前可以看到新建文本文档大小是6.9 kB,所在簇的信息如图2所示。

a.JPG

b.JPG


执行程序后结果如图3所示。可以看到文件的大小归0,并且80H的信息发生变化,原本存储的索引内容全部被清除为0,即文件的数据信息全部被清除。

3 结束语
NTFS文件系统十分复杂,这里主要针对NTFS系统管理磁盘的MFT文件进行分析,解析它的一系列属性,得到每个文件的数据段信息的开始簇号。通过对磁盘建立文件树,标记所有未删除文件的数据段开始的簇号,从而可以直接清除剩余磁盘簇的信息,达到绕过操作系统直接对扇区进行清除的目的,避免了数据恢复的可能。

此内容为AET网站原创,未经授权禁止转载。
Baidu
map