¿Qué es el $LogFile de NTFS?
$LogFile es el diario de transacciones de NTFS (entrada MFT 2). Antes de cambiar sus propios metadatos — un registro FILE, un índice de carpeta, un mapa de bits —, NTFS escribe un registro que describe el cambio dos veces: una operación redo (cómo aplicarlo) y una operación undo (cómo deshacerlo). Tras un fallo, Windows rehace o deshace esos registros para mantener el volumen coherente.
Para quien investiga, esos bytes redo y undo son oro: contienen los nombres de archivo, las carpetas padre, las referencias MFT y las marcas de tiempo de cada cambio de metadatos, antes y después. Con ellos se reconstruyen creaciones, borrados, renombrados y reescrituras de marcas de tiempo, incluso si el diario USN estaba desactivado o se vació.
Dónde se almacena
- \$LogFile en la raíz de cada volumen NTFS (C:\$LogFile, D:\$LogFile…). Es un archivo de metadatos oculto: el Explorador y la copia normal no pueden abrirlo — hace falta un lector NTFS en bruto.
- Tamaño por defecto: 64 MiB en los Windows actuales (configurable con chkdsk /L). Es circular: los registros nuevos sobrescriben los más antiguos, así que suele cubrir de minutos a pocas horas de actividad en un sistema cargado.
- Estructura: dos páginas de reinicio (RSTR), luego 2 páginas de cola (formato 1.1, Windows XP a 7, y Windows 8+ tras un apagado limpio) o 32 páginas rápidas (formato 2.0, Windows 8+ con el volumen montado), y después el área circular de páginas de registros (RCRD), cada una protegida por una matriz de secuencia de actualización.
Por qué importa en una investigación
- Creaciones de archivos y carpetas (InitializeFileRecordSegment + AddIndexEntry), borrados (DeleteIndexEntry + DeallocateFileRecordSegment) y renombrados o movimientos, con la entrada MFT y el número de secuencia.
- Timestomping: un UpdateResidentValue sobre $STANDARD_INFORMATION lleva la marca de tiempo antigua y la nueva — una fecha de creación reescrita a 2019 se ve como tal.
- Contenido de archivos pequeños, a veces: los datos guardados dentro del registro FILE (residentes, hasta ~700 bytes) pueden aparecer en los datos redo/undo — a veces incluso de notas o scripts borrados un minuto después. En Windows recientes muchas modificaciones solo registran que hubo un cambio, así que trata el contenido recuperado como un extra, no como algo seguro.
- Complementa $UsnJrnl:$J (historial más largo, pero solo motivos y nombres) y el $MFT (solo el estado actual): el $LogFile da los valores antes / después.
Limitaciones
- Retención corta: el diario es circular, solo queda la actividad reciente. Recógelo pronto.
- Los registros no llevan hora. Las horas mostradas salen de los valores $FILE_NAME / $STANDARD_INFORMATION de los datos; los eventos sin hora toman la del evento fechado más cercano y se marcan con ≈.
- Los nombres solo se conocen si aparecen en el diario; sin el $MFT, algunas rutas empiezan por [MFT #n] o faltan.
- El contenido no residente de los archivos nunca está en el $LogFile (solo metadatos). La agrupación por transacción, el complemento $UsnJrnl y el slack de $I30 aún no se usan.
- El analizador está validado con diarios sintéticos construidos según el formato publicado (Linux ntfs3, libfsntfs) — verifica los hallazgos importantes con una segunda herramienta.
Cómo obtener los archivos
- KAPE: los targets $LogFile y $MFT (o !SANS_Triage) los recogen en bruto de cada volumen. Velociraptor: Windows.Triage.Targets con sus targets LogFile y MFT (antes Windows.KapeFiles.Targets), o el accesor NTFS.
- Desde una imagen de disco: FTK Imager (exportar desde [root]) o The Sleuth Kit: icat -f ntfs image.dd 2 > '$LogFile' e icat … 0 > '$MFT'.
- Toma el $LogFile y el $MFT del mismo volumen a la vez, y conserva la estructura de carpetas (C/, D/…) para que cada diario se empareje con su $MFT.
Preguntas frecuentes
¿Se sube mi $LogFile a algún sitio?
No. El analizador está escrito en Rust compilado a WebAssembly y se ejecuta en un Web Worker de tu navegador. No hay ningún punto de subida; el $MFT se lee por bloques y solo se guardan los nombres de archivo y sus padres.
¿Por qué añadir el $MFT?
Los registros apuntan a entradas MFT, y el nombre de un archivo solo se registra cuando se crea, se renombra o se borra. El $MFT nombra el resto de entradas y todas las carpetas padre, así que las rutas quedan completas (\Windows\System32\… en lugar de [MFT #44]).
¿Cómo detecta el timestomping?
Cada actualización de $STANDARD_INFORMATION en el diario lleva el valor antiguo y el nuevo. Se marcan una fecha de creación reescrita, una marca de tiempo que retrocede, un valor en segundos exactos o una creación anterior a la de $FILE_NAME — indicios que hay que verificar, no pruebas.
¿Admite diarios de Windows 8, 10 y 11?
Sí: el formato 2.0 (32 páginas rápidas, usado con el volumen montado en Windows 8 y posteriores) y el 1.1 (Windows antiguos, o tras un apagado limpio). La página más reciente, a menudo solo presente en el área de cola / páginas rápidas de una captura en vivo, se usa si es más nueva que su copia circular.
¿En qué se diferencia de LogFileParser o NTFS Log Tracker?
Mismos datos de origen, sin instalación: funciona en el navegador, muestra cada registro en bruto junto a los eventos reconstruidos, resuelve rutas con el $MFT y exporta CSV / JSON. Esas herramientas son más maduras — úsalas para confirmar los hallazgos clave.