Post

ntfs格式之fmt0x80解析2

本篇接着上篇,记录一下大文件的记录方式。

这里我复制了一个100MB+的文件到硬盘,然后定位到FILE区块,再来观察0x80和上一篇文章的区别。

image

老规矩,用不同色块标记了不同的属性,这里直接查看分析最后一个0x80(粉色)属性。

从图中可以看到,这里0x80属性整体长度很短,总共才使用了0x48个字节。那么数据存在哪儿了呢?

先是来分析图中0x80数据,关键数据如下:

  • 0x14d17528-0x14d1752b 属性名,值为0x80
  • 0x14d1752c-0x14d1752f 属性长度,值为0x48
  • 0x14d17530-0x14d17530 是否常驻,这里为1非常驻属性
  • 0x14d17548-0x14d17549 簇流运行的偏移地址,这里值为0x40
  • 0x14d17560-0x14d17567 属性体的初始大小,也就是文件大小,这里值为:0x9766F62
  • 0x14d17568-0x14d1756d 这里是簇流偏移地址,也就是数据实际储存扇区位置,这里可能有多个偏移地址,解析到0则停止解析。

简单说明下簇流偏移地址:

簇流是存放数据的区域

簇流运行是记录簇流具体在文件系统哪个位置的代码

簇流运行第一个字节的低四位表示:该字节后几个字节为一组,这一组表示簇流的大小

簇流运行第一个字节的高四位表示:该字节后几个字节为一组,这一组表示簇流的起始簇号(相对于当前簇流),如果起始簇号为负,表示下个簇流在这个簇流前面

比如图中,簇流地址原始数据为0x23679700e205

按照上面说明,第一个字节是0x23,它分别代表起始簇流为2个字节,簇流记录总字节数为3字节

也就是总共需要取5个字节,分别为起始簇流使用的3个字节和簇流的大小使用的2个字节

数据取出来也就是(注意这里是原始数据):

  • 0x679700 这里是3个字节,这个是簇流的大小,解析后值十进制为:38759
  • 0xe205 这里2个字节,也就是簇流起始位置,解析后值十进制为:1506

说实话,取数据这里有点绕,字面理解总共需要取五个字节,大家一般就按2字节大小,3字节偏移量去取了。

然而正确的取法却是先取3字节大小,再取2字节偏移量,这样去取。

也就是前面0x23记录顺序分别是起始位置和偏移量,而后面记录数据顺序却又是偏移量和起始位置。 这里需要特别注意

这里贴张图更方便理解
image

然后点击跳转到指定的簇,这选择并且导出即可把数据备份出来了。这里不要填到扇区了!

image

导出也特别简单,因为有了起始簇和长度,所以直接能定位到数据,所以导出数据也是没有问题了。

This post is licensed under CC BY 4.0 by the author.