ShimCache 与 AmCache:哪个 Windows 证据回答哪个问题

约 1 分钟阅读

TL;DR. ShimCache 证明文件曾在磁盘上存在;AmCache 证明它被执行过,并以 SHA-1 标识。ShimCache 仅在干净关机时才落盘 —— AmCache 持续写入。两者都要采集;它们是相互印证的共同证人,不是替代品。

ShimCache 与 AmCache 是 Windows 程序执行调查中最常被引用的两类基于注册表的证据。它们听起来可以互换,其实并不是。本文是一份快速参考,帮助你根据想回答的问题选择该看哪一个。

ShimCache 与 AmCache 决策树

概览

ShimCacheAmCache
位置HKLM\SYSTEM\…\AppCompatCacheC:\Windows\AppCompat\Programs\Amcache.hve
容量最多 1,024 条数千条,无固定上限
每条记录路径、mtime、(旧版)执行标志路径、SHA-1、大小、发布者、安装日期等更多字段
写入时机仅在关机时持续写入(并按计划间隔写入)
能否抵御崩溃否 — 最近记录会丢失能 — 已在磁盘上
适用于证明文件曾在磁盘上 存在过证明文件曾 被执行,并通过哈希精确识别

ShimCache 占优势的时候

ShimCache 会为 Windows 仅仅因兼容性原因 检查过 的可执行文件保留记录。这一点很灵敏:攻击者投放后立刻删除的二进制文件,仍可能在 ShimCache 中留下痕迹。如果你的问题是 「这个文件曾经在这台主机上存在过吗?」,ShimCache 就是你的盟友。

它也是两者中唯一记录文件 $STANDARD_INFORMATION mtime 的证据。该时间戳 并非 执行时刻(这是一个常见误读,另一篇文章 专门讨论),但它把文件身份锚定在时间轴上。

AmCache 占优势的时候

当问题是 「这个文件真的被执行了吗?又是哪一个文件?」 时,应当使用 AmCache。每条 AmCache 记录都包含 SHA-1 哈希、文件大小、发布者、安装日期 —— 足以毫无歧义地识别一个二进制文件,即使磁盘上的文件后来被替换或抹除。

AmCache 还更具持久性。由于 Windows 是持续写入而不仅仅在关机时刷新,发生在崩溃或被硬重启系统上的近期活动,更可能保留在 AmCache 中而非 ShimCache 中。

如何配合使用

实践中可以把它们当作 互证

  • 两者 中都有条目、路径一致且 AmCache 时间戳较新,这是执行的强证据。
  • 仅在 ShimCache 中出现,说明文件至少在某个时刻曾在磁盘上。在下结论说执行之前,去找其它佐证(Prefetch、AmCache、事件日志)。
  • 仅在 AmCache 中出现,而 Prefetch 与 ShimCache 都没有,通常意味着自从该活动以来主机没有干净关机过 —— ShimCache 还没来得及落盘。

关于 ShimCache 二进制布局的技术细节,请见 解析 ShimCache:Windows 10 与 11 的二进制格式。如果想立刻分析一个注册表配置单元而不安装任何工具,可使用 Shimcache Parser —— 全部在你的浏览器内运行。

延伸阅读

相关文章