Windows Prefetch
Execution evidence, timeline reconstruction, and investigative techniques using Windows Prefetch artifacts
Introduction & Background
This document provides a structured forensic reference for Windows Prefetch files — one of the most valuable and reliable execution artifacts available to investigators on Windows systems. It is intended for forensic analysts, security researchers, and individuals conducting endpoint examinations including PC checks in environments such as FiveM, gaming anti-cheat investigations, or enterprise incident response.
Prefetch files are generated automatically by Windows to speed up application loading. As a side effect of this performance optimization, Windows maintains a detailed record of which programs have executed, when they ran, how many times they were launched, and what files they accessed during startup. For a forensic investigator, this creates an exceptionally rich evidentiary source that is often overlooked by attackers attempting to cover their tracks.
Unlike many forensic artifacts that require specific logging configurations to be enabled, Prefetch is active by default on all Windows workstation editions. It requires no administrator configuration, generates artifacts automatically, and persists even after the source executable has been deleted — making it one of the most consistently available sources of execution evidence across all Windows environments.
This reference covers Prefetch behaviour across Windows XP through Windows 11, noting significant differences between versions. The Prefetch file format has changed across major Windows releases; understanding which format applies to the system under investigation is essential for accurate parsing and interpretation.
What Is Prefetch?
Windows Prefetch is a performance feature managed by the SysMain service (formerly SuperFetch in Windows 7 and earlier). When an application launches for the first time, the Windows kernel monitors its activity for the first 10 seconds of execution — specifically, which files and directories the application accesses during that window. This information is recorded in a Prefetch file (.pf) stored in C:\Windows\Prefetch\.
On subsequent launches, Windows uses this cached knowledge to pre-load the required files into memory before the application needs them, reducing perceived load time. The Prefetch file is updated on each execution, maintaining current execution counts and timestamps alongside the file reference data.
- Windows Server editions — Prefetch is disabled by default on Server SKUs; can be manually enabled via registry
- Systems with SSDs (sometimes) — on older Windows 7/8 systems, Windows automatically disabled Prefetch when it detected an SSD; this behaviour changed in Windows 10
- Manually disabled — an attacker with admin rights can disable Prefetch via registry; the absence of any .pf files on a workstation is itself a suspicious indicator
- Prefetch directory cleared — an attacker may delete the contents of
C:\Windows\Prefetch\; the directory still exists but contains no .pf files
Windows Version Differences
The Prefetch file format has changed significantly across Windows versions. Investigators must identify the correct format version before parsing, as tools calibrated for one version will misparse another. The format version is stored in the file header and can be used to confirm the Windows version that generated the artifact.
| Windows Version | Format Version | Max .pf Files | Last Run Times | Compression | Key Notes |
|---|---|---|---|---|---|
| XP / Server 2003 | 17 (0x11) | 128 | 1 | None | Earliest format; single timestamp only; simple structure |
| Vista / Server 2008 | 23 (0x17) | 128 | 1 | None | Expanded file reference table; volume info section added |
| Windows 7 / Server 2008 R2 | 23 (0x17) | 128 | 1 | None | Same format as Vista; SysMain service replaces Superfetch |
| Windows 8 / 8.1 | 26 (0x1A) | 1024 | 8 | None | Major upgrade — 8 last run timestamps; 1024 file limit |
| Windows 10 / 11 | 30 / 31 (0x1E / 0x1F) | 1024 | 8 | MAM (LZXPRESS Huffman) | Files may be compressed; must decompress before parsing; v31 for some editions |
Windows 10 and 11 Prefetch files are often compressed using the MAM (LZXPRESS Huffman) algorithm. The compressed file begins with the signature MAM\x04 rather than the standard Prefetch header. Tools like PECmd automatically handle decompression; raw hex editors will not display meaningful data without first decompressing. Always verify whether a file is compressed before manual analysis.
To confirm Prefetch is enabled on a target system, check the registry key below. A value of 3 enables both application Prefetch and boot Prefetch. A value of 0 disables it entirely.
File Naming Convention
Every Prefetch file follows a precise naming convention that encodes both the executable name and a hash derived from the file's full execution path. Understanding this convention is fundamental to reading Prefetch data correctly — the hash in particular is one of the most forensically significant elements in the filename.
# Prefetch filename format: [EXECUTABLE_NAME]-[PATH_HASH].pf # Real-world examples: POWERSHELL.EXE-C4A49B7C.pf CMD.EXE-4A81B364.pf MIMIKATZ.EXE-7F3A2C11.pf PYTHON.EXE-9B3E12A4.pf # The hash is computed from the FULL PATH of the executable, # NOT from the file's content — same exe from different locations # produces different hashes and separate .pf files: POWERSHELL.EXE-C4A49B7C.pf ← from C:\Windows\System32\WindowsPowerShell\v1.0\ POWERSHELL.EXE-9D2F1A88.pf ← from C:\Temp\ (same binary, different path) POWERSHELL.EXE-3C7B4E22.pf ← from C:\Users\User\AppData\Roaming\ # This means multiple .pf files for the same executable name # indicate the program ran from multiple different locations — a major red flag.
The existence of multiple Prefetch files for the same executable name is one of the most powerful indicators available during an investigation. Consider: a legitimate installation of PowerShell will always run from the same system path, producing a single consistent hash. If an investigation reveals POWERSHELL.EXE-C4A49B7C.pf and POWERSHELL.EXE-9D2F1A88.pf, the second file proves PowerShell was also executed from a different, potentially suspicious location — even if that copy has since been deleted.
- Execution from
C:\Temp\,C:\Users\[user]\Downloads\, orC:\Users\[user]\AppData\is immediately suspicious for system utilities - Two
CMD.EXEhashes may indicate one was a legitimate shell and one was spawned from a malicious parent in a non-standard path - Renamed malware often appears as a familiar executable name (e.g.,
SVCHOST.EXE) but with an unexpected path hash
Internal Data Structure
A Prefetch file is a binary structure divided into a header section and a series of data sections. Understanding what each section contains helps investigators know exactly what can be recovered from a .pf file and what questions it can answer.
┌─────────────────────────────────────────────────────────┐
│ PREFETCH FILE STRUCTURE (Windows 10 / Format v30) │
├─────────────────────────────────────────────────────────┤
│ HEADER (84 bytes) │
│ ├── Signature: "SCCA" (0x53 43 43 41) │
│ ├── Format Version: 0x1E (30) for Win10 │
│ ├── File Size: total size of uncompressed file │
│ ├── Executable Name: UTF-16LE, max 29 chars + null │
│ ├── Path Hash: 4-byte hash of execution path │
│ └── [Section offsets and lengths for each data block] │
├─────────────────────────────────────────────────────────┤
│ SECTION A — File Metrics Array │
│ ├── Start time offset of each file load │
│ ├── Duration of file load │
│ └── Reference into filename strings section │
├─────────────────────────────────────────────────────────┤
│ SECTION B — Trace Chains Array │
│ └── Block chain entries for prefetch data layout │
├─────────────────────────────────────────────────────────┤
│ SECTION C — Filename Strings │
│ └── UTF-16LE full paths of every file/dir accessed │
│ during the first 10 seconds of execution │
├─────────────────────────────────────────────────────────┤
│ SECTION D — Volume Information │
│ ├── Volume device path (e.g. \Device\HarddiskVolume3) │
│ ├── Volume creation timestamp │
│ ├── Volume serial number │
│ └── Directory strings accessed on this volume │
├─────────────────────────────────────────────────────────┤
│ EXECUTION DATA (in header, after base fields) │
│ ├── Last Run Time[0..7]: 8× FILETIME (Win8+) │
│ └── Run Count: number of times executed │
└─────────────────────────────────────────────────────────┘| Field | Location | Investigative Use |
|---|---|---|
| Executable Name | Header offset 0x10 | Name of the program that ran; max 29 UTF-16 characters; truncated if longer |
| Path Hash | Header offset 0x4C | Identifies execution path; compare known-good hash to detect execution from unexpected location |
| Run Count | Header (version-dependent) | Total number of executions recorded; useful for establishing frequency of use |
| Last Run Time[0] | Header (v26+) | Most recent execution timestamp (FILETIME / UTC); most important single timestamp |
| Last Run Time[1-7] | Header (v26+ only) | Seven previous execution timestamps; enables timeline reconstruction across multiple sessions |
| File References (Section C) | Section C | Full paths of every file and directory touched in first 10 seconds; reveals what data the program accessed |
| Volume Serial Number | Section D | Identifies which physical volume the executable ran from; can match to USB devices or specific drives |
| Volume Creation Time | Section D | When the volume was formatted; helps identify external media and correlates with other volume artifacts |
Timestamps & Run Count
Timestamps are stored in Windows FILETIME format — a 64-bit integer counting 100-nanosecond intervals since January 1, 1601 UTC. They are stored in UTC and must be converted to local time for reporting, keeping the investigator's timezone in mind. All parsing tools handle this conversion automatically.
On Windows XP through 7, a single last run timestamp is available. This is updated on each execution, meaning only the most recent run is directly recorded. On Windows 8 and later, up to 8 timestamps are maintained in a rolling queue — the newest execution timestamp is stored in slot [0], pushing older timestamps to slots [1] through [7]. Slot [7] is overwritten when a ninth execution occurs.
# PECmd output for MIMIKATZ.EXE-7F3A2C11.pf (Windows 10 system) Executable Name: MIMIKATZ.EXE Hash: 7F3A2C11 Source Created: 2025-03-14 09:12:44 Run Count: 7 Last Run: 2025-03-18 22:47:03 ← most recent Last Run -1: 2025-03-18 19:31:11 Last Run -2: 2025-03-17 14:05:58 Last Run -3: 2025-03-16 23:12:44 Last Run -4: 2025-03-15 08:47:30 Last Run -5: 2025-03-14 22:19:07 Last Run -6: 2025-03-14 09:12:51 Last Run -7: 2025-03-14 09:12:44 ← oldest recoverable Volume Path: \Device\HarddiskVolume3 Volume Created: 2024-11-02 14:23:01 Volume Serial: A4B2-9C3E
- Run count increments on each execution — a count of 15 for a suspicious tool means it was used repeatedly; count of 1 may indicate testing or a single targeted action
- Run count does NOT reset when .pf file is deleted and recreated — if an attacker deletes the .pf file, a fresh execution creates a new file with count = 1, potentially underrepresenting total activity
- Timestamps only record the last 8 runs — if a tool ran 50 times, only the 8 most recent timestamps survive; the run count of 50 is still preserved, revealing more executions than timestamps show
- Clock skew — always verify system clock accuracy; an attacker who manipulated the system time will produce timestamps that appear inconsistent with other timeline sources
Proving Execution
The most fundamental forensic application of Prefetch is proving that a specific program executed on a specific system. This is particularly valuable when other execution evidence (event logs, AV logs, browser history) has been cleared or was never enabled.
A Prefetch file is created or updated only when the corresponding program runs. There is no mechanism by which a .pf file can appear without actual execution — it cannot be created by simply copying an executable to the system, opening it in a file browser, or scanning it with antivirus. The presence of a Prefetch file is therefore one of the most definitive execution indicators available.
TOOLNAME.EXE-[HASH].pf with a non-zero run count and a specific timestamp directly contradicts this claim. The embedded execution path confirms where the tool was stored when it ran.Deleted Program Evidence
One of the most powerful forensic properties of Prefetch is its persistence after the source executable is deleted. When an attacker removes their tools — whether by deleting files directly, emptying the Recycle Bin, or running cleanup utilities — the corresponding Prefetch files typically remain untouched in C:\Windows\Prefetch\. This is because most cleanup routines do not specifically target the Prefetch directory.
- The .pf file itself — name, hash, run count, all timestamps
- The full execution path of the deleted executable, embedded in the file header
- The list of files accessed during the first 10 seconds — may include documents opened, DLLs loaded, or configuration files touched
- The volume serial number from which the deleted program ran — useful for USB attribution
When a Prefetch file indicates execution of a program that is no longer present on disk, investigators should cross-reference with complementary artifacts to build a complete picture:
| Complementary Artifact | What It Adds |
|---|---|
| Recycle Bin ($I files) | If the file was deleted via Recycle Bin, $I files record the original path, file size, and deletion timestamp |
| MFT (Master File Table) | Even after deletion, MFT records may persist with file metadata including MAC timestamps and file size |
| LNK files (Shortcuts) | If the user created a shortcut to the tool, the .lnk file persists and contains path, timestamps, and volume information |
| ShimCache / AmCache | Records execution of the binary with SHA1 hash in AmCache — even after deletion, the hash may identify the exact file |
| Windows Event Logs (EID 4688) | If process auditing was enabled, the process creation event may record the full command line of the deleted tool |
| Thumbnail Cache | If the deleted file had a thumbnail generated (images, certain documents), the cached thumbnail may persist in %APPDATA%\Microsoft\Windows\Explorer\ |
Execution Path Analysis
The execution path embedded in each Prefetch file is one of its most forensically revealing elements. Legitimate system programs consistently run from consistent, known paths. Any deviation from expected paths is immediately suspicious and warrants investigation.
# LEGITIMATE paths for common system binaries: C:\Windows\System32\cmd.exe C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe C:\Windows\SysWOW64\WindowsPowerShell\v1.0\powershell.exe C:\Windows\System32\net.exe # SUSPICIOUS paths — same binary names, wrong locations: C:\Temp\powershell.exe ← attacker-dropped copy C:\Users\User\AppData\Roaming\cmd.exe ← masquerading C:\Users\User\Downloads\update.exe ← user-downloaded payload C:\ProgramData\Microsoft\svchost.exe ← svchost outside System32 C:\Windows\Temp\wscript.exe ← copy to evade path monitoring # TOOL NAMES that should NEVER appear in Prefetch on a clean system: MIMIKATZ.EXE ← credential dumping PROCDUMP.EXE ← process memory dumping (legitimate but abused) PSEXEC.EXE ← remote execution (legitimate but frequently abused) WCEWORLD.EXE ← Windows Credential Editor WINCRED.EXE ← credential tool COBALTRIKE*.EXE ← C2 framework METERPRETER.EXE ← Metasploit payload NMAP.EXE ← network scanning NC.EXE ← netcat LAZAGNE.EXE ← credential harvesting
For known system binaries, investigators can compute the expected Prefetch hash for the standard installation path and compare it against hashes observed on the target system. A mismatch for binaries like POWERSHELL.EXE, CMD.EXE, or SVCHOST.EXE proves execution from a non-standard location — a reliable indicator of masquerading or attacker tool staging.
Accessed Files & Volume Information
Section C of each Prefetch file contains the full paths of every file and directory the executable accessed during the first 10 seconds of its run. This is often the most information-dense section for forensic investigation — it reveals not just that a program ran, but what it did when it ran.
- DLLs loaded — reveals which libraries a tool depends on; unusual DLLs (keyloggers, network capture libraries) are immediately suspicious
- Configuration files read — credential dumpers often read SAM, SYSTEM, SECURITY hive files; these references appear in Section C
- Output files written — if a tool wrote output to disk in the first 10 seconds, the path appears in file references
- Network share access — UNC paths accessed during execution reveal lateral movement targets
- Staging directories — documents or archives created in temp directories during the 10-second window are recorded
# File references from MIMIKATZ.EXE-7F3A2C11.pf (Section C) # These are files/directories accessed in first 10 seconds of execution: \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\LSASS.EXE ← LSASS access \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\NTDLL.DLL \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\KERNEL32.DLL \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\WDIGEST.DLL ← credential provider \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\KERBEROS.DLL ← kerberos module \DEVICE\HARDDISKVOLUME3\WINDOWS\SYSTEM32\MSV1_0.DLL ← NTLM auth module \DEVICE\HARDDISKVOLUME3\USERS\ATTACKER\DESKTOP\CREDS.TXT ← output file # Volume information (Section D): Volume Path: \Device\HarddiskVolume3 Serial Number: A4B2-9C3E Created: 2024-11-02 14:23:01
Artifact Locations & Collection
Prefetch artifacts are primarily located in a single directory but must be collected carefully to preserve all associated metadata. Always work from a forensic copy — never parse Prefetch files directly on a live system without first imaging them, as some tools may modify file access timestamps.
| Priority | Artifact | Location | Collection Method |
|---|---|---|---|
| P1 | All .pf files | C:\Windows\Prefetch\ | Copy entire directory; preserve NTFS timestamps with robocopy /copyall or forensic imager |
| P1 | Prefetch file NTFS timestamps | MFT records for each .pf file | NTFS $Created time = first execution of that program; $Modified = most recent execution |
| P2 | Registry EnablePrefetcher | HKLM\SYSTEM\...\PrefetchParameters | Confirms Prefetch was enabled; value of 0 with no .pf files may indicate deliberate disabling |
| P2 | Layout.ini | C:\Windows\Prefetch\Layout.ini | Contains application execution order; supplements .pf file analysis for boot and login sequences |
| P3 | Volume Shadow Copies | VSS snapshots | Previous versions of .pf files may exist in VSS; recovers deleted .pf files or earlier run counts |
| P3 | Memory (live systems) | RAM | Prefetch data may be in memory before being flushed to disk; RAM capture can recover recent executions |
The NTFS $Created timestamp on a .pf file records the first time that executable ever ran on this system — because the Prefetch file is created on first execution. The $Modified timestamp reflects the most recent execution. These NTFS timestamps are separate from, and complementary to, the execution timestamps embedded inside the .pf file itself. Both sets of timestamps should be collected and compared.
Parsing & Analysis
Prefetch files are binary structures that require dedicated parsing tools. The following workflows cover the most common analysis scenarios from a basic triage through to a full batch investigation with timeline export.
# PECmd by Eric Zimmerman — most comprehensive Prefetch parser # https://ericzimmerman.github.io # Parse a single .pf file (detailed output) PECmd.exe -f "C:\Windows\Prefetch\MIMIKATZ.EXE-7F3A2C11.pf" # Parse entire Prefetch directory — output to CSV for timeline analysis PECmd.exe -d "C:\Windows\Prefetch" --csv "C:\Output" --csvf prefetch_results.csv # Parse offline (from forensic copy) with quiet output PECmd.exe -d "E:\ForensicCopy\Windows\Prefetch" --csv "C:\Output" -q # Include Section C file references in output (verbose — large files) PECmd.exe -d "C:\Windows\Prefetch" --csv "C:\Output" --json "C:\Output" # Sort output by last run time (newest first) — useful for triage PECmd.exe -d "C:\Windows\Prefetch" --csv "C:\Output" --csvf triage.csv # Then in Timeline Explorer: sort by LastRun descending # Key fields in CSV output: # SourceFilename ExecutableName Hash Size RunCount # LastRun LastRun-1 ... LastRun-7 SourceCreated SourceModified # Volume0Name Volume0Serial Volume0Created
# Quick manual header check — confirm signature and format version import struct with open('MIMIKATZ.EXE-7F3A2C11.pf', 'rb') as f: data = f.read() # Check for MAM compression (Windows 10/11) if data[:3] == b'MAM': print("File is MAM-compressed — decompress first") else: sig = data[0:4] # should be b'SCCA' version = struct.unpack('<I', data[4:8])[0] # format version filesize= struct.unpack('<I', data[8:12])[0] # uncompressed size exe_name= data[0x10:0x4A].decode('utf-16-le').rstrip('\x00') path_hash = hex(struct.unpack('<I', data[0x4C:0x50])[0]) print(f"Signature: {sig}") # b'SCCA' print(f"Version: {version}") # 17/23/26/30/31 print(f"Exe Name: {exe_name}") print(f"Path Hash: {path_hash}")
Indicators of Compromise
The following indicators, derived from Prefetch analysis, represent reliable signals of malicious activity. Each can be identified through standard Prefetch parsing without additional tooling.
| Indicator | Severity | Detection Method | Notes |
|---|---|---|---|
| Prefetch file for known offensive tool (mimikatz, meterpreter, laZagne, etc.) | CRITICAL | Filename match against known-bad list | Confirms tool ran; timestamp shows when; run count shows frequency |
| System binary .pf file with unexpected path hash (e.g. second POWERSHELL.EXE-*.pf) | CRITICAL | Multiple .pf files with same executable name | Proves execution from a non-standard path; often indicates attacker-dropped copy |
| Executable ran from Temp, Downloads, AppData, or ProgramData | HIGH | Execution path in .pf header | System tools should never run from user-writable paths; investigate path and parent process |
| Prefetch file present for executable no longer on disk | HIGH | Compare .pf list against live filesystem | Tool was used and deleted; file references may reveal what it accessed |
| High run count on a suspicious or unusual executable | HIGH | RunCount field | Run count of 20+ on an unknown tool indicates sustained use, not a one-time accident |
| Execution timestamps correlated across multiple offensive tools within short window | CRITICAL | Cross-tool timestamp comparison | Tools running in sequence (e.g. nmap → psexec → mimikatz) reconstructs attack chain |
| Prefetch directory empty or missing on a workstation | HIGH | Directory inspection | Prefetch is on by default on workstations; empty directory suggests deliberate clearing |
| EnablePrefetcher registry key set to 0 | HIGH | Registry check | Prefetch intentionally disabled; often done to prevent execution logging |
| Section C references to SAM, SECURITY, or NTDS.dit | CRITICAL | File references in .pf Section C | Access to credential stores; confirms credential dumping activity even without log data |
| Section C references to UNC paths or network shares | HIGH | File references in .pf Section C | May indicate lateral movement staging; attacker connecting to remote shares during tool execution |
| Volume serial in Section D matches known USB device | MEDIUM | Volume serial number in Section D | Correlate with USB device logs (Event ID 20001, setupapi.log) to identify the specific device |
| .pf NTFS creation time inconsistent with execution timestamps inside file | MEDIUM | Compare NTFS $Created vs internal timestamps | Possible timestamp manipulation; investigate with additional timeline sources |
Anti-Forensics Against Prefetch
Sophisticated attackers are aware of Prefetch and may take steps to defeat it. Understanding these counter-techniques helps investigators recognize when Prefetch has been tampered with and how to compensate using other artifact sources.
EnablePrefetcher = 0 in the registry prevents new .pf files from being created. This requires admin rights. The absence of any Prefetch files on a workstation is itself an indicator, and the registry key modification may appear in security logs. Existing .pf files from before disabling are preserved.C:\Windows\Prefetch\ removes existing execution evidence. Requires admin rights. The deletion event may appear in Windows event logs, and VSS snapshots may contain earlier copies. After clearing, new .pf files begin accumulating immediately — gaps in the timeline become obvious.Tools Reference
| Tool | Type | Primary Use | Source |
|---|---|---|---|
| PECmd | CLI Parser | Most comprehensive Prefetch parser; handles all versions including Win10/11 MAM compression; CSV export for timeline analysis | Free — ericzimmerman.github.io |
| Timeline Explorer | Viewer / Correlator | Load PECmd CSV output alongside other artifact CSVs; sort, filter, and correlate execution events across timeline | Free — ericzimmerman.github.io |
| WinPrefetchView | GUI Parser | Lightweight GUI for quick Prefetch review; less detail than PECmd but faster for spot-checks on live systems | Free — nirsoft.net |
| KAPE | Artifact Collector | Automated collection of Prefetch directory, registry keys, and complementary artifacts in a single acquisition pass | Free — ericzimmerman.github.io |
| Autopsy | Full Forensic Suite | Parses Prefetch as part of full disk image analysis; integrates with timeline view and other artifact modules | Open source — sleuthkit.org |
| Volatility 3 | Memory Analysis | windows.prefetch plugin extracts Prefetch data from RAM dumps; useful for recently executed programs before disk flush | Open source — volatilityfoundation.org |
| CyberChef | Data Analysis | LZXPRESS Huffman decompression of MAM-compressed Prefetch files for manual hex analysis; also FILETIME conversion | Free — gchq.github.io/CyberChef |
| python-prefetch | Python Library | Open source Python library for programmatic Prefetch parsing; useful for custom scripts and bulk analysis automation | Open source — GitHub: PoorBillionaire |
| RegRipper | Registry Parser | Parse PrefetchParameters registry key to confirm enabled/disabled status; includes prefetch.pl plugin | Open source — GitHub: keydet89 |
| FTK Imager | Acquisition | Collect Prefetch directory from live system or forensic image while preserving NTFS timestamps and metadata | Free — exterro.com |
Conclusion
Windows Prefetch is one of the most reliably available and consistently informative execution artifacts in Windows forensics. Generated automatically without any administrator configuration, it records execution evidence that persists after log clearing, executable deletion, and many common anti-forensics operations. For investigators working in environments where event logging was never configured, or where an attacker has cleared logs, Prefetch may be the primary — or only — source of execution timeline data.
The combination of execution timestamps (up to 8 per program), run counts, execution paths, and Section C file references gives Prefetch a depth that few single artifacts can match. A single .pf file can confirm not just that a tool ran, but when it ran, how many times, from what location, what credential stores it accessed, and whether it wrote output to disk — all from a file the attacker likely did not think to remove.
Effective Prefetch investigation requires attention to version differences across Windows editions, awareness of the anti-forensic techniques attackers use against it, and systematic correlation with complementary artifacts — ShimCache, AmCache, LNK files, MFT records, and Windows event logs — to build the most complete possible picture of execution activity on a system.
In any PC check or endpoint investigation, Prefetch should be collected in the first pass alongside event logs. Use PECmd to parse the entire Prefetch directory, export to CSV, and sort by LastRun descending for immediate triage. Any .pf files for offensive tools, any duplicate executable name hashes, or any suspicious execution paths should be escalated immediately. Cross-reference timestamps against Windows Security log (EID 4688) and PowerShell Operational log for the same time windows to build corroborating evidence. This technique set maps to MITRE ATT&CK T1083 (File and Directory Discovery) and supports detection of T1059 (Command and Scripting Interpreter) and T1055 (Process Injection) via correlated artifact analysis.