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。如下所示。

在此处输入图像描述

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

4

2 回答 2

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 回答
0

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

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

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

于 2014-11-20T07:14:30.440 回答