如何解释NTFS MFT的FILENAME属性?

时间:2014-11-20 06:39:52

标签: ntfs ntfs-mft

我已阅读NTFS MFT。这是图片(用4个字节的字,左边的地址显示在左边)

enter image description here

突出显示的区域是文件名属性。以下是属性格式。

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。这是常驻案例,Resident的dwLength为0x0000004a,wAttrOffset为0x0018,uchIndexedTag为0x01,uchPadding为0x00。由于偏移量是从属性记录开始的0x18。如下所示。

enter image description here

我不知道如何阅读这个unicode字符串。是utf-16吗?每个字符都是16位?

2 个答案:

答案 0 :(得分:0)

看起来它是UTF-16 - 根据Windows Internals的书 - 我在网上查了一下,一切都表明它是UTF-16而内部书并没有明确说明它确实说unicode(并指定FAT FS的非unicode) - 在微软世界中暗示UTF-16。

虽然我不是100%肯定,但如果它是一个32位或更高的系统,我会说UTF-16是一个安全的赌注。

要回答最后一部分 - 是的,unicode是2字节或16位字符。

答案 1 :(得分:0)

根据
https://www.mandiant.com/blog/incident-response-ntfs-indx-buffers-part-2-internal-structures-file-attribute/
'文件名'属性有其结构。根据它,文件名的长度是4,值是" $ MFT"。