
Recorre cualquier volcado de memoria. Encuentra lo que está oculto. Forensia del kernel de Linux + Windows desde un único binario Rust estático — no se requiere Python.
Un kit de herramientas de análisis forense de memoria que perfila los kernels de Windows por sí mismo — y se contrasta proceso por proceso contra Volatility 3.
mem4n6 lee todos los formatos de volcado comunes (LiME, AVML, ELF core, volcados de Windows, archivos de hibernación, estados de guardado de VMware, kdump, raw…) y recorre procesos, hilos, módulos, conexiones de red y memoria inyectada — desde un único binario estático que compilas una vez y copias donde quieras, sin Python, sin runtime, sin catálogo de símbolos preparado de antemano. En Windows construye su propio perfil: localiza ntoskrnl en la memoria física, lee su GUID PDB del registro CodeView, resuelve el ISF correspondiente de Volatility 3, recupera la base del kernel bajo el KASLR moderno y reconstruye PsActiveProcessHead a partir de la tabla de símbolos — la misma cadena de autoperfilado que usan Volatility 3 y MemProcFS, reimplementada en Rust.
Dado que el listón para una herramienta de evidencia es la corrección, el enumerador de procesos se contrasta contra una implementación de referencia independiente — Volatility 3 — sobre una imagen real de Windows 10 de 2 GB (una referencia que coincide es una evidencia sólida, no una prueba; los bytes brutos son la verdad fundamental):
windows.pslist en DESKTOP-SDN1RPT.mem | mem4n6 vs Volatility 3 |
|---|---|
| Procesos coincidentes | 94 / 94 PIDs compartidos: PID, PPID, nombre y tiempo de creación exactos |
| No detectados (vol3 los encontró, mem4n6 no) | 0 |
| Falsos positivos (mem4n6 los encontró, vol3 no) | 0 |
mem4n6 coincide con Volatility 3 exactamente — incluida la recuperación de 11 procesos huérfanos por un smear de adquisición en vivo mediante un recorrido bidireccional de ActiveProcessLinks. Un segundo oráculo independiente (MemProcFS) confirma un subconjunto limpio — su process_list de 77 procesos está completamente contenido en el conjunto de mem4n6, con cero procesos exclusivos de MemProcFS (detalles). Consulta docs/validation.md para el diferencial completo y los pasos de reproducción.
Instala con cargo install mem4n6, o descarga un binario estático precompilado de la última versión — las compilaciones de Linux son static-PIE (musl: cópialo a cualquier lado, sin glibc), junto con macOS, Windows y un checksums.txt SHA-256.
O compílalo desde el código fuente (~un comando):```bash git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic && cargo build --release ./target/release/mem4n6 --help
Esa compilación de desarrollo enlaza libc dinámicamente; para reproducir localmente el binario totalmente estático del release, añade el objetivo musl: `rustup target add x86_64-unknown-linux-musl && cargo build --release --target x86_64-unknown-linux-musl`.```bash
# Inspect any dump — format, ranges, embedded metadata (no symbols needed)
mem4n6 info win10.mem
# Windows process tree. The ISF is resolved from the kernel's own PDB GUID;
# raw .mem dumps take the page-table base via --cr3 (crash dumps carry their own).
mem4n6 ps --symbols ntkrnlmp.json --cr3 0x1ad000 --tree win10.mem
# Linux process tree from a LiME capture
mem4n6 ps --symbols linux.json --tree memdump.lime
# Air-gapped lab? Never touch the network for symbols:
mem4n6 ps --symbols ntkrnlmp.json --offline win10.mem
Symbol files are ISF JSON — los mismos paquetes que usa Volatility 3, por lo que una caché de símbolos existente funciona tal cual.
| mem4n6 | Volatility 3 | MemProcFS | MemNixFS | |
|---|---|---|---|---|
| Despliegue | Rust · binario estático único | Python · intérprete + dependencias | C(+Rust) · bibliotecas | C++ · montaje de sistema de archivos |
| Autoperfilado de Windows (escaneo → GUID de PDB → símbolos) | ✅ | ✅ | ✅ | n/d — volcados de Linux |
| DTB sin cabecera mediante el stub bajo de arranque + base del kernel a nivel de página | ✅ | PML4 autorreferencial + escaneo de imagen | ✅ stub bajo | n/d — Linux |
| Modo de símbolos sin conexión / aislado | ✅ --offline | paquete ISF o red | símbolos / red | ✅ BTF desde volcado |
Sin pánicos en volcados no confiables (unsafe denegado; unwrap/expect denegados en rutas de análisis) | ✅ | — | — | — (C++) |
| Verificado de forma cruzada con Volatility 3 | ✅ (docs/validation.md) | — (la referencia) | — | — |
mem4n6 es, hasta donde sabemos, la única implementación en Rust de la cadena completa volcado → escaneo del kernel → GUID de PDB → resolución de símbolos → DTB. El linaje de la técnica — el servidor de símbolos de WinDbg, pdbparse de Brendan Dolan-Gavitt, Rekall, Volatility 3 y MemProcFS de Ulf Frisk — está bien establecido; mem4n6 lo reimplementa en sala limpia y valida el resultado contra la referencia. MemNixFS lleva esa misma idea de memoria como sistema de archivos a los volcados de Linux — montar y explorar, con símbolos derivados del propio BTF del kernel cuando no existe ISF; las celdas n/a de arriba marcan una diferencia de alcance (imágenes Linux y una UX de sistema de archivos, frente al recorredor CLI validado para Windows de mem4n6), no una carencia. El anclaje del stub bajo de arranque / PROCESSOR_START_BLOCK sigue la conferencia Getting Physical de Alex Ionescu en REcon 2017.
git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic cargo build --release ./target/release/mem4n6 --help
---
## Referencia rápida```bash
# Show dump format and physical memory ranges
mem4n6 info memdump.dmp
# Process tree with threads and DLLs
mem4n6 ps --symbols ntkrnlmp.json --tree --threads --dlls memdump.dmp
# Network connections (json / csv / table)
mem4n6 net --symbols ntkrnlmp.json --output json memdump.dmp
# Kernel integrity checks (SSDT, IDT, callbacks, hooks)
mem4n6 check --symbols ntkrnlmp.json --ssdt --callbacks memdump.dmp
# Linux syscall hook and malfind scan
mem4n6 check --symbols linux.json --hooks --malfind memdump.lime
# String extraction with YARA rules
mem4n6 strings --rules ./yara-rules/ --min-length 8 memdump.dmp
# Hash lookup against NSRL (known-good) and MalwareBazaar (known-bad)
mem4n6 hash --lookup memdump.dmp
# Extract framebuffer screenshot from live memory dump
mem4n6 framebuf --symbols linux.json --png screen.png memdump.dmp
# Recover files from tmpfs mounts + detect memfd fileless ELF execution
mem4n6 check --symbols linux.json --tmpfs-recovery --memfd memdump.lime
# Detect EDR bypass: direct syscalls, ETW patching, AMSI/DSE bypass
mem4n6 check --symbols ntkrnlmp.json --direct-syscalls --etw-patch --amsi-bypass memdump.dmp