Parser MFTvisor MFT online y analizador $MFT NTFS
Un parser MFT que se ejecuta íntegramente en tu navegador. Suelta un archivo $MFT NTFS e inspecciona cada registro — entradas eliminadas, marcas de tiempo $STANDARD_INFORMATION y $FILE_NAME, flujos de datos alternativos, datos residentes — sin enviar un solo byte. WebAssembly bajo el capó y el crate de Rust omerbenamram/mft haciendo el parsing.
- 0 bytessubidos, nunca
- Rust → Wasmvelocidad nativa
- 5 artefactos$MFT · $J · $Boot · $SDS · $I30
- Multi-GBvolúmenes, en un Web Worker
Cada registro. Cada marca de tiempo. Cero subidas.
Un banco de triaje NTFS completo compilado a WebAssembly: la velocidad de una herramienta nativa con la comodidad de una web.
Registros eliminados, a la vista
Las entradas no asignadas siguen en la $MFT hasta que se reutilizan. Fíltralas con un clic y ve qué se borró, cuándo y dónde estaba.
Privado por diseño
El análisis corre en un Web Worker en tu equipo. Desconecta la red: sigue funcionando.
Timestomping de un vistazo
$STANDARD_INFORMATION y $FILE_NAME lado a lado: los archivos con fechas falsificadas destacan.
Flujos de datos alternativos
Zone.Identifier, cargas ocultas y $DATA residente, descargables desde el registro.
Explorador de carpetas
Rutas completas reconstruidas desde las referencias padre, incluidas carpetas eliminadas huérfanas.
Más allá de la $MFT
$UsnJrnl:$J, $Boot, $Secure:$SDS e índices $I30 se detectan y decodifican automáticamente.
Exportaciones listas para informe
CSV, supertimeline e informe de triaje HTML, acotados a cualquier rango de tiempo.
Cómo obtener tus datos
¿Nunca has recolectado un $MFT? Elige el primer método que encaje: la mayoría termina en menos de dos minutos.
- Recolectar: ejecuta un comando de abajo
- Suelta el archivo
$MFTen el recuadro de arriba - Se analiza en tu navegador, nunca se sube
PowerShell integrado, nada que instalar
Solo Windows · abre PowerShell con «Ejecutar como administrador» · pega el bloque completo.
# 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 $dstCrea C:\triage\$MFT y muestra su SHA-256. Suelta ese archivo arriba.
KAPE
Consola elevada, desde la carpeta de KAPE. El target FileSystem también recoge $LogFile, $J, $Boot y $SDS.
kape.exe --tsource C: --target FileSystem --tdest C:\triageEl archivo queda en C:\triage\C\$MFT.
FTK Imager (equipo en vivo)
- Como administrador: File → Add Evidence Item → Physical Drive → elige el disco del sistema.
- Despliega la partición NTFS → [root].
- Clic derecho en
$MFT→ Export Files → eligeC:\triage.
The Sleuth Kit (Linux, macOS, WSL)
mmls disk.E01
icat -o <start-sector> disk.E01 0 > MFTmmls lista las particiones: usa el sector Start de la NTFS (a menudo 2048). Si la imagen es de un solo volumen, quita -o. El inodo 0 siempre es $MFT; el nombre del archivo de salida da igual.
FTK Imager
- File → Add Evidence Item → Image File → selecciona el .E01, .dd o .vmdk.
- Despliega la partición NTFS → [root].
- Clic derecho en
$MFT→ Export Files.
En el navegador
Abre la imagen en Disk Image Parser, también sin subir nada, y exporta $MFT desde la raíz del volumen.
$MFT está en la raíz de cada volumen NTFS (C:\, D:\, …). Es un metarchivo de sistema oculto, así que el Explorador nunca lo muestra.
C:\$MFTMaster File Table — una por volumen NTFSC:\$Extend\$UsnJrnl:$JDiario de cambios USN (flujo de datos $J)C:\$BootRegistro de arranque del volumenC:\$Secure:$SDSFlujo de descriptores de seguridadC:\<folder>\$I30Índice de directorio ($INDEX_ALLOCATION), uno por carpeta\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy1\$MFTCopias anteriores dentro de las instantáneas de volumen (vssadmin list shadows)
La herramienta abre un archivo a la vez: con $MFT basta. $J, $Boot, $SDS e $I30 se abren igual; en la vista de $J, vincula el $MFT para resolver nombres y rutas.
Trampas habituales
copy,robocopyy el Explorador no pueden leer$MFT: Windows lo bloquea. Necesitas un lector en bruto (el script, KAPE, FTK Imager) y una consola elevada.- Un
$MFTpor volumen. ParaD:, cambia$drive = 'C:'en el script (o--tsourceen KAPE). - BitLocker: la recolección en vivo lee datos descifrados, pero la imagen de un disco cifrado debe desbloquearse (clave de recuperación) antes de exportar
$MFT.
Sobre este parser MFT
Un parser MFT lee la Master File Table de NTFS — el fichero $MFT al inicio de cada volumen NTFS — y convierte sus registros de 1 024 bytes en algo que un analista forense puede explotar: nombres de archivos, marcas de tiempo, directorios padre, flujos de datos alternativos, entradas eliminadas y datos residentes. Este sitio es uno de esos parsers. Funciona en tu navegador.
Suelta un fichero $MFT sobre la zona de arriba. El fichero se carga en la memoria del navegador, lo analiza el crate Rust omerbenamram/mft compilado a WebAssembly, y se muestra en una tabla paginada y buscable. Nada se sube — puedes verificarlo desconectando tu red antes de soltar el fichero. Hay exportación a CSV y un informe de triaje disponibles para el análisis posterior.
Qué te muestra
- Cada registro MFT, asignado o eliminado, con el flag in-use expuesto.
- Los dos conjuntos de marcas de tiempo — $STANDARD_INFORMATION y $FILE_NAME — para detectar el timestomping de un vistazo.
- Los flujos de datos alternativos asociados a cada registro, incluyendo Zone.Identifier.
- Los bytes $DATA residentes de los ficheros pequeños — a menudo la única versión recuperable tras la eliminación.
- La reconstrucción completa del path siguiendo las referencias padre a través de la tabla.
Cómo se compara con otros parsers MFT
En una estación de análisis Windows, MFTECmd es el CLI estándar y produce el CSV que Timeline Explorer y KAPE esperan. Para scripting en Linux, el CLI y el crate Rust omerbenamram/mft emiten JSON Lines. Este parser de navegador ocupa el tercer hueco: cero instalación, funciona en cualquier sitio donde haya un navegador, adecuado para triaje rápido y para situaciones en las que las pruebas no pueden enviarse a un servicio en la nube. Comparativa completa en el artículo Comparativa de parsers MFT.
Obtener un $MFT para analizar
$MFT está bloqueado mientras Windows está en marcha. Para extraer una copia, usa fsutil en un sistema vivo, Disk Image Parser para exportarlo de una imagen de disco (E01, dd, VMDK, VHD) desde el navegador, o el objetivo MFT de KAPE para una recogida de triaje completa. Paso a paso en cómo extraer $MFT de un sistema Windows en ejecución.
Herramientas relacionadas
- USN ParserLos registros USN hacen referencia a números de entrada de la MFT, así que el diario muestra qué le pasó a cada archivo en el tiempo.
- $LogFile Parser$LogFile guarda las transacciones redo/undo detrás de los cambios recientes en los registros de la MFT.
- Disk Image ParserExporta $MFT de una imagen E01, dd o VMDK en el navegador, sin subirla.
FAQ forense
Respuestas directas sobre NTFS, la $MFT y cómo este analizador trata tus evidencias.
¿Qué es la Master File Table?
La Master File Table ($MFT) es el índice de metadatos de NTFS. Cada archivo y carpeta del volumen tiene al menos un registro de 1024 bytes en $MFT que describe su nombre, atributos, marcas de tiempo y dónde residen sus datos en disco.
¿Qué significa MFT?
MFT significa Master File Table. En disco se escribe $MFT — el signo dólar es la convención NTFS para los archivos de metadatos.
¿Qué atributos de archivo se almacenan en la Master File Table?
Cada registro lleva $STANDARD_INFORMATION (marcas de tiempo, banderas DOS), $FILE_NAME (nombre y un segundo conjunto de marcas de tiempo) y $DATA (el contenido del archivo o sus cluster runs). Los registros también pueden llevar $ATTRIBUTE_LIST, $OBJECT_ID, $SECURITY_DESCRIPTOR, $INDEX_ROOT, $INDEX_ALLOCATION, $BITMAP, $REPARSE_POINT, $EA y $LOGGED_UTILITY_STREAM.
¿Cómo extraigo $MFT de un sistema Windows?
$MFT es el primer archivo de todo volumen NTFS y está bloqueado mientras Windows está en ejecución. Usa KAPE o el comando «fsutil» de Windows para exportar una copia desde un sistema en vivo, o abre una imagen de disco en Disk Image Parser (diskimageparser.com) y expórtalo desde el navegador.
¿Cómo reparo una Master File Table corrupta?
Crea primero una imagen del disco. Luego ejecuta chkdsk /f sobre la imagen (rápido, puede descartar registros ilegibles) o usa una herramienta de recuperación que escanee el volumen crudo buscando firmas «FILE» y reconstruya los registros (lento, preserva más evidencia). Nunca ejecutes chkdsk sobre el original antes de crear la imagen.
¿Esta herramienta sube mi $MFT a algún sitio?
No. El análisis ocurre en un Web Worker mediante WebAssembly. El archivo se carga en la memoria del navegador y nunca se transmite. Desconecta la red si quieres comprobarlo.
¿Por qué algunas entradas aparecen como eliminadas?
Cada registro MFT tiene una marca de «en uso». Cuando se elimina un archivo, la marca se borra pero el registro permanece en $MFT hasta que se reutiliza. Estas entradas eliminadas suelen conservar nombres recuperables, marcas de tiempo e incluso datos residentes.
¿Puede procesar archivos $MFT muy grandes?
El análisis se ejecuta en un hilo de Web Worker dedicado. La memoria crece linealmente con el tamaño del archivo. Archivos $MFT de varios gigabytes funcionan en navegadores modernos, aunque la lectura inicial a memoria tarda un instante.
Tu $MFT, decodificada en segundos.
Sin cuenta, sin instalación, sin subidas. Suelta un archivo o empieza con la muestra sintética.