如何从MFT中提取文件大小

时间:2015-03-13 22:36:06

标签: python ntfs ntfs-mft

我正在尝试提取主文件表(MFT)的内容。我从我的NTFS卷复制了MFT并将其保存为.bin文件。现在我尝试使用Python中提供的unpack函数来读取此文件。我正在读取为文件记录的文件名属性中存储的实际文件大小分配的8位,如此

d['real_fsize'] = struct.unpack("<d",s[48:56])[0]

我面临的问题是我得到的文件大小是3.5e-323。 MFT以字节为单位保存文件大小,但我得到的答案似乎很荒谬。 那么有什么方法可以纠正它吗?

2 个答案:

答案 0 :(得分:1)

文件名属性不准确正确显示文件大小。据我所知,它是在Windows资源管理器中查看文件时更新的,因为文件名属性是文件夹的INDX块的一部分。因此,导航以显示目录树中的内容比重新解析文件记录以查找其大小更容易。文件名属性结构中还有其他大小,它们引用属性的名称和实际的文件名大小。

文件的准确大小由DATA属性(类型0x80)给出,文件可能有多个数据属性。未命名的DATA属性是文件的主要内容。

答案 1 :(得分:0)

您正在尝试将整数(ULONGLONG)读取为double浮点值,这将导致虚假结果。

使用d(用于double)代替Q(对于QWORD)结构格式:

d['real_fsize'], = struct.unpack("<Q", s[48:56])

您应该会看到一个合理的值。