Parser MFTvisualizador MFT online e analisador $MFT
Um parser MFT que roda inteiramente no seu navegador. Solte um arquivo $MFT NTFS e inspecione cada registro — entradas excluídas, carimbos de tempo de $STANDARD_INFORMATION e $FILE_NAME, fluxos de dados alternativos, dados residentes — sem enviar um único byte. WebAssembly por baixo do capô, o crate Rust omerbenamram/mft fazendo o parsing.
- 0 bytesenviados, nunca
- Rust → Wasmvelocidade nativa
- 5 artefatos$MFT · $J · $Boot · $SDS · $I30
- Multi-GBvolumes, num Web Worker
Cada registro. Cada timestamp. Zero envios.
Uma bancada completa de triagem NTFS compilada para WebAssembly — velocidade de ferramenta nativa com a praticidade de uma página web.
Registros excluídos, revelados
Entradas não alocadas continuam na $MFT até serem reutilizadas. Filtre com um clique e veja o que foi apagado, quando e onde.
Privado por arquitetura
A análise roda num Web Worker na sua máquina. Desconecte a rede — continua funcionando.
Timestomping num relance
$STANDARD_INFORMATION e $FILE_NAME lado a lado — arquivos com datas forjadas se destacam.
Fluxos de dados alternativos
Zone.Identifier, payloads ocultos e $DATA residente, baixáveis direto do registro.
Explorador de pastas
Caminhos completos reconstruídos pelas referências de pai — incluindo pastas excluídas órfãs.
Além da $MFT
$UsnJrnl:$J, $Boot, $Secure:$SDS e índices $I30 são detectados e decodificados automaticamente.
Exportações prontas para relatório
CSV, super-timeline e relatório de triagem HTML — limitados a qualquer intervalo de tempo.
Como obter seus dados
Nunca coletou um $MFT? Escolha o primeiro método que servir: a maioria termina em menos de dois minutos.
- Coletar: rode um comando abaixo
- Solte o arquivo
$MFTna caixa acima - Analisado no seu navegador, nunca enviado
PowerShell nativo, nada para instalar
Só Windows · abra o PowerShell com «Executar como administrador» · cole o bloco inteiro.
# Elevated PowerShell: copies the live C:\$MFT to C:\triage\$MFT by reading the raw volume.
$drive = 'C:'; $dst = 'C:\triage\$MFT'
New-Item -ItemType Directory -Force -Path (Split-Path $dst) | Out-Null
if (-not ('Raw.Vol' -as [type])) { Add-Type -Namespace Raw -Name Vol -MemberDefinition '[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Unicode)] public static extern Microsoft.Win32.SafeHandles.SafeFileHandle CreateFile(string name, uint access, uint share, IntPtr sa, uint disposition, uint flags, IntPtr template);' }
$h = [Raw.Vol]::CreateFile("\\.\$drive", 2147483648, 3, [IntPtr]::Zero, 3, 0, [IntPtr]::Zero)
if ($h.IsInvalid) { throw "Cannot open \\.\$drive - run PowerShell as administrator" }
$vol = New-Object IO.FileStream($h, [IO.FileAccess]::Read)
function Read-At([long]$pos, [int]$len) { $b = New-Object byte[] $len; [void]$vol.Seek($pos, 'Begin'); $got = 0; while ($got -lt $len) { $n = $vol.Read($b, $got, $len - $got); if ($n -le 0) { throw 'Short read' }; $got += $n }; , $b }
$boot = Read-At 0 4096
$bps = [BitConverter]::ToUInt16($boot, 11); $spc = [int]$boot[13]; if ($spc -gt 128) { $spc = 1 -shl (256 - $spc) }
$cs = [long]$bps * $spc; $c = [int]$boot[64]; $rs = if ($c -gt 127) { 1 -shl (256 - $c) } else { $c * $cs }
$rec = Read-At ([BitConverter]::ToInt64($boot, 48) * $cs) ([math]::Max($rs, 4096))
$uo = [BitConverter]::ToUInt16($rec, 4)
for ($i = 1; $i -lt [BitConverter]::ToUInt16($rec, 6); $i++) { $rec[$i * 512 - 2] = $rec[$uo + 2 * $i]; $rec[$i * 512 - 1] = $rec[$uo + 2 * $i + 1] }
$a = [int][BitConverter]::ToUInt16($rec, 20)
while ($true) { $t = [BitConverter]::ToUInt32($rec, $a); if ($t -eq [uint32]::MaxValue) { throw 'No $DATA in record 0' }; if ($t -eq 0x80 -and $rec[$a + 9] -eq 0) { break }; $a += [int][BitConverter]::ToUInt32($rec, $a + 4) }
$size = [BitConverter]::ToInt64($rec, $a + 48); $p = $a + [BitConverter]::ToUInt16($rec, $a + 32)
$out = [IO.File]::Create($dst); $buf = New-Object byte[] 4MB; $lcn = [long]0
while ($rec[$p] -ne 0) {
$ln = $rec[$p] -band 15; $lo = $rec[$p] -shr 4; $len = [long]0; $d = [long]0
for ($i = $ln; $i -ge 1; $i--) { $len = $len * 256 + $rec[$p + $i] }
for ($i = $ln + $lo; $i -gt $ln; $i--) { $d = $d * 256 + $rec[$p + $i] }
if ($lo -gt 0 -and $rec[$p + $ln + $lo] -ge 128) { $d -= [long]1 -shl (8 * $lo) }
$lcn += $d; $p += 1 + $ln + $lo; $left = $len * $cs; [void]$vol.Seek($lcn * $cs, 'Begin')
while ($left -gt 0) { $n = $vol.Read($buf, 0, [int][math]::Min($left, $buf.Length)); if ($n -le 0) { throw 'Short read' }; $out.Write($buf, 0, $n); $left -= $n }
}
$out.SetLength($size); $out.Close(); $vol.Close()
Get-FileHash -Algorithm SHA256 $dstGrava C:\triage\$MFT e mostra o SHA-256. Solte esse arquivo acima.
KAPE
Prompt elevado, na pasta do KAPE. O target FileSystem também pega $LogFile, $J, $Boot e $SDS.
kape.exe --tsource C: --target FileSystem --tdest C:\triageO arquivo fica em C:\triage\C\$MFT.
FTK Imager (host ao vivo)
- Como administrador: File → Add Evidence Item → Physical Drive → escolha o disco do sistema.
- Expanda a partição NTFS → [root].
- Clique com o botão direito em
$MFT→ Export Files → escolhaC:\triage.
The Sleuth Kit (Linux, macOS, WSL)
mmls disk.E01
icat -o <start-sector> disk.E01 0 > MFTmmls lista as partições: use o setor Start da NTFS (muitas vezes 2048). Para imagem de um único volume, tire o -o. O inode 0 é sempre $MFT; o nome do arquivo de saída não importa.
FTK Imager
- File → Add Evidence Item → Image File → selecione o .E01, .dd ou .vmdk.
- Expanda a partição NTFS → [root].
- Clique com o botão direito em
$MFT→ Export Files.
No navegador
Abra a imagem no Disk Image Parser, também sem upload, e exporte $MFT da raiz do volume.
O $MFT fica na raiz de cada volume NTFS (C:\, D:\, …). É um metarquivo de sistema oculto, por isso o Explorer nunca o mostra.
C:\$MFTMaster File Table — uma por volume NTFSC:\$Extend\$UsnJrnl:$JDiário de alterações USN (fluxo de dados $J)C:\$BootRegistro de inicialização do volumeC:\$Secure:$SDSFluxo de descritores de segurançaC:\<folder>\$I30Índice de diretório ($INDEX_ALLOCATION), um por pasta\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\$MFTCópias antigas nas cópias de sombra de volume (vssadmin list shadows)
A ferramenta abre um arquivo por vez: só o $MFT já basta. $J, $Boot, $SDS e $I30 abrem do mesmo jeito; na visão do $J, vincule o $MFT para resolver nomes e caminhos.
Armadilhas
copy,robocopye o Explorer não leem$MFT: o Windows o bloqueia. É preciso um leitor bruto (o script, KAPE, FTK Imager) e um prompt elevado.- Um
$MFTpor volume. ParaD:, troque$drive = 'C:'no script (ou--tsourceno KAPE). - BitLocker: a coleta ao vivo lê dados já decifrados, mas a imagem de um disco cifrado precisa ser desbloqueada (chave de recuperação) antes de exportar
$MFT.
Sobre este parser MFT
Um parser MFT lê a Master File Table do NTFS — o arquivo $MFT no início de cada volume NTFS — e transforma seus registros de 1.024 bytes em algo com que um analista forense pode trabalhar: nomes de arquivos, timestamps, diretórios pai, fluxos de dados alternativos, entradas excluídas e dados residentes. Este site é um desses parsers. Roda no seu navegador.
Solte um arquivo $MFT sobre a área acima. O arquivo é carregado na memória do navegador, analisado pela crate Rust omerbenamram/mft compilada para WebAssembly, e exibido em uma tabela paginada e pesquisável. Nada é enviado — você pode verificar desconectando sua rede antes de soltar o arquivo. Exportação para CSV e um relatório de triagem ficam disponíveis para análise posterior.
O que ele mostra
- Cada registro MFT, alocado ou excluído, com o flag in-use exposto.
- Os dois conjuntos de timestamps — $STANDARD_INFORMATION e $FILE_NAME — para identificar timestomping num relance.
- Os fluxos de dados alternativos associados a cada registro, incluindo Zone.Identifier.
- Os bytes $DATA residentes dos arquivos pequenos — muitas vezes a única versão recuperável após a exclusão.
- Reconstrução completa do caminho seguindo as referências pai pela tabela.
Como se compara a outros parsers MFT
Em uma workstation de análise Windows, MFTECmd é o CLI padrão e produz o CSV que Timeline Explorer e KAPE esperam. Para scripts em Linux, o CLI e a crate Rust omerbenamram/mft emitem JSON Lines. Este parser de navegador ocupa o terceiro espaço: zero instalação, roda em qualquer lugar que um navegador rode, adequado para triagem rápida e para situações em que as evidências não podem ser enviadas para um serviço em nuvem. Comparação completa no artigo Comparativo de parsers MFT.
Obter uma $MFT para analisar
$MFT fica bloqueado enquanto o Windows está em execução. Para extrair uma cópia, use fsutil em um sistema vivo, Disk Image Parser para exportá-lo de uma imagem de disco (E01, dd, VMDK, VHD) direto no navegador, ou o alvo MFT do KAPE para uma coleta de triagem completa. Passo a passo em como extrair $MFT de um sistema Windows em execução.
Ferramentas relacionadas
FAQ forense
Respostas diretas sobre NTFS, a $MFT e como este analisador trata suas evidências.
O que é a Master File Table?
A Master File Table ($MFT) é o índice de metadados do NTFS. Cada arquivo e diretório do volume tem ao menos um registro de 1.024 bytes em $MFT descrevendo seu nome, atributos, carimbos de tempo e onde seus dados ficam no disco.
O que significa MFT?
MFT significa Master File Table. No disco é escrita $MFT — o cifrão é a convenção do NTFS para arquivos de metadados.
Quais atributos de arquivo são armazenados na Master File Table?
Cada registro carrega $STANDARD_INFORMATION (carimbos de tempo, flags DOS), $FILE_NAME (nome e um segundo conjunto de carimbos de tempo) e $DATA (o conteúdo do arquivo ou seus cluster runs). Os registros também podem carregar $ATTRIBUTE_LIST, $OBJECT_ID, $SECURITY_DESCRIPTOR, $INDEX_ROOT, $INDEX_ALLOCATION, $BITMAP, $REPARSE_POINT, $EA e $LOGGED_UTILITY_STREAM.
Como extraio o $MFT de um sistema Windows?
O $MFT é o primeiro arquivo de todo volume NTFS e fica bloqueado enquanto o Windows está em execução. Use KAPE ou o comando Windows «fsutil» para exportar uma cópia de um sistema ativo, ou abra uma imagem de disco no Disk Image Parser (diskimageparser.com) e exporte-o direto no navegador.
Como conserto uma Master File Table corrompida?
Faça uma imagem do disco antes de qualquer coisa. Depois rode chkdsk /f contra a imagem (rápido, pode descartar registros ilegíveis) ou use uma ferramenta de recuperação que escaneie o volume bruto por assinaturas «FILE» e remonte os registros (lento, preserva mais evidências). Nunca rode chkdsk contra o original antes da imagem.
Esta ferramenta envia meu $MFT para algum lugar?
Não. A análise ocorre em um Web Worker via WebAssembly. O arquivo é carregado na memória do navegador e nunca é transmitido. Desconecte a rede se quiser verificar.
Por que algumas entradas aparecem como excluídas?
Cada registro MFT tem um sinalizador de «em uso». Quando um arquivo é excluído, o sinalizador é apagado mas o registro permanece em $MFT até ser reutilizado. Essas entradas excluídas costumam preservar nomes recuperáveis, timestamps e até dados residentes.
Consegue processar arquivos $MFT muito grandes?
A análise roda em uma thread de Web Worker dedicada. O uso de memória cresce linearmente com o tamanho do arquivo. Arquivos $MFT de vários gigabytes funcionam em navegadores modernos, mas a leitura inicial para a memória leva um instante.
Sua $MFT, decodificada em segundos.
Sem conta, sem instalação, sem envio. Solte um arquivo — ou comece com a amostra sintética.