我正在尝试计算动态 VHD 的 NTFS 文件系统主引导部分的 MFT 偏移量。此动态 VHD MFT 的 Little Endian 群集位置突出显示:
然后进一步解析为MFT_OFFSET= cluster_address * sector_per_cluster * SECTORSIZE
(这里SECTORSIZE
是 512)以计算 MFT 的实际偏移量...此计算在固定 VHD 的情况下有效。但在动态 VHD 中则不行。
在动态中,我有块分配表值。我使用第一个条目来计算磁盘 MBR,然后它将我指向磁盘的第一个分区。在这里我可以计算 MBS 偏移量。但是当我使用上面提到的群集位置来计算 MFT 位置时,它指向其他地方。
还有哪些其他步骤可以帮助我解决这个问题?
答案1
在动态中,我有块分配表值。我使用第一个条目来计算磁盘 MBR,然后它将我指向磁盘的第一个分区。在这里我可以计算 MBS 偏移量。但是当我使用上面提到的群集位置来计算 MFT 位置时,它指向其他地方。
是的,因为你再次需要解决额外的翻译步骤。如果我们假设:
然后根据我阅读各种文档的方式,我在 Google 上进行了搜索(例如:https://redcircle.blog/2008/12/01/dynamic-vhd-walkthrough/),我们需要增加一个翻译层来克服:
如果我们处理的是驱动器,则为 Cluster > LBA。由于您不依赖操作系统或文件系统驱动程序,因此您需要自己解决常规磁盘 I/O 示例中的步骤 1 - 5。
VHD 内的 Cluster > LBA,然后是 LBA > Block。由于您不依赖操作系统或文件系统驱动程序,因此您需要自己解决动态 VHD I/O 示例中的步骤 1 - 9。
您按照以下步骤解析了 MBR,您必须对 MFT 的位置执行相同的操作。并且您不能仅仅假设一旦您转换了 MBR 的位置,从那时起您就可以“算作”:
“此外,永远不要假设扇区偏移量是连续的。偏移量的转储表明它们可以被打乱。” - 来自我之前链接到的页面。
换句话说,您想要读取的每个部分都必须在“BAT”中查找。