NTFS でフォーマットされた USB があります。'C' を使用してファイルを作成する必要があるので、知りたいです
- mft ファイルの $BITMAP 属性を読み取った後、ファイルに空きエントリを割り当てる方法。
- ファイルの属性 ($STANDARD INFORMATION および $FILENAME ATTRIBUTE) を作成する方法。
NTFS でフォーマットされた USB があります。'C' を使用してファイルを作成する必要があるので、知りたいです
ですから、私はパーティーに数年遅れていることに気づきましたが、実際にこのようなことを成功させたので、私にとってうまくいったものを提供します.
flatcap - NTFS ドキュメンテーション-> これは、Brian Carrier による File System Forensics Analysis を 除いて、私が見つけた最高のドキュメンテーションに関するものです。
私がやっていることとあなたがやろうとしていることの大きな違いは、新しいファイルを作成するのではなく、削除されたファイルを再構成していたことです。そのため、コピーした属性をわずかな変更で使用できるという大きな利点がありました。ここに私の発見のいくつかがあります。
新しいファイル レコードには、$Standard_Information (0x10) $Filename (0x30) $Security_Descriptor (0x50) および $Data (0x80) 属性が必要です。$Secure システム ファイル内のファイルにインデックスを付ければ、Security_Descriptor なしで済むこともありますが、下位互換性とシンプルさのために $Security_Descriptor を使用することをお勧めします。 git の difftool を使用したファイル システムの一部に対する 3g の変更)。$Security_Descriptor を例のファイルからコピーするだけで、必要な同じ権限を持つことができます。他の属性の基本構造も同様のファイルからコピーして、次の変更を加えることができます。
$Standard_Information と $Filename には新しいタイムスタンプが必要です。また、親ディレクトリのファイル レコードで File Altered および MFT Altered $Standard_Information タイムスタンプ (中央の 2) を更新する必要があり、これらのタイムスタンプはすべて一致する必要があります。
$Data は非常に単純です。常駐の場合はデータの正しい長さを指定する必要があり、非常駐の場合は、フラットキャップから実行されるデータを読み取る必要があるほとんどのデータを指定する必要があります。
$Filename には、新しい名前と一致する新しい名前の長さと属性の長さが必要なだけです。
ファイル レコード ヘッダー (最初の 24 バイト程度) には、8 バイトの境界にパディングされた正しいファイル レコード サイズと、ファイル レコードが新しい場合は 1 のシーケンス番号を指定する必要があります (そうでない場合は、1 ずつインクリメントする必要があります)。再割り当て中です)。
USN (ファイルおよびインデックス レコード) を持つものを更新するときはいつでも、それを更新し、各セクターの最後を USN とスワップし、更新シーケンス配列に入れることが非常に重要です。どのくらいインクリメントする必要があるのか わかりませんが、書き込まれたセクターごとにインクリメントするコードを作成し、それが機能しているように見えました。
ファイルを親ディレクトリに適切に配置するには、Index Records を読む必要があります。
$MFT の $Bitmap 属性の処理に関して。NTFS がこれをどのように行うかについては確信が持てず、詳細がわかり次第更新しますが、私が行ったことは次のとおりです。NTFS には、ボリュームに負荷がかかっていない限り書き込まれない番号の小さいファイル レコードの MFT リザーブがあり、間違ったレコード ウィンドウに書き込むと、新しいファイルが破損していることを認識することが重要です。
MFT ファイル参照アドレスは、$MFT 内のレコードのインデックス (0 が最初のレコードなど) と 16 ビットのシーケンス番号 (最初に $MFT ファイル レコードの $Data 属性を解析し、次にその番号に達するまでレコードを 1 つずつ数えることにより、ファイル参照番号を使用して任意のファイル レコードを見つけることができます (明らかに、実際には簡単な計算で 1 つずつカウントする必要がありますが、Data Runs を読むとその方法がより明確になると思います)。
おそらく忘れていたことがたくさんありますが、私が研究を始めたときに誰かがこれを書き留めていたらよかったのにと思います。