Windows作为最流行的个人计算机操作系统,成为了我们学习、工作和生活的一部分。我们几乎每天都会经历打开文件管理器,进入具体磁盘,打开具体文件,而Windows采用文件系统管理着所有的文件和磁盘空间,这个文件系统就是NTFS。
NTFS文件系统
文档主要分为两大部分:
1.NTFS文件系统简介
2.文件磁盘位置计算
NTFS文件系统简介
NTFS(New Technology File System)是微软1993年推出的用于Windows系统的文件系统,用于代替原来的FAT文件系统,从而提高性能。NTFS自推出以来经历了多个版本的更新,更新历史如下:
可见2001年发行3.1版本后,NTFS就再没有更新过了。
NTFS数据结构
一个NTFS分区的结构如下图所示:
整个分区主要分为三大区域:
1.VBR(Volume Boot Record):非常重要,存储跟引导相关的数据,大小为16个扇区;
2.文件区域:在NTFS的概念里,一切皆为文件,包括元数据文件、常规文件、目录、一切的一切都是文件;
3.BBS(Backup Boot Sector):分区的第一个扇区是分区引导记录,是能否引导系统的关键,所以NTFS用分区的最后一个扇区备份第一个扇区,用于修复损坏的第一个扇区。
文件
文件可分为三种类型:元数据文件、常规文件和目录。
元数据文件
任何文件系统都会有元数据用于描述文件信息,信息有如名称、大小、修改时间、存放位置等等,注意的是NTFS元数据也用文件表示,总有16个元数据文件,这些文件的名称都是以$开头,属于隐藏文件。
查看这些文件:
MFT(Master File Table)
非常重要的文件,包含了所有文件的元数据,定位文件必须要经过$MFT文件。MFT由一个个文件记录组成,一个文件至少占用一个记录,$MFT文件占用第一个记录。
MFT文件记录(固定大小为1KB)由记录头部和属性组成,记录头部大小为42或48字节,3.1版本之前是42字节,之后是48字节。记录头部数据结构定义如下:
文件记录属性分为常驻属性和非常驻属性,常驻属性代表属性的全部内容在文件记录中,非常驻属性代表属性内容超过了文件记录的大小,需要另外开辟空间存储,例如文件内容比较大。
文件记录头部中标明了第一个属性的偏移量,NTFS支持的属性定义在$AttrDef中,每个属性有唯一标识ID,常见的ID有:
文件内容
文件内容由属性$DATA描述,由于文件记录的大小固定为1KB,记录头占了48字节,所以留给文件存放内容的空间不会超过976字节。如果文件内容比较少,则全部存在文件记录中,否则另外开辟extents存储。开辟的extents以族为单位,NTFS基本分配单位是族,族大小为4KB。
文件磁盘位置计算
借助微软公司提供的工具fsutil可计算出文件的数据分布范围,根据文件的大小,可分为两种情况。
小文件
小文件指的是文件内容可容纳在文件记录中,不用开辟extents存放,也是最不方便计算的情况。
第一步:
获取$MFT文件的磁盘分布范围,方式如下:
指令为:fsutil file queryextents 文件路径
输出结果(结果可能为多行,代表文件存放位置不连续):
VCN:虚拟族编号,相对于文件内部的偏移量,单位为族;
族:该extent大小,单位为族;
LCN:逻辑族编号,extent相对于分区的偏移量,单位为族。
这样就可以知道$MFT文件在分区的0xc0000(10进制为786432)族(大小4096)处,换算为字节为786432 4096=3221225472,文件大小为0x1640(10进制为5696)族,换算为字节为5696 4096 = 23330816。
第二步:
获取文件在$MFT文件的位置,文件参考编号的低4字节就是文件在$MFT文件的位置,求文件参考编号的方法如下:
通过fsutil volume filelayout 文件路径 可获取到文件参考编号,0x0007000000005206的低4字节为0x5206,也就是说E:\12.txt的文件记录位于$MFT的第0x5206(10进制为20998)个记录处。
一个文件记录固定为1KB,那么E:\12.txt的文件记录则位于 20998 * 1024 = 21501952 = 0x1481800。
用FTK看看$MFT的0x1481800处是什么内容:
字符“FIFE”代表是一个文件记录,第二个紫框表明文件名匹配,第三个紫框是文件内容“helios89”,看看12.txt的内容:
可见计算得到的E:\12.txt在$MFT的位置是正确的,知道了$MFT在分区的分布范围,也知道了E:\12.txt在$MFT的位置,通过简单的计算便可知道E:\12.txt在分区的分布范围了。
大文件
大文件指的是文件记录容纳不下文件的内容,需要开辟extents存放,这种文件是最容易计算其数据分布范围的,参考小文件计算的第一步。
分区偏移量
上面的计算结果得到的是文件在分区的偏移量,需要加上分区偏移量才是磁盘的偏移量。分区偏移量可通过FTK软件查看。
方法如下:
选择【File】->【add Evidence Item..】,弹框如下:
选择【Physical Drive】【下一步】选择磁盘,点击完成。
在【View】中选择【Properties】显示出属性框
在左侧的【Evidence Tree】中选择一个分区,在属性框中便可查看到分区的偏移量(单位扇区)了,如下图所示:
结束语
Windows作为最流行的个人计算机操作系统,也证明了NTFS文件系统的强大和稳定。本文档只是对NTFS进行了简单的介绍,还有更多的技术原理值得我们继续研究,让我们继续前进吧。