TL;DR. 不能。一条 ShimCache 条目证明的是 Windows 检查过该文件,通常是出于执行原因,但并非总是。Windows 10/11 完全移除了缓存内的执行 flag。请用 Prefetch、AmCache 或进程创建事件(Security 4688 / Sysmon 1)来确认执行。
"ShimCache 显示它运行过"是 Windows 事件响应中代价最高的一句话。它被写进报告。它会被对方律师质询。它会让分析师在证人席上解释为什么 mtime 不是进程启动时刻,与此同时房间里的每个人对 Application Compatibility Cache 的了解远超出他们想要的。不要做那个分析师。
ShimCache 实际记录的内容
该缓存正式名称为 Application Compatibility Cache,存放在 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache\AppCompatCache,记录 Windows 为判定是否需要应用兼容性 shim 而检查过的可执行文件。检查不是执行。Windows 在以下情况会检查一个二进制:
- 用户双击它。
- Explorer 枚举一个文件夹,并检查 PE header 以获取图标数据。
- 反病毒扫描器、索引器或 EDR 遍历文件系统。
- 右键"属性"拉取版本资源。
- 系统调用解析了一个以
.exe结尾的路径。
这些大多发生在执行的同时。有些则不是。被攻击者投放、改名并删除却从未启动的二进制,仍可能因为 Defender 在它落地途中扫描了它而进入缓存。
Windows 10 拿走的那个 flag
较旧的版本(XP 到 Windows 8.1)在每个条目中嵌入了一个 Executed flag。许多分析师学会了 grep "yes" 然后收工。Windows 10 移除了那个 flag。Windows 11 也没有把它放回来。现代缓存只携带路径、mtime 以及结构性元数据。缓存中没有任何"这运行过"的标记。
如果你在旧 hive 上受训,如今正在读 Windows 10/11 的 SYSTEM,请重新校准。你记得的"Executed"列已经没有了。每一个值得用的 parser(Eric Zimmerman 的 AppCompatCacheParser、Mandiant 的 Shim Cache Parser、本工具)都诚实地反映了这种缺失。如果你看到某个工具在现代 hive 上报告执行 flag,那个工具是在编造。
字段级别的布局见 Windows 10/11 二进制格式详解。
什么能确认执行
把 ShimCache 命中当作一个假设。然后去寻找真正记录进程创建的证据。
- Prefetch。
C:\Windows\Prefetch\*.pf文件在工作站 SKU 上每次进程启动后约 10 秒内被写入。运行次数、最近八次运行时间、加载的模块。文件存在,则二进制运行过。Prefetch parser 讲解了该格式以及禁用的情形。 - AmCache。
Amcache.hve携带 SHA-1 哈希和明确的首次运行时间戳,并且持续写入。AmCache parser 提供了字段指南。 - EVTX / Sysmon。 Security 4688(在启用命令行审计的情况下)和 Sysmon Event ID 1 是你能拿到的最高保真度记录。EVTX parser 介绍了分诊工作流。
- BAM / DAM。
HKLM\SYSTEM\CurrentControlSet\Services\bam\State下的每用户最后执行时间。读取代价很低,被严重低估。 - UserAssist。 仅限通过 Explorer 的交互式启动,名称采用 ROT13 编码。对"用户是否双击了它?"有用,对"该二进制是否曾运行?"则不然。
交叉参照模式见 程序执行工件参考。
报告里如何措辞
差的写法:"ShimCache 显示 mimikatz.exe 于 2026-04-11 14:33:21 UTC 被执行。"
更好的写法:"ShimCache 记录了文件 C:\Users\Public\mimikatz.exe,$STANDARD_INFORMATION mtime 为 2026-04-11 14:33:21 UTC。Prefetch 条目 MIMIKATZ.EXE-A1B2C3D4.pf 显示在 14:34:02 UTC 有一次执行。AmCache 的 SHA-1 与已知的 mimikatz build 2.2.0 匹配。"
第二句话能经得起交叉质询。第一句不能。
不离开浏览器就解析一份 hive
把你的 SYSTEM hive 拖入 Shimcache Parser。一切都在客户端运行。不上传,这在 hive 来自受监管环境或客户委托案件时非常重要。
延伸阅读
- Mandiant 的 Caching Out the Val:对该工件最早的公开逆向工程。
- Eric Zimmerman 的 AppCompatCacheParser:参考 C# parser,其输出 schema 是事实上的行业标准。
- Ø Security 的 Windows 10/11 AppCompatCache deep dive:详细讨论了被移除的那个 flag。