MFTparser
100 % no navegador · nada é enviado

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.

$MFT sintético de uma intrusão fictícia — nenhum dado real. Dica: Intervalo de tempo → “Última hora” enquadra o ataque.
Por que o MFT Parser

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.

  1. Coletar: rode um comando abaixo
  2. Solte o arquivo $MFT na caixa acima
  3. Analisado no seu navegador, nunca enviado

PowerShell nativo, nada para instalar

Só Windows · abra o PowerShell com «Executar como administrador» · cole o bloco inteiro.

PowerShell (admin)
# 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 $dst

Grava C:\triage\$MFT e mostra o SHA-256. Solte esse arquivo acima.

Armadilhas

  • copy, robocopy e o Explorer não leem $MFT: o Windows o bloqueia. É preciso um leitor bruto (o script, KAPE, FTK Imager) e um prompt elevado.
  • Um $MFT por volume. Para D:, troque $drive = 'C:' no script (ou --tsource no 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.
Por dentro

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.

FAQ

FAQ forense

Respostas diretas sobre NTFS, a $MFT e como este analisador trata suas evidências.

Ler as notas forenses
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.