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 遥测数据互相印证
三个常见陷阱
- 时间戳是文件的 mtime,并非执行时刻。 若复制二进制文件时未修改时间戳,会保留其原始 mtime。
- 存在条目不等于执行证据。 在 Windows 10 / 11 中,缓存内的执行标志已被彻底移除。要主张程序确实运行过,需要结合 Prefetch、AmCache 与事件日志。
- 缓存会被填满、淘汰旧条目,并在关机时刷新。 那些尚未写入磁盘的最近条目,会就此消失。
只要谨慎使用、并与其他证据互相印证,ShimCache 就是信号极强的枢纽。请把每条条目当作待验证的假设来处理,而不是直接当作结论。
接下来可以读
想更深入的话,博客分成了两个主题集。
理解 ShimCache
- ShimCache 与 AmCache:哪个 Windows 证据回答哪个问题
- ShimCache 能否证明程序被执行过?
- ShimCache 存储在哪里?什么时候写入?
- Prefetch、AmCache、ShimCache:程序执行证据快速参考
- 解析 ShimCache:Windows 10 与 11 的二进制格式