M4cCrypt0
back to overview

DFIR Cheatsheet — Windows Registry & Filesystem Artifacts

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:

  1. What was executed? (execution artifacts)
  2. When? (timestamps, often FILETIME)
  3. Which files/folders were touched? (access/enumeration artifacts)
  4. Where was data collected? (staging)
  5. 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:

Decoding FILETIME (Python):

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:


4. Staging & Exfiltration — "collected where, what went out?"

No fixed registry key for this — you reconstruct it from a combination of:


5. Practical workflow (Mac/Linux, Python-based)

bash
# 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:

bash
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


Notes added during Cyber Apocalypse 2026 — CROWQUILL forensics challenge (project 1).