ntfs格式之fmt0x80解析3_多簇解析以及log分区文件恢复
之前的文章大概讲述了0x80的数据结构。 了解这些结构主要还是要用于文件恢复操作的。
文件恢复,一般意味着用户已经删除了文件而且已经清空回收站。 理想的情况下,此时应该直接恢复介入,不要对硬盘再做读写操作了。
还有一个重点是,固态硬盘基本上就不要想数据恢复了。只有机械硬盘才有这个可能。因为固态硬盘删除文件的同时,硬盘数据区域就会被重写。
下面结合实际来讲一讲如何恢复一个超过4G的大文件。
首先需要准备一块硬盘分区和一个大文件,然后格式化分区。最后将文件拷贝进去面,最后删除并清空回收站。
这里有个比较重要的一点,需要提前记下文件名称。
首先找一个能将字符转换为unicode的网站,看看文件名的unicode编码是多少,我的如图:
winhex 打开硬盘, 点击到$mft
分区, 然后点击搜索:
上面一步大家可能疑惑搜索内容怎么和转码内容不一致,这里是因为unicode是双字节,在内存中排序方式是小端序。
所以本来unicode转码结果为:
1
\u0053\u0045\u0020\u0030\u0031
但实际搜索顺序应该为:
1
53004500200030003100
搜索结果已经按属性用不同颜色区分了,从搜索结果上来看,文件被删除后,簇流信息也同步被删了。所以在这里找不到文件数据的簇信息。
接下来就到重点了,点击$logfile
文件,然后再搜索
log文件中,记录了硬盘所有的操作日志,所以这里可能会有多条记录。
你需要找到一条相同文件名,而且一般来说是完整的MFTFILE
结构,而且结构中有0x80非常驻属性的记录。
一般这条记录就会记录数据的簇流信息,由于这里也是可能有多条的,所以需要把每条数据都恢复出来,然后再去看看自己想要的是哪些数据。
比如我这里就 找到了一条:
这里可以看到一条文件名相同的记录,有完整的FILE
结构,并且0x80
属性中也有簇流信息!那么我们尝试恢复下看下。
其中簇流信息原始数据为:
1
0x33DF490F20C804 33A1EB032542FB 325130FB590400
这里同时也记录下多个簇流的解析方式,免得以后忘了:
解析规则如下:
- 首先遇到0则停止解析
- 第一个字节高位代表簇流起始地址所用字节长度,低位代表簇流长度所用字节长度
- 接下来再按照先读取簇流长度,再读取簇流起始地址的顺序读取数据
- 循环往复的读取,直至0
再回顾上面的原始信息
这里首字节为0x33
代表长度和起始地址各占3个字节,总共6个字节,那么第一个簇流信息为:
1
0x33df490f20c804
接下来解析簇流长度,总共3个字节,所以数据应该为:0xdf490f
, 小端结果为:0xf49df
接下来解析簇流起始地址,总共3个字节,所以数据为:0x20c804
, 小端结果为:0x4c820
下一个字节不为0, 那么还应该继续解析,下个簇流信息为0x33A1EB032542FB
和上面一样的,长度和起始位置都用了3个字节,那么数据应该为
解析簇流长度,总共3个字节,所以数据应该为:0xa1eb03
, 小端结果为:0x3eba1
解析簇流起始地址,总共3个字节,所以数据为:0x2542fb
, 小端结果为:0x2542fb
这里需要注意一点,从第二条簇流信息起,它们的起始位置是相对于上一条的偏移量,所以需要把两个位置相加。
所以第二条起始簇真正地址是: 第一条起始地址+ 第二条偏移量, 也就是 0x4c820
+ 0x2542fb
再看下一个字节,还是不为0,所以需要继续解析,下个簇信息为:0x325130FB5904
这里和不一样了,长度用了2字节,起始位置用了3个字节,那么数据应该为
解析簇流长度,总共2个字节,所以数据应该为:0x5130
, 小端结果为:0x3051
解析簇流起始地址,总共3个字节,所以数据为:0xfb5904
, 小端结果为:0x459fb
这里起始地址也和上面一样,是偏移量,所以条簇的起始地址=上一条的起始地址+起始偏移, 也就是 0x4c820
+ 0x2542fb
+ 0x459fb
再看下一个字节,此时为0, 则需要停止解析。
最后,在winhex中将以上3个部分导出,再合并为一个文件,这个文件就恢复成功啦。
这里备注下,由于NTFS文件系统是微软商业软件,所以这方面找不到资料,只能知晓大概~~~~,
本来想找找完整的logfile文件格式,在数据恢复技术第二版中,作者说这里的格式未知,极度无语!