Prefetch、AmCache、ShimCache:程序执行证据快速参考

约 2 分钟阅读

TL;DR. 按优先级阅读:Prefetch(启用时最强)→ BAM/DAM(Win10+ 每用户最近执行,严重被低估)→ AmCache(SHA-1 标识)→ ShimCache(文件存在)→ UserAssist(仅资源管理器发起的启动,ROT13 编码)。请相互印证;任何单一证据都不足以独立结案。

没有任何一类 Windows 证据能完美回答「这个程序是否运行过、何时运行、由谁运行?」。调查人员需要在多个证据间相互印证。本文给出实用的短列表,并说明每一项能告诉你什么、不能告诉你什么。

短列表

证据位置记录内容对「执行」的可信度
PrefetchC:\Windows\Prefetch\*.pf路径、运行次数、最近 8 次执行、加载的文件极高 —— 仅在进程启动时写入
AmCacheC:\Windows\AppCompat\Programs\Amcache.hve路径、SHA-1、大小、发布者、安装与首次运行时间 —— 含明确执行时间戳
ShimCacheSYSTEM 配置单元 …\AppCompatCache路径、文件 mtime中等 —— 证明存在,常常(但不总是)暗示执行
UserAssistNTUSER.DAT …\UserAssist每个用户经资源管理器启动的 GUI 程序 —— 仅限用户启动;名称为 ROT13 编码
BAM / DAMSYSTEM 配置单元 …\bam\State每用户、每二进制的最近执行时间极高 —— Win10+,易解析,常被忽略

按优先级阅读

1. 先看 Prefetch。 .pf 文件几乎是 Windows 唯一接近「确实运行了」的回执,最多保留 8 次执行时间,且现代 Windows 在工作站上默认开启 Prefetch。Eric Zimmerman 的 PECmd 是标准解析器。

2. 再看 BAM / DAM。 Background 与 Desktop Activity Moderator 是限制后台应用的服务,会在 SYSTEM 配置单元的 …\bam\State…\dam\State 下保留每个用户、每个二进制的「最近一次执行」时间戳。它们在 Windows 10/11 上存在,噪声低,用任何注册表工具都能读。

3. 第三看 AmCache。 在 Prefetch 被禁用的环境(如服务器!)下,AmCache 接力补位,并提供 SHA-1 哈希以精确识别文件。详见 ShimCache 与 AmCache

4. 第四看 ShimCache。 把它当作「文件存在过」的锚点,而不是执行的断言。原因详见 关于执行证明的那篇文章

5. 最后看 UserAssist。交互式 程序启动(通过资源管理器)是强证据,但对 shell、计划任务、服务启动的进程一无所知。它适合回答「用户点了这个吗?」,而不是「这个二进制曾被运行吗?」。

常见陷阱

  • Prefetch 可能被禁用(SSD 或策略所致)。不要因为缺失就断定什么都没运行。
  • AmCache 会轮换并淘汰。 旧条目会被清理,请在分诊早期就采集。
  • ShimCache 时间戳是文件的 mtime,不是执行时刻。 许多调查人员都吃过亏。
  • UserAssist 名称为 ROT13 编码。 解码很容易,但会让初学者疑惑。
  • BAM 被严重低估。 在现代 Windows 上,它是「这个用户运行过这个二进制吗?」最干净的信号之一。

工具

要做高保真离线分析,事实标准是 Eric Zimmerman 的工具集 —— AppCompatCacheParserAmcacheParserPECmdRBCmd 等。Velociraptor 的工件库 适合现场分诊。专门处理 ShimCache 时,可以直接在浏览器中使用 Shimcache Parser,无需安装任何东西。

延伸阅读

相关文章