Volatility 3 Command Cheat Sheet for Incident Response

Volatility 3 Command Cheat Sheet
Volatility 3 Command Cheat Sheet
By HOC Team  |  Updated: October 2026  |  Read time: ~17 min

Memory forensics is the crown jewel of incident response. While disk forensics tells you what happened in the past, memory analysis reveals what is happening right now—exposing decrypted passwords, injected malware, network connections, and unlinked processes that never touch the hard drive. At the center of this discipline is Volatility, the industry-standard open-source framework.

With the release of Volatility 3, the framework underwent a massive architectural overhaul. If you are still relying on old Volatility 2 tutorials, you will be lost. This comprehensive memory forensics volatility 3 guide will bridge that gap, providing incident responders with the exact syntax, plugin cheat sheet, and advanced hunting techniques required to analyze modern Windows and Linux memory dumps.

Also Read: Digital Forensics Tutorial: Evidence Collection and Analysis Guide (2026)

📊 Why Memory Forensics is Non-Negotiable in 2026 Fileless malware, living-off-the-land (LotL) binaries, and advanced rootkits operate entirely in RAM. According to the 2026 Verizon DBIR, over 40% of breaches involve memory-only payloads or credential dumping. Without memory forensics, responders are blind to the attacker's true capabilities and lateral movement.
1. The Volatility 3 Paradigm Shift

Before diving into commands, it is critical to understand how Volatility 3 differs from its predecessor. If you are transitioning from Volatility 2, the old habits must be unlearned.

💡
Volatility 2 vs. Volatility 3
  • No More Profiles: Volatility 2 required you to manually identify and specify an OS profile (e.g., Win10x64_19041). Volatility 3 automatically identifies the OS version and loads the correct symbol table (ISF - Intermediate Symbol Format) on the fly.
  • Python 3 Native: Volatility 3 is built exclusively for Python 3. The old vol.py script is replaced by the vol command-line executable.
  • Namespaced Plugins: Plugins are now organized by OS. Instead of pslist, you now use windows.pslist, linux.pslist, or mac.pslist.
  • JSON Output: Volatility 3 natively supports rendering output in JSON, making it infinitely easier to pipe into SIEMs, jq, or custom Python scripts.
2. Basic Syntax & Setup

The core syntax for Volatility 3 is remarkably clean and intuitive.

# The fundamental Volatility 3 syntax vol -f <memory_image.raw> <plugin_name> [options] # Example: List processes in a Windows memory dump vol -f suspect_machine.mem windows.pslist # Example: Output the results in JSON format for parsing vol -f suspect_machine.mem windows.pslist --render json > processes.json # List all available plugins vol --help # List all plugins specific to Windows vol --help | grep windows
Pro Tip: If Volatility 3 fails to identify the OS or throws a "Symbol table not found" error, you likely need to download the ISF (Intermediate Symbol Format) files for that specific Windows build. You can generate them using the isf tool from the Volatility 3 GitHub repository, or download pre-compiled ISF files from the official symbol server.
3. The Ultimate Volatility 3 Command Cheat Sheet

Keep this memory forensics volatility 3 guide cheat sheet bookmarked for rapid triage during an active incident.

CategoryVolatility 3 CommandPurpose
Process Listingwindows.pslistLists processes by walking the EPROCESS linked list (can be unlinked by rootkits).
Process Scanningwindows.psscanScans physical memory for EPROCESS objects. Finds hidden/unlinked processes.
Command Lineswindows.cmdlineExtracts the full command-line arguments for running processes.
DLL Listingwindows.dlllist --pid <PID>Lists all DLLs loaded into a specific process's memory space.
Network Connectionswindows.netscanFinds active and historical TCP/UDP connections and listening ports.
Malware Injectionwindows.malfindScans for memory regions with RWX (Read/Write/Execute) permissions and MZ headers.
YARA Scanningwindows.vadyarascan --yara-file rule.yarScans process memory for specific YARA signatures.
File Scanningwindows.filescanScans memory for _FILE_OBJECT structures (finds dropped files in RAM).
Dump Fileswindows.dumpfiles --physaddr <OFFSET>Extracts a file from memory to disk using its physical offset.
Registry Hiveswindows.registry.hivelistLists all loaded registry hives in memory.
Registry Keyswindows.registry.printkey --key <KEY>Prints the values of a specific registry key.
Hash Dumpingwindows.hashdumpExtracts NTLM hashes from the SAM hive in memory.
Linux Processeslinux.pslistLists processes in a Linux memory dump.
Linux Bash Historylinux.bashExtracts bash command history from memory.
4. Deep Dive: Malware & Injection Analysis

The primary goal of memory forensics in incident response is to find code that the attacker is trying to hide. Modern malware rarely writes itself to disk; it injects directly into legitimate processes.

Finding Injected Code with malfind

The windows.malfind plugin looks for Virtual Address Descriptors (VADs) that have both Execute and Write permissions, and contain the MZ (DOS) header, indicating a hidden PE file.

# Scan all processes for injected code vol -f suspect.mem windows.malfind # Example Output: Pid Process Start End Tag ---- ------- ----- --- --- 4182 explorer.exe 0x7ff8a000 0x7ff8b000 VadS # The output will also dump the hex and assembly of the injected region.
Hunting with Custom YARA Rules

If you are hunting for a specific threat actor or a known fileless implant, use vadyarascan to scan the memory of specific processes or the entire physical memory.

# Scan a specific process (PID 4182) for a custom YARA rule vol -f suspect.mem windows.vadyarascan --pid 4182 --yara-file cobalt_strike_beacon.yar # Scan the entire physical memory space for a specific string vol -f suspect.mem windows.vadyarascan --yara-rules "rule test { strings: $a = 'malicious_string' condition: $a }"
5. Network & Connection Tracking

Attackers must communicate with their Command and Control (C2) infrastructure. windows.netscan is your primary tool for mapping the network state of the compromised machine at the exact moment the memory dump was captured.

# List all network connections vol -f suspect.mem windows.netscan # Filter the output using grep/jq to find connections to suspicious external IPs vol -f suspect.mem windows.netscan --render json | jq '.[] | select(.ForeignAddr != "0.0.0.0" and .ForeignAddr != "*")'
⚠ Correlating Network Data with Processes netscan shows you the IP and Port, but not the PID. To find out which process owns a suspicious connection, cross-reference the Owner PID from the netscan output with the pslist output. If the PID belongs to svchost.exe, verify the command line using windows.cmdline to ensure it's the legitimate system process and not a masquerading implant.
6. File System & Registry Forensics

Even in a "fileless" attack, the operating system caches files and registry keys in RAM. You can often extract dropped payloads or persistence mechanisms directly from the memory dump.

Extracting Dropped Files
# Step 1: Scan memory for file objects vol -f suspect.mem windows.filescan | grep -i "malware.exe" # Step 2: Note the physical offset (e.g., 0x1a2b3c4d) and dump it vol -f suspect.mem windows.dumpfiles --physaddr 0x1a2b3c4d -D ./extracted_files/
Hunting Registry Persistence

Attackers often use the Registry for persistence (e.g., Run keys, Services). Because the Registry is loaded into memory, you can query it without needing the disk.

# List all loaded registry hives vol -f suspect.mem windows.registry.hivelist # Query the 'Run' key for a specific user's NTUSER.DAT hive # First, find the virtual offset of the NTUSER.DAT hive from hivelist vol -f suspect.mem windows.registry.printkey --offset 0xdeadbeef --key "Software\Microsoft\Windows\CurrentVersion\Run"
7. Automating Memory Forensics

During a major incident, running commands manually is too slow. You can automate the triage process using bash scripts or Python, leveraging Volatility 3's JSON output.

#!/bin/bash # Automated Volatility 3 Triage Script IMAGE="suspect_machine.mem" OUTDIR="vol3_triage_$(date +%Y%m%d)" mkdir -p $OUTDIR # Run essential plugins and save as JSON vol -f $IMAGE windows.pslist --render json > $OUTDIR/pslist.json vol -f $IMAGE windows.psscan --render json > $OUTDIR/psscan.json vol -f $IMAGE windows.netscan --render json > $OUTDIR/netscan.json vol -f $IMAGE windows.malfind --render json > $OUTDIR/malfind.json vol -f $IMAGE windows.cmdline --render json > $OUTDIR/cmdline.json # Quick alert: Check for hidden processes (in psscan but not in pslist) echo "Checking for unlinked processes..." jq -r '.[].Pid' $OUTDIR/psscan.json | sort > psscan_pids.txt jq -r '.[].Pid' $OUTDIR/pslist.json | sort > pslist_pids.txt comm -23 psscan_pids.txt pslist_pids.txt > $OUTDIR/hidden_pids.txt echo "Triage complete. Check $OUTDIR/hidden_pids.txt for anomalies."
Frequently Asked Questions
Why does Volatility 3 say "Symbol table not found" for my memory image?

Volatility 3 relies on ISF (Intermediate Symbol Format) files to parse kernel structures. If it cannot identify the exact Windows build of the memory dump, it will fail. To fix this, you must either download the correct ISF file from the Volatility 3 symbol server or generate it yourself using the isf tool against the corresponding ntoskrnl.exe and ntdll.dll from the compromised machine. Ensure your file:/// or https:// symbol paths are correctly configured in your Volatility 3 environment variables.

What is the difference between pslist and psscan?

windows.pslist walks the active doubly-linked list of EPROCESS structures in the kernel. If a rootkit unlinks a malicious process from this list to hide it, pslist will not see it. windows.psscan, on the other hand, performs a raw pool tag scan across the entire physical memory. It will find the EPROCESS object even if it has been unlinked from the active list. Comparing the output of both is a classic technique for detecting DKOM (Direct Kernel Object Manipulation) rootkits.

Can Volatility 3 analyze macOS and Linux memory dumps?

Yes. Volatility 3 has robust support for Linux and macOS. The syntax remains the same, but you change the namespace. For example, use linux.pslist, linux.bash, linux.check_syscall, or mac.pslist, mac.lsmod. Note that Linux and macOS kernel structures change frequently, so ensuring you have the correct ISF/dwarf files for the specific kernel version is critical.

How do I extract plaintext passwords or hashes from a memory dump?

For Windows, you can use windows.hashdump to extract NTLM hashes from the SAM hive in memory, or windows.lsadump for cached domain credentials. To find plaintext passwords, you would typically use windows.vadyarascan with YARA rules designed to match the memory structures of WDigest, LSASS, or specific browser credential managers. (Note: Modern Windows 10/11 systems disable WDigest by default, making plaintext extraction much harder without specialized tools).

About the author Written by the HOC Team at Hackers Online Club -- a cybersecurity community trusted by Incident Responders, SOC Analysts, and Digital Forensics experts since 2010. 15+ years of practical threat hunting guides, memory forensics tutorials, and enterprise breach remediation resources. Learn more about HOC

Join Our Club

Enter your Email address to receive notifications | Join over Million Followers

Previous Article
Microsoft Defender Linux release

Microsoft Defender Releases For Linux Too

Related Posts