理解 Windows ShimCache(AppCompatCache)

约 1 分钟阅读

Windows 的 ShimCache(又称 Application Compatibility Cache,即 AppCompatCache)是现代 Windows 应急响应中被引用最多的取证证据之一,也是最常被误解的证据之一。本文简要介绍它实际记录了什么、存放在何处,以及调查人员应当(与不应当)如何解读它。

ShimCache 记录什么

当 Windows 检查可执行文件以决定是否需要应用兼容性 shim 时,会把这次检查记录到 ShimCache。每个系统最多保存 1,024 条条目,每条至少包含:

  • 可执行文件的 完整路径
  • 文件的 $STANDARD_INFORMATION 最后修改时间戳
  • 在较老的 Windows 版本中,还包含表示文件是否被执行的标志位

系统运行期间,该缓存保存在易失性内存中,仅在关机时 才会写入注册表。这一时序细节非常关键:硬重启或强制断电的虚拟机可能会完全丢失最近的条目。

存放位置

ShimCache 位于 SYSTEM 配置单元的:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache

值是一段二进制 Blob,其结构因 Windows 版本而异 —— XP、7、8、8.1、10 和 11 各自使用略有不同的布局。要离线分析它,需要提取该值并按正确的结构进行解码。本工具就是在你的浏览器内完成这一切,无需任何上传。

取证价值

ShimCache 最常用于证明 程序的存在:某个特定二进制文件在某个时刻曾出现在指定主机的磁盘上。这在以下场景中很有用:

  • 即使文件已被擦除,也能归因恶意软件的曾经存在
  • 丰富基于 Prefetch 或 AmCache 构建的执行时间线
  • 与 EDR 或 Sysmon 遥测数据互相印证

三个常见陷阱

  1. 时间戳是文件的 mtime,并非执行时刻。 若复制二进制文件时未修改时间戳,会保留其原始 mtime。
  2. 存在条目不等于执行证据。 在 Windows 10 / 11 中,缓存内的执行标志已被彻底移除。要主张程序确实运行过,需要结合 Prefetch、AmCache 与事件日志。
  3. 缓存会被填满、淘汰旧条目,并在关机时刷新。 那些尚未写入磁盘的最近条目,会就此消失。

只要谨慎使用、并与其他证据互相印证,ShimCache 就是信号极强的枢纽。请把每条条目当作待验证的假设来处理,而不是直接当作结论。

接下来可以读

想更深入的话,博客分成了两个主题集。

理解 ShimCache

在调查中使用