avatar

目录
NTFS的初步理解以及简单的文件删除和恢复

不知道计算机取证这门课为啥要上英文的,而且还上的网课,根本没听进去,结果还不如自己上网找资料看来得痛快。

1 NTFS文件系统

NTFS文件系统(New Tecnology File System),是现在绝大多数电脑磁盘分区使用的文件系统。NTFS 文件系统具有安全性高、稳定性好、不易产生文件碎片等优点。

NTFS文件系统大致结构如下:

DBR:由“跳转指令”、“OEM代号”、“BPB”、“引导程序”和“结束标志”组成,这里和FAT32文件系统的DBR一样。

数据区:数据区分为三部分,这是真正存储文件内容的地方。

MFT:它由一个个表项构成,每一个表项是一个文件记录,大小一般为1KB(两个扇区),记录着卷中每一个目录和文件的信息,每个文件记录的结构都是固定的,由文件记录头和若干属性构成。

部分MFT备份:用来备份MFT部分信息。

DBR备份:备份DBR。

NTFS中DBR的大致结构和FAT32相同,但部分字节的定义有差异。

使用WinHex,并结合上图就可以理解各个字节的意思。

在NTFS的MFT文件中,会预先建立16个重要的文件(MFT记录的ID编号固定为0-15)和8个保留文件(MFT记录的ID编号固定为16-23),这24个文件是被称为元文件(Metafiles)或元数据(metadata)的系统文件、,NTFS文件系统将这些数据都当做文件进行管理,这些文件用户是不能访问的,它们的文件名的第一个字符都是“$”,表示该文件是隐藏的。而用户的文件在MFT中的ID编号从24后开始排,用户每添加一个文件,ID号加1。

上面是MFT的元文件及相应功能,元文件序号和数量不是不变的,随着操作系统的变化,它的内容也会发生部分变化。

下来解析MFT中的用户文件记录部分。文件记录由两部分组成,一部分是文件记录头,另一部分是属性列表,结尾是四个“FF”。一个完整的文件记录如下图:

文件记录头的字节定义如下图如下图:

在属性列表中,每个MFT的属性分为两类常驻属性和非常驻属性。

  • 常驻属性:直接在MFT项中记录属性体,例如10和30属性

      *优点:直接在MFT项中记录属体,访问速度快 
      *缺点:只能记录少量的数据
  • 非常驻属性:在MFT之外的区域记录属性体,例如80属性(当数据较小时为常驻属性)

      *优点:用簇流记录文件存储的数据区域,可以记录很大的数据
      *缺点:访问速度较慢

对每个MFT的属性来说,它又分为两部分:属性头和属性体。

对常驻属性,它属性头的结构如下:

对非常驻属性,它属性头的结构如下:

对上面的00-03偏移字段,MFT中所有的属性类型表如下:

下面,给出10、30和80属性体的结构。

10属性体结构:

30属性体结构:

80属性是存储数据的地方,如果相应文件存储的内容较小那它就是常驻属性,属性头即为前面的常驻属性属性头,紧跟在属性头后面的属性体即为文件内容。

而如果文件存储的内容较大,在当前MFT表装不下(一半般没个MFT项都占用1024字节,即两个扇区)。此时,80属性就是非常驻属性,紧跟它属性头后面的属性体就是簇流记录信息。

80为非常驻时,又分为单个运行列表和多个运行列表。

对上图中80属性体的单运行列表分析。(用参考链接中博主的图)

开头的0x33,低4位的3表示它后面的3字节内容为运行簇个数,这里为0x00BC40;高4位的3表示簇大小后面的3字节内容为起始簇,这里为0x0C0000。而且,这个起始簇是整个文件卷的相对位置。

对上图中80属性体的多运行列表分析。(用参考链接中博主的图)

对第一个运行列表开头的0x31,低4位的1表示它后面的1字节内容为运行簇个数,这里为0x03;高4位的3表示簇大小后面的3字节内容为起始簇,这里为0x009A65。这个起始簇是整个文件卷的相对位置,是LCN (logical cluster number)。

对第二个运行列表开头的0x11,低4位的1表示它后面的1字节内容为运行簇个数,这里为0x01;高4位的1表示簇大小后面的1字节内容为起始簇,这里为0x13。但这里的起始簇是整个文件内部的相对位置,是VCN (virtual cluster number)。

所以有计算公式:

第N个运行列表的LCN=第一个运行列表的起始簇(LCN) + 第二个运行列表的起始簇(VCN) +…+第n个运行列表的起始簇(VCN)

2 文件删除及恢复

在这个实验刚开始时,我是一直使用虚拟机的C盘来操作的。结果C盘文件太多,每次搜索删除的文件明时,非常费事,中间还出现删除文件,搜索不到等现象。后来是,新建了一个容量较小的拓展磁盘来进行这次实验,使得文件搜索分析等操作变得容易进行。

在E盘中新建一个文件,名为“wgz.txt”,确认文件内容。

之后长按“Shift”键,再右键选择“删除”,来将文件直接删除。如果不按“Shift”,而是将文件直接删除,那样文件会移动到回收站里面,文件名也会被更改,后面就不能通过搜索文件名来找到文件,这一点值得注意。

2.1自动恢复

在删除文件之后,用WinHex打开E盘,可以轻易地找到被删除的文件“wgz.txt”。从这个文件头部开始的0x16偏移处看到标记为“00 00”,说明这是一个被删除的文件。

当进行自动恢复的时候,只需要右键选中文件,选择“恢复/复制”,导出到新文件,位置选择为E盘。这里和上面FAT文件系统的自动恢复是一样的。

恢复之后,到E盘查看到恢复文件内容和原来一样。

2.2手动恢复

这里换一种方式寻找文件。在工具栏的“搜索”中,选择“查找文本”。输入文件名,勾选“匹配大小写”,选择“Unicode”编码,因为NTFS文件系统的中文使用Unicode编码。

因为这个磁盘不大,搜索很快就能完成,可以看到被删除文件对应的MFT表项。

文件内容存储在80属性,通过分析该文件MFT表项的80属性体,可以知道这是一个常驻属性。同时知道文件大小是3*16+6=54字节,数据起始位置是从80属性体开头的0x18偏移处。

既然是常驻属性那么文件内容就全部在这个80属性体里面,右键选中数据区域,导出到新文件即可。

选择恢复到E盘,命名为“恢复文件.txt”。

恢复之后,到E盘打开,看到内容和之前一样。

后记

其实等上网找资料看过一些之后,再去看老师的英文ppt会发现讲的还是很好的,尤其是里面的一些图对于理解FAT和NTFS很有帮助。这里就放一个网盘链接,有兴趣的可以看一下。链接: https://pan.baidu.com/s/1NLtYBqCDo0X0k7Z113Y8-w 密码: rrjd

参考:

[1] 深究NTFS文件系统

[2] NTFS文件系统结构–从零开始追踪一个文件的位置

[3] NTFS文件系统详解之文件定位

文章作者: crownZ
文章链接: https://crownz-sec.github.io/2020/04/26/NTFS/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 crownZ's Blog

评论