ntfs格式之fmt0x80解析2
本篇接着上篇,记录一下大文件的记录方式。
这里我复制了一个100MB+的文件到硬盘,然后定位到FILE
区块,再来观察0x80和上一篇文章的区别。
老规矩,用不同色块标记了不同的属性,这里直接查看分析最后一个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个字节,这个是簇流的大小,解析后值十进制为:387590xe205
这里2个字节,也就是簇流起始位置,解析后值十进制为:1506
说实话,取数据这里有点绕,字面理解总共需要取五个字节,大家一般就按2字节大小,3字节偏移量去取了。
然而正确的取法却是先取3字节大小,再取2字节偏移量,这样去取。
也就是前面0x23
记录顺序分别是起始位置和偏移量,而后面记录数据顺序却又是偏移量和起始位置。 这里需要特别注意
然后点击跳转到指定的簇,这选择并且导出即可把数据备份出来了。这里不要填到扇区了!
导出也特别简单,因为有了起始簇和长度,所以直接能定位到数据,所以导出数据也是没有问题了。
This post is licensed under
CC BY 4.0
by the author.