Short answer: Anti-forensic techniques on NTFS aim to hide what a file is, when it was touched, or that it ever existed. None of the common techniques are clean — each one leaves a different artifact in $MFT, $UsnJrnl, $LogFile, or VSS snapshots. This post catalogs the techniques and the giveaways that defeat them.
Timestomping
The classic. Tools like SetMACE, timestomp, and built-in PowerShell one-liners call SetFileTime or write $STANDARD_INFORMATION directly to make a file look older or newer than it is.
What it leaves behind:
$STANDARD_INFORMATIONand$FILE_NAMEtimestamps diverge —SetFileTimeonly updates SI. See the four MFT timestamps.- Sub-second precision is often zeroed. Natural Windows activity leaves fractional seconds; many timestomping tools round to the second.
- A
$STANDARD_INFORMATIONcreated time older than$FILE_NAMEcreated is impossible — files cannot exist before they are named.
How to spot it: Parse $MFT and flag every record where SI and FN disagree by more than a few seconds, or where SI predates FN at all. The browser parser on this site exposes both timestamp sets per record.
Alternate data streams (ADS)
NTFS lets a file carry multiple $DATA attributes. The unnamed one is the "real" file; named ones (file.txt:hidden) are alternate data streams — invisible to Explorer, invisible to dir, and routinely used to stash payloads.
What it leaves behind:
- An ADS is just another
$DATAattribute in the same MFT record. Every parser that walks the attribute stream lists them. - The
Zone.IdentifierADS, added automatically by browsers, often survives on downloaded payloads — proving the file came from the internet and which security zone.
How to spot it: dir /R from cmd.exe lists ADS on a live system. streams.exe from Sysinternals enumerates them. The MFT parser shows them inline with the record. See alternate data streams.
Wiping a single file
Sophisticated wipers overwrite the file's clusters and then delete the MFT record. Less sophisticated ones (del /f, SDelete on default settings) overwrite the data but leave the MFT record in place.
What it leaves behind:
- A deleted MFT record with intact
$FILE_NAMEand$STANDARD_INFORMATION— the name and timestamps survive even if the data is gone. See what survives when you delete a file on NTFS. - Often a
$UsnJrnlrecord for the original creation and the deletion. $LogFileentries for the metadata operations.- A VSS snapshot from before the wipe still containing the full file.
How to spot it: Even a "wiped" file leaves a name, a path, and timestamps in $MFT. Combine with VSS snapshots (snapshots and $MFT) and you often recover the content too.
Wiping the MFT record itself
A more aggressive attacker writes a new file to deliberately reuse the slot, overwriting the deleted record. This succeeds — the slot is gone — but the deletion is itself an event.
What it leaves behind:
- The sequence number of the record incremented. A reference from
$UsnJrnlor$LogFileto the old sequence is now stale and tells you the slot has been reused since. $UsnJrnlstill records both the original creation/deletion and the new file's creation, including a different parent directory if the new file lives elsewhere.- Snapshot copies of
$MFTfrom before the reuse still hold the original record.
How to spot it: Cross-reference $UsnJrnl against the current $MFT. A $UsnJrnl entry whose target record's sequence number is now higher than the entry's reference indicates a reuse.
$UsnJrnl truncation
The change journal is finite. An attacker who runs noisy operations (many file writes) can force $UsnJrnl to wrap, evicting older entries.
What it leaves behind:
- A
$UsnJrnlthat starts later than its$Maxparameter would suggest is suspicious. $LogFiledoes not rotate the same way and often still records the operations that pushed$UsnJrnlout.- The noisy operations themselves leave thousands of MFT records — they are visible.
$UsnJrnl deletion
fsutil usn deletejournal /D C: removes the journal entirely. Recreated journals start with a fresh USN counter.
What it leaves behind:
- A
$UsnJrnlwhose first USN is suspiciously high, or whose first record is hours or minutes before the incident. - An
$Extenddirectory entry whose MFT record sequence number has incremented. - VSS snapshots from before the deletion still containing the full journal.
Renaming to a system file
Hiding malware as svchost.exe, lsass.exe, or another familiar Windows binary. Not technically MFT anti-forensics, but it is the most common analyst-fooling trick in the wild.
What it leaves behind:
- A
$FILE_NAMEwhose parent directory reference is notC:\Windows\System32. - A
$DATAattribute whose size and entropy do not match the legitimate binary's distribution. - A
Zone.IdentifierADS from the download.
Ransomware MFT scribbles
Some ransomware families (Petya, NotPetya, and a handful since) deliberately corrupt $MFT to make the volume unmountable. This is destructive rather than evasive.
What it leaves behind:
BAADrecords whereFILEshould be.- An unbootable system, but a forensically valuable image — signature-scan the volume for
FILErecords and most of the table is still readable.
See ransomware patterns in MFT for the details.
The general principle
Every anti-forensic technique on NTFS leaves some artifact. The reason is structural: $MFT, $UsnJrnl, $LogFile, and VSS each record a different view of the same events, and modifying one of them is itself an event that the others record. Triage that walks all four together is hard to defeat.