基于NTFS大目录的文件创建方法

摘 要:

在已有文献中,由于不依赖Windows应用程序编程接口(API)调用的在新技术文件系统(NTFS)下的文件创建都是在小目录下实现的,因此将对在大目录下创建文件的方法进行研究。运用B+树遍历,找到索引缓冲区,通过判断所找的索引缓冲区是否存在索引节点,分别将创建好的索引项插入到指定的索引缓冲区位置,将插入索引项的索引缓冲区写入磁盘,完成在大目录下对文件的创建。通过实验,实现了在大目录下的文件创建,证明了方法在不依赖于Windows API而实现文件创建的正确性。

关键词:新技术文件系统;大目录;B+树;索引缓冲区;索引节点

中图分类号: TP309.2;TP312

文献标志码:A

Method of creating file based on big directory of NTFS

Abstract:

In the available literatures, creating new files with New Technology File System (NTFS) that does not depend on calling Windows Application Program Interface (API) takes place in small directory. Therefore, a new technological realization of creating files in big directories was proposed in this paper. Firstly, it located the index buffer by traversaling the B+tree. Secondly, by judging whether the index buffer had an index node, it would put the created index entry into the specified location of index buffer respectively. Next, the index buffer inserted by the index was written to disk. Finally, it created new files in the big directories successfully. The experiments prove that the files can be created correctly in a large directory using the new creating technology.

Key words:

New Technology File System (NTFS); big directory; B+tree; index buffer; index node

0 引言

新技术文件系统(New Technology File System, NTFS)是微软公司开发的具有较好安全性和容错性的文件系统,其目录结构的研究[1-2]在计算机取证[3]、数据恢复[4]和数据安全等领域具有广泛的应用。基于商业方面考虑,微软并未公开NTFS技术细节。

NTFS运用B+树文件管理方法来定位文件在磁盘上的位置[5],而由于B+树索引结构的定义及变化规律较为复杂,使得NTFS目录结构的分析相对困难。Carrier[6]、Krten[7]、Russon[8]和戴士剑等[9]对NTFS文件系统目录结构进行了详细的分析,并根据B+树定义,对NTFS目录的文件索引结构以及目录中索引项的添加和删除操作进行了理论分析,但并未系统地总结出NTFS目录和磁盘上的具体实现机制和在相关文件操作下目录结构的变化规律。刘凯[10-11]和卢琦等[12]分析了NTFS大目录产生的原因以及各种存储形式的目录结构,通过实验动态跟踪在大目录下创建和删除文件对大目录结构的影响,动态分析了各种文件操作下的目录在磁盘上的结构的变化规律,但只是局限于应用手工实验的方式在简单情况下实现对文件的创建过程,而未能解决在大多数典型实际情况下创建文件的问题。

因此,本文在前人分析NTFS文件目录在磁盘上的存储结构的基础[13-14]上,研究不依赖于Windows 应用程序编程接口(Application Program Interface, API)调用来实现在大目录下的文件创建方法,完善NTFS文件系统对目录和文件的操作和管理,使得非Windows用户亦可以在不依赖于Windows API甚至在无操作系统环境的前提下操作NTFS文件系统。

1 NTFS文件系统结构分析

在NTFS文件系统中,以簇为基本单位对磁盘空间和文件存储进行管理,而簇又分为逻辑簇号(Logical Cluster Number, LCN)和虚拟簇号(Virtual Cluster Number, VCN)。假设定义逻辑簇号为LCN,每簇扇区数为SPC,卷的隐含扇区数为HS,簇的绝对扇区号为AS,则逻辑簇号与磁盘的扇区号的对应关系为:LCN*SPC+HS=AS。

1.1 主文件表的结构

主文件表(Master File Table, MFT)以文件记录来实现对文件的管理,每个文件记录都对应着不同的文件,大小固定为1KB。文件记录由两部分构成,一部分是文件记录头,另一部分是属性列表。

表1是MFT文件的文件记录头,0x32偏移后面的是文件记录的属性列表。

1.2 索引缓冲区结构

索引缓冲区是NTFS的B+树目录管理中重要的结构,每个索引缓冲区在NTFS中一般是4KB的大小,其位置和大小由目录的文件记录中A0H属性的数据流(Run List)[7-8]定义。

2 大目录下创建文件的方法实验

首先,通过B+树遍历,找到指定大目录的MFT文件记录号。通过B+树遍历大目录索引项时,有三种情况:

1)找到索引项。通过索引项直接找到MFT文件记录号。

2)所找的索引项位于当前索引项的后面。继续往后找,直到找到索引项,再由索引项找到MFT文件记录号。

3)所找的索引项在当前索引项的子节点中。由子节点进入索引缓冲区找到索引项,最后找到MFT文件记录号。

其次,由大目录的MFT文件记录号找到索引缓冲区。记录下MFT记录号90H属性的VCN和MFT记录号A0H属性的Run list,再由VCN和Run list定位到索引缓冲区。

最后,因为索引缓冲区包括多个索引项,每个索引项指向一个目录或者文件,所以通过比较每个索引项的文件名,找到第一个文件名比目标文件名大的索引项。此索引项的开始位置即是创建目标文件索引项的插入点位置。

根据上述中所找到的索引缓冲区是否存在索引节点,即索引缓冲区的24H偏移处的值是否为0:如果为0,说明没有索引节点;如果为1,说明有索引节点。所以可以将创建文件的过程分为无索引节点情形下创建文件和有索引节点情形下创建文件两种情形。图1是大目录下创建文件的一般流程。

2.1 无索引节点情形下创建文件过程

当大目录的索引缓冲区的24H偏移处为0时,说明索引缓冲区没有索引节点。无索引节点情形下创建文件的过程如下:

首 先,通过B+树遍历,找到指定大目录的MFT文件记录号。以C:\WINDOWS\System目录为例,通过B+树遍历,找到System目录的MFT文件记录号,如图2所示。

其次,由大目录的MFT文件记录号找到索引缓冲区。在System目录的MFT中,A0H属性的Run List为21 01 17 42,通过虚拟簇号与扇区号的转换关系,得到System目录的索引缓冲区,如图3所示。

最后,通过比较每个索引项的文件名,找到第一个文件名比目标文件名大的索引项。

2.2 有索引节点情形下创建文件过程

当大目录的索引缓冲区的24H偏移处的值为1时,说明此索引缓冲区还存在索引节点。有索引节点情形下文件的创建过程为:前面的步骤与无索引节点情形下创建文件的过程是一样的。以C:\WINDOWS\Media目录为例,找到Media目录的MFT文件记录号后,记录90H属性的VCN以及A0H属性的Run List,如图4所示。

通过A0H属性的Run List得到的虚拟簇号再加上90H属性的VCN 06,得到的簇号再转换为扇区号,即为第一个索引缓冲区的扇区号。如图5所示。

而在找到大目录的索引缓冲区之后,通过B+树遍历索引项文件名,找到第一个文件名比目标文件名大的索引项,记录该索引项的VCN,而VCN是该索引项的最后8个字节。由VCN可以找到下一层索引缓冲区。继续循环上述的过程,直到所找的索引缓冲区无索引节点。后面的文件创建过程和无索引节点情形下创建文件的过程是一样的。

当索引缓冲区中不存在索引节点时,通过比较索引项的文件名,可以直接找到插入索引项的插入点。而当索引缓冲区中存在索引节点时,还需再找下一层索引缓冲区,直到所找的索引缓冲区无索引节点,然后再找到索引项的插入点。

3 实验结果分析

本实验通过对NTFS文件系统的目录与文件的结构及管理原理的了解,使用汇编代码实现,并借助硬件仿真器,摆脱了对Windows API的依赖而实现了在大目录下创建文件的过程。汇编代码程序的运行时间点位于计算机启动完成后、操作系统引导前。

3.1 实验的环境

系统:Windows 7 Ultimate with Service Pack 1;

文件系统:NTFS;

磁盘分析工具:WinHex 16.7;

实验文件:Adobe Reader.exe。

其中,Adobe Reader.exe是用于打开和使用在Adobe Acrobat中创建Adobe PDF的工具。

3.2 实验过程及结果

3.2.1 索引缓冲区没有索引节点的情形

在图6中,30H属性存储的是文件或目录名,其文件或目录名为security。A0H属性是索引分配属性,其48H偏移处为Run List数据流,其数值为41 01 08 60 87 00。其中,41是压缩字节,高4位为数据流的起始逻辑簇号所占的字节数,低4位表示数据流所占用的簇数的字节数。01表示的是数据流只占用一个簇的大小,08 60 87 00表示的是起始簇号的相对簇数。由Run List的数值可以得到security所对应的索引缓冲区,如图7所示。图7为还没有插入目标文件索引项的索引缓冲区,可以看出在security目录下,索引缓冲区的第一个索引项是Database。

图8的矩形框中的数据为创建文件所插入的索引项,而且该索引项变成了索引缓冲区的第一个索引项,即所插入的位置位于Database目录或文件的索引项的前面。可以看出,索引项的插入是按文件或目录名字的字母的大小顺序排序的。其中索引项的前6个字节(01 9F 00 00 00 00)就是Adobe Reader.exe文件所在的MFT文件记录号。得到Adobe Reader.exe的MFT,如图9所示。

在图9 中,30H属性存储的文件名是Adobe Reader.exe,说明在没有索引节点的大目录下创建文件成功。

3.2.2 索引缓冲区存在所索引节点的情形

在图11中,索引缓冲区的24H偏移处的值为0,说明没有索引节点。大的矩形框部分是Adobe Reader.exe的索引项,表明插入索引项成功。通过索引项,找到Adobe Reader.exe的MFT记录号,如图12所示。

在MFT号的30H属性中存储的文件名是Adobe Reader.exe,说明在指定目录下创建了目标文件。所以,在索引缓冲区存在索引节点的大目录下创建文件成功。

通过不断的代码调试与测试,实现了大目录下文件的创建。本实验的截图是在代码调试过程中存储和保留的,该实验的结果已通过实验上机验证。

4 结语

本文论述并验证了NTFS文件系统下在大目录中创建文件的方法。通过在大目录的索引缓冲区中的指定位置插入索引项,并将该索引缓冲区写回磁盘,实现了用汇编代码完成在大目录下对文件的创建。在下一步工作中,将论述和研究在索引缓冲区中插入索引项后使得索引项的总大小超出了索引缓冲区大小的情况。

参考文献:

[1] WANG L, JU J. The analysis of NTFS file system structure[J]. Computer Engineering and Design,2007,28(22):5457-5460.(王兰英,居锦武.NTFS文件系统结构分析[J].计算机工程与设计,2007,28(22):5457-5460.)

[2] LIANG J Q, ZHANG Y. The main data structure of NTFS file system[J]. Computer Engineering and Applications, 2003,39(8):113-119.(梁金千,张跃.NTFS文件系统的主要数据结构[J].计算机工程与应用,2003,39(8):113-119.)

[3] HUANG B. The trace analysis of file operations on NTFS system storage medium[J]. Computer Engineering, 2007,33(23):281-283.(黄步根.NTFS系统存储介质上文件操作痕迹分析[J].计算机工程,2007,33(23):281-283.)

[4] MA L. Data reproduced: File system principle solution with best practice of data recovery.[M].Beijing: Tsinghua University Press,2009.(马林.数据重现:文件系统原理精解与数据恢复最佳实践[M].北京:清华大学出版社,2009.)

[5] LIU W. Deep reveal data recovery[M].Beijing: Electronic Industry Press,2010.(刘伟.数据恢复深度揭秘[M].北京:电子工业出版社,2010.)

[6] CARRIER B.File system forensic analysis[M]. Upper Saddle River: Addison-Wesley Professional, 2009.

[7] KRTEN R. The QNX Cookbook: Recipes for programmers[M]. Ottawa: Parse Software Devices,2008.

[8] RUSSON R. NTFS Documentation[EB/OL]. [2013-03-05]. http://inform.pucp.edu.pe/~inf232/Ntfs/ntfs_doc_v0.5/index.html.

[9] DAI S, TU Y. Data recovery technology[M]. Beijing: Electronic Industry Press,2005.(戴士剑,涂彦晖.数据恢复技术[M].北京:电子工业出版社,2005.)

[10] WU W, LIU K,JIANG D, et al.The dynamic analysis of NTFS B+tree directory structure[J]. Computer Engineering and Design, 2013,34(4):84-87.(吴伟民,刘凯,将达强,等.NTFS B+树大目录结构动态解析[J].计算机工程与设计,2013,34(4):84-87.)

[11] LIU K.The research and design based on NTFS registry forensics tools[D].Guangzhou: Guangdong University of Technology,2013.(刘凯.基于NTFS注册表取证工具研究与设计[D].广州:广东工业大学,2013.)

[12] WU W,LU Q,WANG Z, et al.The dynamic analysis of indexing B+tree structure in NTFS directory[J]. Computer Engineering and Design, 2010,31(22):185-188.(吴伟民,卢琦,王振华,等.NTFS目录下索引B+树结构动态解析[J].计算机工程与设计,2010,31(22):185-188.)

[13] NTFS Research Group. Disk scan for deleted entries[EB/OL].[2013-06-20]. http://.cn/qkpdf/jisy/jisy201402/jisy20140225-2.pdf" style="color:red" target="_blank">原版全文

推荐访问:创建 文件 目录 方法 NTFS