PluginBench
Skill
Fail
Audit score 45

memory-forensics-volatility

yaklang/hack-skills

Expert memory forensics analysis using Volatility 2/3 for malware detection, credential extraction, and incident response.

What is memory-forensics-volatility?

Memory forensics playbook covering acquisition, OS identification, process analysis, code injection detection, and timeline reconstruction using Volatility 2 and 3. Use when analyzing memory dumps for malware indicators, hidden processes, credential theft, and incident response investigations.

  • Acquire memory from Windows, Linux, and virtual machines using LiME, WinPmem, and hypervisor-specific tools
  • Identify hidden processes via DKOM detection by comparing pslist vs psscan output
  • Detect code injection and shellcode using malfind to find RWX memory regions without file backing
  • Extract credentials including SAM hashes, LSA secrets, and cached domain credentials
  • Analyze DLL injection and reflective loading by checking ldrmodules unlink status
  • Correlate network connections to processes and identify C2 communication patterns

How to install memory-forensics-volatility

npx skills add https://github.com/yaklang/hack-skills --skill memory-forensics-volatility
Prerequisites
  • Volatility 2 (pip2 install volatility) or Volatility 3 (pip3 install volatility3)
  • Memory dump file (.raw, .lime, .vmem, or .bin format)
  • Appropriate OS profile for Volatility 2; Volatility 3 auto-detects symbols
  • Linux profiles built from target kernel (Vol2 only) if analyzing Linux memory
Claude Code
Cursor
Windsurf
Cline

How to use memory-forensics-volatility

  1. 1.Identify the target OS using imageinfo (Vol2) or windows.info/linux.info (Vol3)
  2. 2.Run pslist and psscan to detect hidden processes via DKOM comparison
  3. 3.Execute netscan to map network connections to process IDs and identify C2 traffic
  4. 4.Use dlllist and ldrmodules to detect reflective DLL injection and unlinked modules
  5. 5.Run malfind to locate code injection, shellcode, and RWX memory regions without file backing
  6. 6.Extract credentials with hashdump, lsadump, and cachedump for offline analysis
  7. 7.Analyze registry hives and run keys to identify persistence mechanisms
  8. 8.Generate timeline using timeliner plugin to correlate events across memory artifacts

Use cases

Good for
  • Analyze a suspected malware infection by detecting hidden processes and code injection artifacts in a memory dump
  • Extract Windows domain credentials from a compromised system's memory for password cracking
  • Identify rootkit presence by checking for SSDT/IDT hooking and syscall manipulation in Linux memory
  • Reconstruct attacker activity timeline by correlating process execution, network connections, and registry modifications
  • Detect reflective DLL injection in running processes by analyzing PEB linkage and memory permissions
Who it's for
  • Incident response analysts investigating active compromises
  • Malware reverse engineers analyzing in-memory behavior and evasion techniques
  • Forensic examiners reconstructing attack timelines from memory evidence
  • Security researchers studying kernel-level rootkits and DKOM techniques
  • Penetration testers validating post-exploitation artifact detection

memory-forensics-volatility FAQ

What is the difference between pslist and psscan?

pslist walks the EPROCESS linked list maintained by the kernel; psscan performs a pool tag scan to find all EPROCESS objects in memory. If a process appears in psscan but not pslist, it has been hidden via DKOM (Direct Kernel Object Manipulation).

How do I know if a DLL is injected via reflective loading?

Use ldrmodules to check three linkage lists (InLoadOrder, InMemoryOrder, InInitOrder). If a DLL shows False for all three columns, it is unlinked from the PEB and indicates stealth DLL injection.

What does malfind detect and how do I interpret results?

malfind identifies memory regions with PAGE_EXECUTE_READWRITE permissions that do not map to a file on disk. This is a strong indicator of shellcode, code injection, or reflective loading. Use the -D flag to dump suspicious regions for further analysis.

How do I build a Linux profile for Volatility 2?

Navigate to volatility/tools/linux, run make to generate module.dwarf, then zip it with the target system's /boot/System.map file. Place the resulting profile zip in volatility/plugins/overlays/linux/ and reference it with --profile=LinuxProfile.

What are the key differences between Volatility 2 and 3 commands?

Volatility 3 uses auto-detection instead of manual profiles, and command syntax changed (e.g., pslist → windows.pslist, imageinfo → windows.info). Volatility 3 is recommended for modern systems; Vol2 may be needed for legacy OS support.

Full instructions (SKILL.md)

Source of truth, from yaklang/hack-skills.


name: memory-forensics-volatility description: >- Memory forensics playbook using Volatility 2/3. Use when analyzing memory dumps for malware analysis, credential extraction, process investigation, code injection detection, and incident response timeline reconstruction.

SKILL: Memory Forensics — Expert Analysis Playbook

AI LOAD INSTRUCTION: Expert memory forensics techniques using Volatility 2 and 3. Covers memory acquisition, OS identification, process analysis (hidden process detection), network connections, DLL/module analysis, code injection detection (malfind), credential extraction, file carving, registry analysis, and timeline generation. Base models miss the Vol2/Vol3 command differences, malware indicator patterns, and Linux-specific memory analysis.

0. RELATED ROUTING

Before going deep, consider loading:

  • traffic-analysis-pcap for correlating network artifacts with memory findings
  • steganography-techniques if hidden data suspected in extracted files
  • windows-privilege-escalation for understanding post-exploitation artifacts in memory

Quick Reference

Also load VOLATILITY_CHEATSHEET.md when you need:

  • Vol2 vs Vol3 command comparison table
  • Common plugin sequences for specific investigation types

1. MEMORY ACQUISITION

Linux

# LiME (Linux Memory Extractor) — kernel module
insmod lime.ko "path=/tmp/mem.lime format=lime"

# /proc/kcore (if available)
dd if=/proc/kcore of=/tmp/mem.raw bs=1M

# AVML (Microsoft's open-source)
./avml /tmp/mem.lime

Windows

# WinPmem
winpmem_mini_x64.exe memdump.raw

# FTK Imager (GUI) — capture memory to file

# DumpIt (single-click memory dump)
DumpIt.exe

# Comae (MagnetRAM)
MagnetRAMCapture.exe /output memdump.raw

Virtual Machines

# VMware: .vmem file in VM directory (suspend VM first)
# VirtualBox: VBoxManage debugvm "VM_NAME" dumpvmcore --filename mem.raw
# KVM/QEMU: virsh dump DOMAIN memdump --memory-only
# Hyper-V: checkpoint VM → inspect .bin files

2. VOLATILITY 2 vs 3

ConceptVolatility 2Volatility 3
Profile system--profile=Win10x64_19041Auto-detected (symbol tables)
Image infoimageinfowindows.info / linux.info
Process listpslistwindows.pslist
Networknetscan / connectionswindows.netscan / windows.netstat
DLLsdlllistwindows.dlllist
Injectionmalfindwindows.malfind
Hasheshashdumpwindows.hashdump
Filesfilescanwindows.filescan
Registryhivelist / printkeywindows.registry.hivelist / windows.registry.printkey
Installpip2 install volatilitypip3 install volatility3

3. ANALYSIS METHODOLOGY

Step 1: Identify OS

# Vol2
vol.py -f mem.raw imageinfo
vol.py -f mem.raw kdbgscan

# Vol3
vol -f mem.raw windows.info
vol -f mem.raw banners.Banners

Step 2: Process Listing — Hidden Process Detection

# Vol2
vol.py -f mem.raw --profile=PROFILE pslist       # EPROCESS linked list
vol.py -f mem.raw --profile=PROFILE psscan       # pool tag scan (finds unlinked)
vol.py -f mem.raw --profile=PROFILE pstree       # parent-child hierarchy

# Vol3
vol -f mem.raw windows.pslist
vol -f mem.raw windows.psscan
vol -f mem.raw windows.pstree

Red flags: Process in psscan but not pslist = DKOM (Direct Kernel Object Manipulation) hiding.

Step 3: Network Connections

# Vol2
vol.py -f mem.raw --profile=PROFILE netscan      # TCP/UDP endpoints
vol.py -f mem.raw --profile=PROFILE connections   # XP/2003 only
vol.py -f mem.raw --profile=PROFILE connscan      # closed connections

# Vol3
vol -f mem.raw windows.netscan
vol -f mem.raw windows.netstat

Step 4: DLL / Module Analysis

# Vol2
vol.py -f mem.raw --profile=PROFILE dlllist -p PID
vol.py -f mem.raw --profile=PROFILE ldrmodules -p PID   # find unlinked DLLs

# Vol3
vol -f mem.raw windows.dlllist --pid PID

Red flags: DLL in dlllist but False in all three ldrmodules columns = reflective DLL injection.

Step 5: Code Injection Detection (Malfind)

# Vol2
vol.py -f mem.raw --profile=PROFILE malfind -p PID
vol.py -f mem.raw --profile=PROFILE malfind -D /tmp/dump/   # dump injected sections

# Vol3
vol -f mem.raw windows.malfind --pid PID

What malfind detects: Memory regions with PAGE_EXECUTE_READWRITE that don't map to a file on disk — classic shellcode/injection indicator.

Step 6: Credential Extraction

# Vol2
vol.py -f mem.raw --profile=PROFILE hashdump      # SAM hashes
vol.py -f mem.raw --profile=PROFILE lsadump       # LSA secrets
vol.py -f mem.raw --profile=PROFILE cachedump     # domain cached creds
vol.py -f mem.raw --profile=PROFILE mimikatz      # (plugin) plaintext creds

# Vol3
vol -f mem.raw windows.hashdump
vol -f mem.raw windows.lsadump
vol -f mem.raw windows.cachedump

Step 7: File Extraction

# Vol2
vol.py -f mem.raw --profile=PROFILE filescan | grep -i "password\|secret\|flag"
vol.py -f mem.raw --profile=PROFILE dumpfiles -Q OFFSET -D /tmp/dump/

# Vol3
vol -f mem.raw windows.filescan
vol -f mem.raw windows.dumpfiles --virtaddr OFFSET

Step 8: Registry Analysis

# Vol2
vol.py -f mem.raw --profile=PROFILE hivelist
vol.py -f mem.raw --profile=PROFILE printkey -K "Software\Microsoft\Windows\CurrentVersion\Run"
vol.py -f mem.raw --profile=PROFILE userassist    # program execution evidence

# Vol3
vol -f mem.raw windows.registry.hivelist
vol -f mem.raw windows.registry.printkey --key "Software\Microsoft\Windows\CurrentVersion\Run"

Step 9: Command History

# Vol2
vol.py -f mem.raw --profile=PROFILE cmdscan       # cmd.exe history
vol.py -f mem.raw --profile=PROFILE consoles       # full console output

# Vol3
vol -f mem.raw windows.cmdline

Step 10: Timeline Generation

# Vol2
vol.py -f mem.raw --profile=PROFILE timeliner --output=body --output-file=timeline.body
mactime -b timeline.body -d > timeline.csv

# Vol3
vol -f mem.raw timeliner.Timeliner

4. LINUX MEMORY ANALYSIS

# Vol2 (requires Linux profile)
vol.py -f mem.lime --profile=LinuxProfile linux_pslist
vol.py -f mem.lime --profile=LinuxProfile linux_pstree
vol.py -f mem.lime --profile=LinuxProfile linux_netstat
vol.py -f mem.lime --profile=LinuxProfile linux_bash        # bash history
vol.py -f mem.lime --profile=LinuxProfile linux_enumerate_files
vol.py -f mem.lime --profile=LinuxProfile linux_proc_maps -p PID
vol.py -f mem.lime --profile=LinuxProfile linux_malfind

# Vol3
vol -f mem.lime linux.pslist
vol -f mem.lime linux.pstree
vol -f mem.lime linux.bash
vol -f mem.lime linux.check_afinfo     # rootkit detection
vol -f mem.lime linux.check_syscall    # syscall hooking
vol -f mem.lime linux.tty_check        # TTY hooking

Building Linux Profiles (Vol2)

cd volatility/tools/linux
make
# Creates module.dwarf + System.map → zip as profile
zip LinuxProfile.zip module.dwarf /boot/System.map-$(uname -r)
# Place in volatility/plugins/overlays/linux/

5. MALWARE INDICATORS IN MEMORY

IndicatorDetection MethodWhat It Means
Process in psscan but not pslistCompare pslist vs psscanDKOM — process hiding
Unexpected parent-childpstree analysise.g., svchost spawned by cmd.exe
MZ header in non-image memorymalfindReflective DLL / PE injection
RWX memory without backing filemalfindShellcode injection
DLL unlinked from all PEB listsldrmodules (all False)Stealth DLL loading
svchost.exe not child of services.exepstreeFake svchost (malware)
Unusual network connectionsnetscan + PID correlationC2 communication
Hooking in SSDT/IDTssdt / idt pluginsRootkit
Modified kernel objectslinux_check_syscallLinux rootkit

Normal Parent-Child Relationships (Windows)

System (4)
└── smss.exe
    └── csrss.exe
    └── wininit.exe
        └── services.exe
            └── svchost.exe (multiple)
            └── spoolsv.exe
        └── lsass.exe
    └── winlogon.exe
        └── explorer.exe
            └── user applications

6. DECISION TREE

Memory dump acquired — need to analyze
│
├── What OS?
│   ├── Windows → vol imageinfo / windows.info (§3 Step 1)
│   └── Linux → build profile or use Vol3 auto-detect (§4)
│
├── Malware investigation?
│   ├── Check processes: pslist vs psscan (hidden?) (§3 Step 2)
│   ├── Check parent-child: pstree (suspicious spawning?) (§5)
│   ├── Check injections: malfind (RWX memory?) (§3 Step 5)
│   ├── Check DLLs: ldrmodules (unlinked?) (§3 Step 4)
│   ├── Check network: netscan (C2 connections?) (§3 Step 3)
│   └── Extract suspicious files: dumpfiles (§3 Step 7)
│
├── Credential recovery?
│   ├── SAM hashes → hashdump (§3 Step 6)
│   ├── LSA secrets → lsadump (§3 Step 6)
│   ├── Cached domain creds → cachedump (§3 Step 6)
│   └── Plaintext passwords → mimikatz plugin (§3 Step 6)
│
├── Incident timeline?
│   ├── timeliner for comprehensive timeline (§3 Step 10)
│   ├── cmdscan / consoles for command history (§3 Step 9)
│   ├── userassist for program execution (§3 Step 8)
│   └── Cross-reference with PCAP timeline (→ traffic-analysis-pcap)
│
├── CTF / flag hunting?
│   ├── filescan + grep for flag patterns (§3 Step 7)
│   ├── cmdscan for typed flags/passwords (§3 Step 9)
│   ├── Clipboard: clipboard plugin
│   ├── Screenshots: screenshot plugin
│   └── Environment vars: envars plugin
│
└── Linux-specific?
    ├── linux_bash for shell history (§4)
    ├── linux_check_syscall for rootkit (§4)
    └── linux_netstat for connections (§4)