0

NTFS MFT を読みました。写真はこちら(4バイト語で左が下位アドレス)

ここに画像の説明を入力

強調表示された領域はファイル名属性です。以下は属性フォーマットです。

typedef struct _NTFS_ATTRIBUTE {
unsigned int dwType;
unsigned int dwFullLength;
unsigned char uchNonResFlag;
unsigned char uchNameLength;
unsigned short wNameOffset;
unsigned short wFlags;
unsigned short wID;
   union ATTR {
   struct RESIDENT {
      unsigned int dwLength;
      unsigned short wAttrOffset;
      unsigned char uchIndexedTag;
      unsigned char uchPadding;
   } Resident;
   struct NONRESIDENT {
      unsigned long long n64StartVCN;
      unsigned long long n64EndVCN;
      unsigned short wDatarunOffset;
      unsigned short wCompressionSize;
      unsigned char uchPadding[4];
      unsigned long long n64AllocSize;
      unsigned long long n64RealSize;
      unsigned long long n64StreamSize;
   } NonResident;
   } Attr;
} _NTFS_ATTRIBUTE, *P_NTFS_ATTRIBUTE;

ご覧のとおり、dwType は 0x00000030 (FILENAME) で、dwFullLength は 0x00000068 です。wNameOffset は 0x0018、wID は 0x0003 です。これは常駐ケースであり、常駐には dwLength 0x0000004a、wAttrOffset 0x0018、uchIndexedTag 0x01、および uchPadding 0x00 があります。オフセットは属性レコードの先頭から 0x18 なので。以下に示します。

ここに画像の説明を入力

このユニコード文字列の読み方がわかりません。utf-16ですか?すべての文字は 16 ビットですか?

4

2 に答える 2

0

それはUTF-16のようです-Windows Internalsの本によると-私はそれをオンラインで調べましたが、すべてがUTF-16であることを示唆しています. -FAT FS の場合は unicode) - Microsoft の世界では UTF-16 を意味します。

100% 確実というわけではありませんが、32 ビット以上のシステムであれば、UTF-16 が安全な方法だと思います。

最後の部分に答えるには - はい、ユニコードは 2 バイトまたは 16 ビット文字です。

于 2014-11-20T07:14:30.440 に答える
0


https://www.mandiant.com/blog/incident-response-ntfs-indx-buffers-part-2-internal-structures-file-attribute/によると
、「ファイル名」属性にはその構造があります。それによると、ファイル名の長さは 4 で、値は「$MFT」です。

于 2014-11-20T11:30:31.237 に答える