如何在ntfs中为文件创建标准信息属性

时间:2013-01-23 04:24:51

标签: c

我有一个用NTFS格式化的usb。我需要使用'C'创建一个文件,所以我想知道

  1. 如何在阅读$ BITMAP后为我的文件分配免费条目 mft文件的属性。
  2. 如何创建属性($ STANDARD 信息和$ FILENAME ATTRIBUTE)我的文件。

1 个答案:

答案 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交换到更新序列阵列中,这一点非常重要。我不确定你应该增加多少,但是我编写了我的代码来为每个写入的扇区增加它,这似乎有效。

您需要阅读索引记录才能将文件正确放置在父目录中:

  • 确保将新文件的相应索引条目键插入到目录B *树的正确索引记录或节点中。
  • 索引记录USN需要更新,其长度和自引用密钥的时间戳也是如此。

关于处理$ MFT的$ Bitmap属性。我不是肯定NTFS如何做到这一点,并在我了解更多时会更新,但这就是我所做的。重要的是要意识到NTFS具有低编号文件记录的MFT保留,除非卷处于压力之下,否则不能写入,并且如果写入错误的记录窗口,则会发现新文件已损坏。 / p>

  • 您无需更新USN
  • 每个位代表一个文件记录。
  • 找到最后一个(不是第一个)完整文件记录,然后选择第一个空文件记录。
  • 填写该位并在新文件的索引条目表示中记录MFT文件参考地址。
  • 将新文件记录写入该位置。

MFT文件参考地址是48位文件引用号(在$ Bitmap中找到)的复合,它只是$ MFT中的记录索引(0是第一个记录等)和16位序列号(在文件记录头中找到)文件参考号可用于查找任何文件记录,方法是首先解析$ MFT文件记录的$ Data属性,然后逐个计算记录,直到达到该数字(显然你实际上不需要用一些简单的数学来逐个计算它们,但是当你阅读数据运算时我觉得怎么做会更清楚。)

我忘了可能有很多东西,但是我希望有人在我开始研究时写下了一些东西,因为那时我的生活可能是最简单的。