0

我目前正在尝试从原始数据中以编程方式解析硬盘驱动器的 MFT,以便枚举具有特定扩展名的所有文件(在很短的时间内)。

我正在按照该教程来指导自己:A Programmers View of Raw Filesystem Data Extraction

我已经\\.\PhysicalDrive0使用成功打开CreateFileA,并且确实找到了我找到BPB.

我的问题是我无法正确定位MFT.

MFT 逻辑簇号

如上所示(我的 Windows 分区第一个扇区的原始数据),MFT 的逻辑簇数等于0x56a6.

然后我计算了每个簇的扇区数,即0x20 (0x20 * 512 = 0x4000 bytes).

所以从逻辑上讲,MFT 的偏移量0x4000 * 0x56a6等于0x15a98000

当我寻找该偏移量并检索前 512 个字节时,我看不到应该开始的预期数据FILE(我只看到一些随机字节)。

我也尝试不是从分区的第一个扇区而是从硬盘驱动器的一个扇区中寻找,它也不起作用(我想这是正常的)。

我想我错过了什么,但我不知道是什么。

我希望我已经足够清楚了,如果您需要更多详细信息和信息,我会提供给他们。

谢谢。

4

1 回答 1

0

根据NTFS_BOOT_SECTOR文档中struct的定义,偏移量uchSecPerClust为3 + 4 + 4 + sizeof(WORD)= 0x0D。(忽略字节对齐)

或者,您可以使用DeviceIoControl控制IOCTL_DISK_GET_DRIVE_GEOMETRY代码来填充DISK_GEOMETRY结构,其中包含有关驱动器的信息:

https://docs.microsoft.com/en-us/windows/win32/devio/calling-deviceiocontrol

另一个有用的控制代码:FSCTL_ENUM_USN_DATA

于 2020-02-06T05:43:49.500 回答