At DEF CON 2025, a forensics challenge called DeadDrop stumped hundreds of teams for six hours — not because the technique was exotic, but because nobody checked the right place first. The flag was sitting in EXIF metadata on the first image file. Methodology beats intuition every time in forensics CTFs. Here is how to build one that works.
Start With File Identification, Not Assumptions
The single biggest mistake in forensics CTFs is trusting file extensions. A file named report.pdf might be a ZIP archive, a JPEG, or a concatenated mess of both. Your first move on any artifact is to identify what it actually is.
Run file and xxd together. file reads magic bytes and gives you a plain-English type. xxd dumps raw hex so you can see the actual file header with your own eyes.
$ file suspicious.jpg
suspicious.jpg: Zip archive data, at least v2.0 to extract
$ xxd suspicious.jpg | head -4
00000000: 504b 0304 1400 0000 0800 3d6b 5457 1234 PK........=kTW.4
00000010: 5678 9abc def0 1234 5678 1800 0000 1800 Vx.....4Vx......
00000020: 0000 0800 0000 666c 6167 2e74 7874 b4f3 ......flag.txt..
00000030: 2d4a cbcc 4d55 c848 2c2e c94f 4c01 00 -J..MU.H,..OL..
The PK magic bytes at offset zero are the ZIP signature. The extension said JPEG — the bytes say ZIP. Even better, offset 0x26 reveals a filename inside the archive: flag.txt. At this point you rename the file, unzip it, and collect your flag. If it were password-protected, you would pipe it through fcrackzip or john with a rockyou wordlist.
After file, run binwalk (a tool that scans for embedded file signatures and compressed data). It catches polyglot files — artifacts with multiple valid file structures concatenated together — that file misses entirely.
$ binwalk suspicious.jpg
DECIMAL HEXADECIMAL DESCRIPTION
-------------------------------------------------------
0 0x0 Zip archive data
8192 0x2000 JPEG image data, JFIF standard
12400 0x3070 gzip compressed data
Three separate structures in one file. Extract them all with binwalk -e suspicious.jpg and investigate each piece independently.
Memory Dumps: Where Processes Tell Their Secrets
Memory forensics challenges give you a raw .vmem or .mem file and ask you to find something — a password, a process, a network connection. Volatility 3 is the tool (a framework for extracting digital artifacts from volatile memory). The methodology is always the same: profile first, then dig.
Start by listing running processes. Attackers hide in plain sight by naming malware after legitimate system binaries or spawning processes from unexpected parents.
$ vol3 -f ctf_challenge.vmem windows.pstree
PID PPID Name Offset
---- ---- ----------------- ------------------
4 0 System 0x8a0d1040
392 4 smss.exe 0x8a1f2340
480 392 csrss.exe 0x8a234500
556 392 wininit.exe 0x8a267800
612 556 services.exe 0x8a289a00
1872 612 svchost.exe 0x8a3f1200
2944 1872 cmd.exe 0x8a4c3380
3012 2944 powershell.exe 0x8a4d7900
3104 3012 nc.exe 0x8a501200
3104 3012 flag_encoder.exe 0x8a512600
nc.exe (netcat) spawned by powershell.exe which was spawned by cmd.exe under a service host — that parent-child chain is a red flag. flag_encoder.exe is not a Windows binary, so extract it with windows.dumpfiles and examine it. More immediately, pull the command-line arguments to see exactly what that netcat instance was doing.
$ vol3 -f ctf_challenge.vmem windows.cmdline --pid 3104
PID Process Args
---- ----------- ----------------------------------------
3104 nc.exe nc.exe -lvp 4444 -e cmd.exe
3104 flag_encoder flag_encoder.exe --key Sup3rS3cr3t --out C:\Users\jsmith\flag.enc
There is your key: Sup3rS3cr3t. Grab flag.enc from the memory dump using windows.filescan piped through grep flag.enc, dump it with windows.dumpfiles --virtaddr, then decrypt it with whatever algorithm the binary uses. Strings analysis on the extracted flag_encoder.exe will usually reveal the cipher.
Build a Repeatable Checklist, Not a Random Workflow
Speed in forensics CTFs comes from never forgetting a layer. Run this order on every challenge artifact before going deep on any single hypothesis:
- Identify:
file,xxd,binwalk - Metadata:
exiftoolfor images,stringspiped throughgrep -i flagfor everything - Steganography checks:
steghide extract,zstegfor PNGs, LSB analysis in StegSolve - Archives: nested ZIPs, password-protected RARs, hidden streams with
7z l -slt - Memory or disk images: Volatility pstree, cmdline, netscan, then filescan
Document every dead end. In a four-hour CTF window, you will revisit artifacts. Knowing what you already ruled out saves fifteen minutes you cannot afford to lose.
What To Do Now
Open CyberDefenders right now and load the free AfricanFalls memory forensics challenge. Run Volatility 3 against the provided dump, list processes with windows.pstree, and find the suspicious parent-child chain. It takes under thirty minutes and will make the methodology above click in a way that reading never will.
