每个 NTFS 文件都有一个保存其内容的 $DATA 属性。在绝大多数情况下,$DATA 是非常驻的 —— 它指向一份位于卷上其他位置的簇运行(cluster run)列表。但当文件足够小时,它的字节就直接住在 MFT 记录里面。
多小才算够小?
一条 MFT 记录为 1024 字节。扣除记录头、$STANDARD_INFORMATION、至少一个 $FILE_NAME 以及其他元数据后,留给 $DATA 的可用空间大约只有 700 字节。
小于这个阈值的文件 —— 配置片段、注册表值、快捷方式目标、批处理脚本、某些日志行 —— 经常完整地住在 MFT 内。
这为什么重要
常驻的 $DATA 属性,不需要读取磁盘其余部分就能恢复。如果你手里只有一份 $MFT,你已经拥有:
- 小型文本文件的完整内容
- 大量目录的
$INDEX_ROOT数据 - 短小的备用数据流
- 重解析点和符号链接的目标
仅仅一份 200 MB 左右的提取物,所承载的证据数量相当惊人。
常驻并不等于稳定
当一个常驻文件长大到超出记录的剩余空间时,NTFS 会把它转换为非常驻 —— 数据被搬到簇中,$DATA 变成 runlist。反过来也可能发生:当一个文件缩小到阈值以下时,它可以重新变为常驻 —— 不过 Windows 很少主动这么做。
在排查时,一个曾经很大、如今却是常驻的文件不太寻常,值得细看。