我已阅读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。这是常驻案例,Resident的dwLength为0x0000004a,wAttrOffset为0x0018,uchIndexedTag为0x01,uchPadding为0x00。由于偏移量是从属性记录开始的0x18。如下所示。
我不知道如何阅读这个unicode字符串。是utf-16吗?每个字符都是16位?
答案 0 :(得分:0)
虽然我不是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"。