一、概述
Prefetch
预读取文件,简称pf
文件,是从Windows XP
开始引入,作用是加速系统和应用程序启动过程。因为在系统启动时,大量文件需要读入内存进行处理,这个过程包括在不同时间加载相同文件的不同片段。这样在多次打开和访问文件的时候会浪费大量的时间。预读取文件就是为了解决这个问题的。
pf
文件包含了可执行文件的名称、路径、调用DLL
文件的列表、上次执行时间、运行次数等信息。简单来说,就相当于缓存。在Windows 7
中可以记录128
个条目,Windows 8/10
可记录1024
个条目。
二、pf文件分析
pf
文件存储在%SystemRoot%\Prefetch
文件夹中。
Pf
文件的名称由“大写字母的应用程序名、-
、大写的8位十六进制哈希值、.pf
扩展名”组成。
当用户首次运行某个应用程序的时候,Windows
操作系统的Windows Cache Manager
程序会跟踪记录应用程序启动过程中所需的代码和数据(主要是DLL
),然后由一个名为NTKRNLPA.exe
的核心进程将在内存中跟踪的数据以pf
文件的形式保存下来。当用户下一次运行相同程序时候,系统会首先读取pf
文件将必要的数据和代码加载到内存中,以加快程序的启动过程。
通过WinHex
打开一个pf
文件观察其组成结构:(这里以Windows 7
中的pf
文件举例)
偏移位置:00H:17 00 00 00
:pf文件格式的版本
偏移位置:04H:53 43 43 41
:签名SCCA
偏移位置:08H:11 00 00 00
:未知
偏移位置:0CH:C6 4D 01 00
:pf文件长度
偏移位置:10H:43 00 48 00 52 00 4F 00 4D 00 45 00 2E 00 45 00 58 00 45 00 00
:应用程序的名称,这里是CHROME.EXE
偏移位置:4CH:BA B1 99 D9
:pf
文件的哈希值,与应用程序名称一起组成了pf
文件名
偏移位置:80H:D2 38 72 D9 E0 6B D7 01
:应用程序最后一次运行的时间
偏移位置:98H:0B 00 00 00
:应用程序运行次数
在不同的系统版本中,pf
文件的版本有所不同,在Windows xp/2003
中版本是17(0x11)
,Windows 7
是23(0x17)
,Windows 8
是26(0x1a)
,Windows 10
的版本是30(0x1e)
。
pf
文件信息的格式也因为pf
版本不同而有所不同:如在xp
系统中pf
文件信息中记录应用程序最后一次运行的时间的偏移位置是78H
,记录程序运行次数的偏移位置是90H
。
如果是Windows 10
的pf
文件则是经过压缩的(Microsoft XPRESS Huffman
(LZXPRESS
)压缩算法),文件结构信息如下:
开头的4D 41 4D 04
是MAM
签名,然后是EE 65 04 00
是压缩pf
文件的总长度。
三、Prefetch取证实践
题目来源:Cynet应急响应挑战赛
题目描述:GOT
公司的IT安全主管Aria
注意到一些可疑的SIEM
警报,SIEM
系统识别到公司某些主机上一个名为Scvhost.exe
的可疑文件。但当她准备去检查时,文件已被删除。Aria
怀疑Scvhost.exe
是恶意文件(可能是某种恶意软件)。GOT
的管理层希望尽快确认Scvhost.exe
是否已经在主机上运行过,运行的时间及如何被删除的。
找出可疑文件的最后执行时间和执行次数。
下载题目提供的附件:
通过使用pf
解析工具PECmd
(github.com/EricZimmerm…
根据pf
文件解析的结果进行分析,可以得出该文件最后执行的时间是2020-02-07 21:26
,总共运行的次数是4
次。
根据程序执行的时间线分析:
可能是通过微软Sysinternals
的sdelete.exe
工具进行删除的。
参考资料:
[Windows Prefetch File Format - Forensics Wiki](forensicswiki.xyz/wiki/index.…
Compression - Forensics Wiki:forensicswiki.xyz/wiki/index.…