
Percorra qualquer dump de memória. Encontre o que está oculto. Forense de kernel Linux + Windows a partir de um único binário Rust estático — sem necessidade de Python.
Um kit de ferramentas de forense de memória que cria perfis dos kernels do Windows por conta própria — e é verificado de forma cruzada, processo a processo, contra o Volatility 3.
mem4n6 lê todos os formatos de dump comuns (LiME, AVML, ELF core, dumps de crash do Windows, arquivos de hibernação, save-states do VMware, kdump, raw…) e percorre processos, threads, módulos, conexões de rede e memória injetada — a partir de um único binário estático que você compila uma vez e copia para qualquer lugar, com sem Python, sem runtime, sem catálogo de símbolos pré-carregado. No Windows, ele cria seu próprio perfil: localiza ntoskrnl na memória física, lê seu GUID PDB do registro CodeView, resolve o ISF correspondente do Volatility 3, recupera a base do kernel sob o KASLR moderno e reconstrói PsActiveProcessHead a partir da tabela de símbolos — a mesma cadeia de autoperfilamento usada pelo Volatility 3 e MemProcFS, reimplementada em Rust.
Como o padrão para uma ferramenta de evidência é a correção, o percorredor de processos é verificado de forma cruzada contra uma implementação de referência independente — Volatility 3 — em uma imagem real de 2 GB do Windows 10 (uma referência que concorda é uma forte evidência, não uma prova; os bytes brutos são a fonte da verdade):
windows.pslist em DESKTOP-SDN1RPT.mem | mem4n6 vs Volatility 3 |
|---|---|
| Processos coincidentes | 94 / 94 PIDs compartilhados — PID, PPID, nome e hora de criação exatos |
| Perdidos (vol3 encontrou, mem4n6 não) | 0 |
| Falsos positivos (mem4n6 encontrou, vol3 não) | 0 |
mem4n6 corresponde exatamente ao Volatility 3 — incluindo a recuperação de 11 processos órfãos causados por um smear de aquisição ao vivo por meio de uma varredura bidirecional de ActiveProcessLinks. Um segundo oráculo independente (MemProcFS) confirma um subconjunto limpo — sua process_list de 77 processos está totalmente contida no conjunto do mem4n6, com zero processos exclusivos do MemProcFS (detalhes). Consulte docs/validation.md para a análise diferencial completa e as etapas de reprodução.
Instale com cargo install mem4n6 ou baixe um binário estático pré-compilado na última versão — as compilações Linux são static-PIE (musl: copie para qualquer lugar, sem glibc), acompanhadas de macOS, Windows e um checksums.txt SHA-256.
Ou compile a partir do código-fonte (aproximadamente um comando):```bash git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic && cargo build --release ./target/release/mem4n6 --help
Essa compilação de desenvolvimento vincula a libc dinamicamente; para reproduzir localmente o binário totalmente estático da release, adicione o alvo 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 — os mesmos pacotes que o Volatility 3 usa, portanto um cache de símbolos existente funciona como está.
| mem4n6 | Volatility 3 | MemProcFS | MemNixFS | |
|---|---|---|---|---|
| Deploy | Rust · binário estático único | Python · interpretador + dependências | C(+Rust) · bibliotecas | C++ · mount de filesystem |
| Auto-perfilamento do Windows (scan → PDB GUID → symbols) | ✅ | ✅ | ✅ | n/a — dumps Linux |
| DTB sem cabeçalho via boot low stub + base de kernel em granularidade de página | ✅ | self-ref PML4 + varredura de imagem | ✅ low stub | n/a — Linux |
| Modo de símbolos offline / air-gapped | ✅ --offline | pacote ISF ou rede | symbols / rede | ✅ BTF do dump |
Sem panics em dumps não confiáveis (negação de unsafe; unwrap/expect negados nos caminhos de parsing) | ✅ | — | — | — (C++) |
| Verificação cruzada contra o Volatility 3 | ✅ (docs/validation.md) | — (a referência) | — | — |
mem4n6 é, tanto quanto sabemos, a única implementação em Rust de toda a cadeia dump → kernel-scan → PDB-GUID → symbol-resolution → DTB. A linhagem da técnica — o servidor de símbolos do WinDbg, o pdbparse de Brendan Dolan-Gavitt, Rekall, Volatility 3 e o MemProcFS de Ulf Frisk — é bem estabelecida; o mem4n6 a reimplementa em clean-room e valida o resultado contra a referência. MemNixFS traz a mesma ideia de memória-como-filesystem para dumps Linux — montar-e-navegar, com símbolos derivados do próprio BTF do kernel quando não existe ISF; as células n/a acima marcam uma diferença de escopo (imagens Linux e uma UX de filesystem, vs o walker de CLI validado para Windows do mem4n6), não uma lacuna. A âncora boot low-stub / PROCESSOR_START_BLOCK segue o Getting Physical de Alex Ionescu na REcon 2017.
git clone https://github.com/SecurityRonin/memory-forensic.git cd memory-forensic cargo build --release ./target/release/mem4n6 --help
---
## Referência 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
# Novel kernel interface abuse: io_uring, netfilter hooks, perf_event
mem4n6 check --symbols linux.json --io-uring --netfilter --perf-event memdump.lime