我有一个用NTFS格式化的usb。我需要使用'C'创建一个文件,所以我想知道
答案 0 :(得分:0)
所以我意识到我在聚会上已经晚了几年,但实际上已经成功完成了这样的事情,我会提供适合我的。
flatcap - NTFS Documentation - >这是我发现保存为File System Forensics Analysis by Brian Carrier
的最佳文档我正在做的事情和你要做的事情之间的巨大差异是我正在重建已删除的文件而不是创建新的文件。所以我的主要优点是能够使用复制的属性进行微小的改动。以下是我的一些发现。
新文件记录需要$ Standard_Information(0x10)$ Filename(0x30)$ Security_Descriptor(0x50)和$ Data(0x80)属性。如果你在$ Secure系统文件中索引文件,你可以在没有Security_Descriptor的情况下离开,但我建议使用$ Security_Descriptor来实现向后兼容性和简单性,这也是linux ntfs-3g的用法(我从观察ntfs-中学到了很多东西) 3g使用git的difftool对文件系统的各个部分进行了更改。您只需从具有相同权限的示例文件中复制$ Security_Descriptor即可。您也可以从类似的文件中复制其他属性的基本结构,并进行以下更改:
$ Standard_Information和$ Filename需要新的时间戳。您还需要更新父目录的文件记录中的文件已更改和MFT已更改的$ Standard_Information时间戳(中间2),并且所有这些时间戳都应匹配。
$数据非常简单。您只需要确保指定正确的数据长度(如果是常驻数据,如果非常驻数据,那么大多数数据是您需要读取来自flatcap的数据运行。
$ Filename应该只需要一个新的名称长度和属性长度来匹配新名称。
文件记录标题(前24个字节左右)需要被赋予正确的文件记录大小,填充到8字节边界,如果文件记录是全新的,则序号为1(否则需要如果正在重新分配,则增加1。
每当您更新具有USN(文件和索引记录)的任何内容时,更新它并将每个扇区的末尾与USN交换到更新序列阵列中,这一点非常重要。我不确定你应该增加多少,但是我编写了我的代码来为每个写入的扇区增加它,这似乎有效。
您需要阅读索引记录才能将文件正确放置在父目录中:
关于处理$ MFT的$ Bitmap属性。我不是肯定NTFS如何做到这一点,并在我了解更多时会更新,但这就是我所做的。重要的是要意识到NTFS具有低编号文件记录的MFT保留,除非卷处于压力之下,否则不能写入,并且如果写入错误的记录窗口,则会发现新文件已损坏。 / p>
MFT文件参考地址是48位文件引用号(在$ Bitmap中找到)的复合,它只是$ MFT中的记录索引(0是第一个记录等)和16位序列号(在文件记录头中找到)文件参考号可用于查找任何文件记录,方法是首先解析$ MFT文件记录的$ Data属性,然后逐个计算记录,直到达到该数字(显然你实际上不需要用一些简单的数学来逐个计算它们,但是当你阅读数据运算时我觉得怎么做会更清楚。)
我忘了可能有很多东西,但是我希望有人在我开始研究时写下了一些东西,因为那时我的生活可能是最简单的。