TL;DR. 按优先级阅读:Prefetch(启用时最强)→ BAM/DAM(Win10+ 每用户最近执行,严重被低估)→ AmCache(SHA-1 标识)→ ShimCache(文件存在)→ UserAssist(仅资源管理器发起的启动,ROT13 编码)。请相互印证;任何单一证据都不足以独立结案。
没有任何一类 Windows 证据能完美回答「这个程序是否运行过、何时运行、由谁运行?」。调查人员需要在多个证据间相互印证。本文给出实用的短列表,并说明每一项能告诉你什么、不能告诉你什么。
短列表
| 证据 | 位置 | 记录内容 | 对「执行」的可信度 |
|---|---|---|---|
| Prefetch | C:\Windows\Prefetch\*.pf | 路径、运行次数、最近 8 次执行、加载的文件 | 极高 —— 仅在进程启动时写入 |
| AmCache | C:\Windows\AppCompat\Programs\Amcache.hve | 路径、SHA-1、大小、发布者、安装与首次运行时间 | 高 —— 含明确执行时间戳 |
| ShimCache | SYSTEM 配置单元 …\AppCompatCache | 路径、文件 mtime | 中等 —— 证明存在,常常(但不总是)暗示执行 |
| UserAssist | NTUSER.DAT …\UserAssist | 每个用户经资源管理器启动的 GUI 程序 | 高 —— 仅限用户启动;名称为 ROT13 编码 |
| BAM / DAM | SYSTEM 配置单元 …\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 的工具集 —— AppCompatCacheParser、AmcacheParser、PECmd、RBCmd 等。Velociraptor 的工件库 适合现场分诊。专门处理 ShimCache 时,可以直接在浏览器中使用 Shimcache Parser,无需安装任何东西。
延伸阅读
- AppCompatCacheParser (Zimmerman) —— 参考 ShimCache 解析器。
- Velociraptor 的 ShimCache 工件 —— 在线系统采集逻辑。
- ShimCache & AmCache forensic analysis (Mehrnoush) —— 基于案例的详细分析。