首页/安全/取证与溯源速查/Prefetch 运行时间与文件名线索
Windows 取证55 条

Prefetch 运行时间与文件名线索

Prefetch 的 .pf 文件名带可执行文件名哈希,内部保存运行次数与多个最近运行时间,是程序执行时间线的直接来源。

取证与溯源速查安全更新于 2026-10-13

Prefetch 运行时间线索

Prefetch 是 Windows 为加快程序启动而维护的缓存:每个被运行过的可执行文件对应一个 .pf 文件,文件名里带可执行文件名与一段路径哈希,文件内部保存运行次数与最近若干次运行时刻。它是程序执行时间线里最直接的来源之一,取值要以专用工具的解析结果为准,而不是靠目录时间猜。

基本信息

位置C:\Windows\Prefetch\ 下的 *.pf 文件
命名规律<可执行文件名>-<路径哈希>.pf
内部信息运行次数、最近若干次运行时刻、加载模块与涉及目录
解析工具PECmd.exe(Eric Zimmerman)批量导出为 CSV
存在条件首次运行后才生成;被清理或系统策略禁用时不存在

典型使用场景

  • 确认某个程序是否真的在该主机上被执行过
  • 取回程序最近几次运行时刻,搭建执行时间线的骨架
  • 从引用路径推断程序运行时的目录与被访问的文件
  • 验证样本只是被下载、尚未执行的说法
  • 与缓存执行痕迹、用户活动记录互证执行事实

采集与解析

采集与解析
Get-ChildItem C:\Windows\Prefetch -Filter *.pf | Measure-Object      # 先统计 .pf 数量
Get-ChildItem C:\Windows\Prefetch -Filter *.pf | Sort-Object LastWriteTime | Select-Object -Last 10 Name, LastWriteTime
PECmd.exe -d C:\Windows\Prefetch --csv C:\out\prefetch              # 批量解析为 CSV
PECmd.exe -f C:\Windows\Prefetch\<名称>.pf                           # 解析单个文件
Import-Csv C:\out\prefetch\*.csv | Sort-Object 'Last Run' | Select-Object -Last 10   # 按运行时间排序

关键字段读法

字段含义解读要点
Executable Name被执行的可执行文件名与文件名中的名称应一致
Run Count累计运行次数部分版本存在计数上限,接近上限时谨慎解读
Last Run Times最近多次运行时刻通常保存若干条,按时间排列
Volume Information运行时所在卷与卷信息推断程序从哪个卷启动
Directories Referenced运行期间访问过的目录用于关联被读取的文件
并非所有执行过的程序都有对应的 Prefetch:首次运行才会生成,被清理过或位于网络位置的可执行文件可能没有条目;服务器系统在默认策略下常禁用该功能,缺少条目不能直接证明程序未执行。
目录条目的写入时间只是该文件被更新的时刻,不能等同于最近一次运行时间,也不能反映运行次数;结论要建立在大写解析工具从文件内部读出的字段上,两者不一致时以解析结果为准。

易错点

  • 把 .pf 文件的目录修改时间当作最后一次运行时刻写进结论
  • 认为所有执行过的程序都会留下 Prefetch,忽略未生成与被清理的情况
  • 在禁用该功能的系统上找不到条目就断定程序未执行
  • 只看运行次数不看最近的运行时刻,漏掉时间线上的关键点

数据来源与参考

  • PECmd 官方文档(Eric Zimmerman)
  • Microsoft Learn(Prefetch 概述)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌