ShimCache 与 Prefetch:哪个能证明程序运行过?

约 1 分钟阅读

TL;DR. Prefetch 是真正的执行证据,带运行次数和运行时间。ShimCache 只能证明文件存在过并被检查过。如果你要回答「它运行了吗,什么时候?」,先看 Prefetch;如果 Prefetch 被禁用或清除,ShimCache 就成为关于存在的后备证人。

ShimCache 与 Prefetch 经常被拿来比较,因为两者都会暴露「Windows 主机上的程序」。但它们不是同一类证据,把它们当作可互换会得出错误结论。下面是直接对比。

概览

ShimCachePrefetch
位置HKLM\SYSTEM\…\AppCompatCacheC:\Windows\Prefetch\*.pf
它证明什么文件存在过 / 被检查过文件被执行过
运行计数
执行时间戳无(仅文件 mtime)有 —— 最近 8 次运行时间
引用文件有 —— 加载的 DLL、数据文件
写入时机仅干净关机时执行后约 10 秒内
服务器默认启用常被禁用
容量最多 1,024 条1,024 个 .pf(Win8+)

Prefetch 占优势的地方

Prefetch 是更强的执行工件,没有之一。每个 .pf 文件给出最后运行时间(Windows 8+ 最多八次)、总运行计数,以及进程加载的文件列表。这足以断言「该二进制在这些时间执行过」——这是 ShimCache 永远做不到的,因为它唯一的时间戳是文件的最后修改时间,而不是执行时间

ShimCache 占优势的地方

Prefetch 有一个致命弱点:它在服务器、为 SSD 优化的镜像上,以及被攻击者(EnablePrefetcher = 0频繁禁用。清理工具也会主动删除它。相比之下,ShimCache 始终开启,且足够敏感,能记录一个在运行之前就被投放并删除的二进制。当 Prefetch 为空时,ShimCache 往往仍能回答**「这个文件是否曾接触过这台主机?」**——该推断能推到多远,见ShimCache 能否证明程序被执行过?

如何配合使用

  • 两者都有、路径吻合: 强力执行证据。用 Prefetch 的运行时间作为事件时间线;ShimCache 的 mtime 仅用来锚定文件身份。
  • 只有 Prefetch: 执行已被证明;ShimCache 可能只是还没落盘(仅在关机时写入——见ShimCache 存储在哪里)。
  • 只有 ShimCache: 文件存在过并被检查过。没有佐证不要断言执行——拉取 AmCache、BAM 和事件日志(完整对照表见此)。
  • 两者都无,但怀疑执行: 寻找反取证。Prefetch 被删除加上 ShimCache 缺少落盘,本身就是一个发现,详见ShimCache 反取证

要在不安装任何东西的情况下查看 ShimCache 一侧,把 SYSTEM 蜂巢拖进 Shimcache Parser——完全在浏览器中完成。

延伸阅读

相关文章