offensive-tools/rev/windbg/SKILL.md
Auth/lab ref: Microsoft's debugger for user-mode and kernel-mode Windows debugging, crash dump analysis, driver reversing, and rootkit analysis.
npx skillsauth add aeondave/malskill windbgInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Microsoft's debugger — kernel-mode debugging, crash dump analysis, driver reversing, and advanced user-mode debugging.
# WinDbg Preview (recommended — modern UI, TTD support)
winget install --id Microsoft.WinDbg --accept-source-agreements
# Classic WinDbg (part of Windows SDK)
# Download from https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/
# Symbol server setup (critical for useful debugging)
# In WinDbg:
.sympath srv*C:\Symbols*https://msdl.microsoft.com/download/symbols
.reload
# Open executable
File -> Open Executable -> select target.exe
# Or attach to running process
File -> Attach to a Process -> select PID
# Set breakpoint and run
bp kernel32!CreateFileW
g # Go (run)
# Enable kernel debugging on target
bcdedit /debug on
bcdedit /dbgsettings net hostip:192.168.1.100 port:50000
# In WinDbg: File -> Kernel Debug -> Net -> enter key from target
# Or: File -> Open Crash Dump -> load .dmp file
| Command | Purpose |
|---------|---------|
| g | Go (continue) |
| p | Step over |
| t | Step into (trace) |
| pt | Step to next return |
| pc | Step to next call |
| gu | Step out (go up) |
| bp ADDR | Set breakpoint |
| bp MODULE!FUNC | Breakpoint on function |
| bu MODULE!FUNC | Deferred breakpoint (module not yet loaded) |
| ba r4 ADDR | Hardware breakpoint (read 4 bytes at ADDR) |
| ba w4 ADDR | Hardware breakpoint (write 4 bytes) |
| bl | List breakpoints |
| bc * | Clear all breakpoints |
| .restart | Restart debugging session |
| Command | Purpose |
|---------|---------|
| r | Show registers |
| r rax=0 | Set register value |
| db ADDR | Display bytes |
| dd ADDR | Display DWORDs |
| dq ADDR | Display QWORDs |
| da ADDR | Display ASCII string |
| du ADDR | Display Unicode string |
| dps ADDR | Pointer-sized values with symbols |
| u ADDR | Unassemble (disassemble) |
| uf FUNC | Unassemble function |
| k | Stack trace |
| kP | Stack trace with parameters |
| ~ | List threads |
| ~Ns | Switch to thread N |
| .frame N | Switch to stack frame N |
| Command | Purpose |
|---------|---------|
| s -a RANGE "string" | Search ASCII string |
| s -u RANGE L1000 "string" | Search Unicode string |
| s -b RANGE 4D 5A | Search byte pattern (MZ header) |
| .writemem FILE ADDR L SIZE | Dump memory to file |
| Command | Purpose |
|---------|---------|
| lm | List loaded modules |
| lm m ntdll | Module info for ntdll |
| x ntdll!Nt* | List symbols matching pattern |
| ln ADDR | Nearest symbol to address |
| .reload /f | Force reload symbols |
| Command | Purpose |
|---------|---------|
| !process 0 0 | List all processes (kernel) |
| !process ADDR 7 | Full process info |
| .process /i ADDR | Switch context to process (kernel) |
| !peb | Process Environment Block |
| !teb | Thread Environment Block |
| !handle | List handles |
| !dlls | Loaded DLL list with details |
# Open dump file
File -> Open Crash Dump -> select .dmp
# First commands after loading a dump:
!analyze -v # Automated crash analysis (start here)
.ecxr # Switch to exception context record
k # Stack trace at crash
lm # Loaded modules
!process 0 0 # Process list
# After !analyze -v:
.bugcheck # Bug check code and params
!pool ADDR # Pool analysis for pool corruption
!verifier # Driver verifier info
!irp ADDR # IRP analysis
dt nt!_DRIVER_OBJECT ADDR # Inspect driver object
# List all drivers
lm t n # List all modules by type
# Find suspicious drivers
!object \Driver # List driver objects
!drvobj \Driver\suspect 7 # Full driver object listing
# Inspect driver dispatch routines
dt nt!_DRIVER_OBJECT ADDR
dps ADDR+0x70 L1C # MajorFunction table (IRP handlers)
# SSDT hook detection
dps nt!KiServiceTable L100
# Compare each entry — hooks point outside ntoskrnl range
# IDT analysis
!idt # Interrupt Descriptor Table
# Cross-reference process lists
!process 0 0 # Active process list (via PsActiveProcessList)
!for_each_process "r $t0 = @$proc; .printf \"%p %s\\n\", @$t0, @@c++(@$t0->ImageFileName)"
# Compare with direct EPROCESS walk for hidden processes
bp kernel32!VirtualAllocEx
bp kernel32!WriteProcessMemory
bp kernel32!CreateRemoteThread
bp ntdll!NtMapViewOfSection
g
# On hit: inspect target process handle and injected data
dd @rcx # Buffer being written
# Log all CreateFile calls without stopping
bp kernel32!CreateFileW ".printf \"CreateFile: %mu\\n\", @rcx; gc"
# Log registry operations
bp advapi32!RegOpenKeyExW ".printf \"RegOpen: %mu\\n\", poi(@rsp+8); gc"
# Log network connections
bp ws2_32!connect "dd @rdx L4; gc"
# Record execution (WinDbg Preview)
File -> Launch Executable (Advanced) -> check "Record with Time Travel Debugging"
# After recording — navigate backwards:
g- # Reverse continue
p- # Reverse step over
t- # Reverse step into
# Find when memory was written:
ba w4 ADDR # Set write watchpoint
g- # Go backwards until write
# TTD queries (LINQ-style):
dx @$cursession.TTD.Calls("kernel32!CreateFileW")
dx @$cursession.TTD.Calls("ntdll!NtCreateThreadEx").Count()
# Conditional breakpoint with logging
bp kernel32!VirtualAlloc "j (@r8==0x40) '.printf \"RWX alloc: size=%x\\n\",@rdx; gc' ; 'gc'"
# Walk a linked list
!list -t nt!_LIST_ENTRY.Flink -x "dt nt!_EPROCESS @$extret" ADDR
# Extension commands
.load C:\path\to\extension.dll
!mex.help # MEX extension commands
| File | When to load | |------|--------------| | references/kernel-debugging.md | Kernel driver analysis and rootkit detection workflows | | references/crash-dump-analysis.md | BSOD and crash dump triage methodology |
development
White-box auditing methodology for AI-generated ('vibe-coded') applications. Focuses on modern stack misconfigurations (Supabase, Next.js, Vercel).
development
Hybrid AI/Deterministic SAST methodology for discovering zero-day vulnerabilities in source code. Orchestrates structural search with AI-driven data flow and sink validation.
development
Auth assessment: hardware/embedded methodology; UART/JTAG/SWD/SPI/I2C, firmware extraction, boot/debug paths, embedded OS evidence.
devops
Container methodology: Identifying containerization limits, Docker/K8s misconfigurations, and executing escapes to the host node.