Reference card for Windows forensics: where to find evidence of execution, staging and exfiltration. Based on the classic "kill chain" order: Execution → Persistence → Access → Collection → Exfiltration.
How to use this cheatsheet
Every DFIR CTF (and every real incident) follows roughly the same questions:
- What was executed? (execution artifacts)
- When? (timestamps, often FILETIME)
- Which files/folders were touched? (access/enumeration artifacts)
- Where was data collected? (staging)
- What went out? (exfiltration)
When you get stuck, work down this list per category, instead of grepping blindly.
1. Execution Artifacts — "what was executed?"
| Artifact | Location | Hive | What it shows |
|---|---|---|---|
| UserAssist | Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count |
NTUSER.DAT | GUI-launched programs (double-click via Explorer), run count + last-executed FILETIME. Names are ROT13-encoded. |
| Amcache | Windows\AppCompat\Programs\Amcache.hve |
own hive | Nearly every executed executable, including SHA1 hash and first-execution timestamp. Often survives longer than Prefetch. |
| ShimCache / AppCompatCache | SYSTEM\CurrentControlSet\Control\Session Manager\AppCompatCache |
SYSTEM | Execution traces, less reliable on timestamps than Amcache but survives reboots well. |
| Prefetch | Windows\Prefetch\*.pf |
files, not registry | Last 8 execution times + run count, per executable. Only present if prefetching is on (often off on servers). |
| RunMRU | Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU |
NTUSER.DAT | Commands typed in Start → Run. |
| BAM/DAM | SYSTEM\CurrentControlSet\Services\bam\State\UserSettings\{SID} |
SYSTEM | Background Activity Moderator — recent executions with full path, per user SID. |
UserAssist GUID cheat:
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA}→ EXE files launched directly{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F}→ linked files/shortcuts (.lnk)
Decoding FILETIME (Python):
import struct, datetime
def filetime_to_dt(hexstr):
raw = bytes.fromhex(hexstr)
ft = struct.unpack("<Q", raw)[0]
return datetime.datetime(1601,1,1) + datetime.timedelta(microseconds=ft/10)
print(filetime_to_dt("60d32c832447dc01"))
2. Access & Enumeration Artifacts — "what was viewed/opened?"
| Artifact | Location | Hive | What it shows |
|---|---|---|---|
| ShellBags | Local Settings\Software\Microsoft\Windows\Shell\BagMRU (+ Bags) |
UsrClass.dat (not NTUSER.DAT!) | Every folder ever opened in Explorer, incl. folders inside archives and deleted folders. Gold for archive enumeration. |
| RecentDocs | Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs |
NTUSER.DAT | Recently opened files via Explorer/associations. Often a lot of system noise (Settings shortcuts). |
| ComDlg32 OpenSavePidlMRU | Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\OpenSavePidlMRU |
NTUSER.DAT | Paths visited via standard open/save dialogs, per file extension. |
| ComDlg32 LastVisitedPidlMRU | ...\ComDlg32\LastVisitedPidlMRU |
NTUSER.DAT | Last folder visited per application (links exe to path). |
| TypedPaths | Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths |
NTUSER.DAT | Manually typed paths in the Explorer address bar. |
| WordWheelQuery | Software\Microsoft\Windows\CurrentVersion\Explorer\WordWheelQuery |
NTUSER.DAT | Search queries typed in the Explorer search bar. |
| Jump Lists | AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\*.automaticDestinations-ms |
files | Recent files per application, with timestamps. |
⚠️ Watch out: ShellBags live in UsrClass.dat, not in NTUSER.DAT. If you were only given NTUSER.DAT hives in a CTF, this artifact isn't available and you have to fall back to RecentDocs / ComDlg32 / WordWheelQuery.
3. Tool-specific traces (7-Zip, WinRAR, etc.)
| Tool | Location | What it shows |
|---|---|---|
| 7-Zip (GUI, installed) | Software\7-Zip\FM\PanelPath0 / PanelPath1 |
Last opened paths in the 7-Zip file manager (two panels). |
| 7-Zip ArcHistory | Software\7-Zip\ArcHistory |
MRU list of opened/created archive files. |
| 7-Zip Compression/Extraction | Software\7-Zip\Compression / Software\7-Zip\Extraction |
Last used compression/extraction paths. |
| WinRAR | Software\WinRAR\ArcHistory |
Same idea as 7-Zip's ArcHistory. |
⚠️ Important pitfall: a portable executable (e.g. 7za.exe command-line, run without installation) often writes nothing to these registry keys — no GUI dialog = no MRU entry. If you find nothing here despite clear archive use elsewhere (UserAssist shows e.g. 7z.exe as executed), the evidence is probably in:
- UserAssist (execution, no path details)
- Prefetch (which files were touched during execution — via strings in the .pf file)
- Filesystem timestamps of the archive itself ($MFT, $LogFile)
4. Staging & Exfiltration — "collected where, what went out?"
No fixed registry key for this — you reconstruct it from a combination of:
- ShellBags / RecentDocs → which folder was repeatedly visited around the time of interest (a staging folder often has a lot of activity in a short window)
- $MFT / $LogFile (NTFS metadata, outside the registry) → file creation/move timestamps
- UserAssist for the archiving tool → when the archive was created
- Network logs / firewall logs / browser history (if available) → where the archive went
5. Practical workflow (Mac/Linux, Python-based)
# Setup — use a pyenv/conda venv, not system Python
python3 -m venv ~/ctf-venv
source ~/ctf-venv/bin/activate
pip install regipy
# Dump a full hive
regipy-dump NTUSER.DAT -o dump.json
# Specific plugin (auto-decodes UserAssist ROT13)
regipy-plugins-run -p userassist_plugin NTUSER.DAT -o ua.json
# Targeted greps — work down the categories above
grep -i "recentdocs" dump.json
grep -i "typedpaths" dump.json
grep -i "wordwheelquery" dump.json
grep -i "pidlmru" dump.json
grep -i "7.zip\|archhistory\|panelpath" dump.json
RegRipper (Perl) as an alternative/supplement:
perl rip.pl -r NTUSER.DAT -p userassist
perl rip.pl -r NTUSER.DAT -p 7zip
perl rip.pl -l # list of available plugins
6. External references
- SANS "Windows Forensic Analysis" poster/cheatsheet — the industry standard, print it out or keep it handy as a PDF.
- SANS "Registry Quick Find Chart"
- Eric Zimmerman's tools (Registry Explorer, RECmd, AppCompatCacheParser, PECmd) — Windows-only but the GUI is invaluable as a reference for which keys sit where.
Notes added during Cyber Apocalypse 2026 — CROWQUILL forensics challenge (project 1).