Skip to content

Marcas de tiempo de ShellBags: qué significa cada fecha

LastWrite de clave, última interacción derivada del MRUListEx y fechas FAT incrustadas: qué prueba cada fecha de los ShellBags, con ejemplo y trampas.

Publicado el 7 min de lectura

TL;DR. Una entrada de ShellBags implica tres tipos distintos de fecha. El LastWrite de la clave (un FILETIME de 100 ns) indica cuándo cambió por última vez esa clave BagMRU, algo que depende de sus hijos. La «última interacción» es derivada: el hijo en primera posición del MRUListEx de un padre era el más reciente cuando se escribió la clave padre, así que hereda el LastWrite del padre. Las fechas incrustadas de creación/modificación/acceso son las propias de la carpeta en el sistema de archivos, en formato FAT de 2 segundos, capturadas al registrar el item y no actualizadas después. Solo el segundo tipo se acerca a «cuándo estuvo allí el usuario», y solo para un hijo por carpeta.

Si un hallazgo de ShellBags va a ser impugnado, lo será por las marcas de tiempo. El artefacto contiene muchas fechas; muy pocas significan lo que el lector supone.

Los tres tipos de fecha

FechaDe dónde saleFormatoQué significa
LastWrite de la claveMetadato del registro de la subclave BagMRUFILETIME, UTC, 100 nsCuándo cambió algo en esta clave: se añadió un hijo, se reescribió MRUListEx, se actualizó un valor.
Última interacción (derivada)LastWrite de la clave padre, para el hijo en la posición 0 del MRUListExFILETIME, UTCCuándo este hijo pasó a ser (o se confirmó como) el hijo usado más recientemente del padre.
Creación / modificación / acceso incrustadasEl shell item y su bloque 0xBEEF0004Fecha/hora FAT, resolución 2 sFechas de la propia carpeta en el sistema de archivos cuando se construyó el shell item.

Las dos primeras son fechas del registro. La tercera es un metadato del sistema de archivos que acabó copiado en el registro.

Cómo MRUListEx convierte la fecha de una clave en una fecha de interacción

Cada clave BagMRU contiene un valor binario MRUListEx: una lista de números de ranura de 32 bits, del usado más recientemente al más antiguo, terminada en 0xFFFFFFFF. Cuando el usuario entra en uno de los hijos, el Explorador mueve la ranura de ese hijo al principio y reescribe MRUListEx. Reescribir un valor actualiza el LastWrite de la clave.

Por tanto, en el momento en que se escribió por última vez la clave padre, el hijo en la posición 0 era el que se estaba usando. Ese es el razonamiento detrás de la columna «last interacted» de herramientas como ShellBags Explorer y SBECmd, y el que 4n6k expuso con pruebas paso a paso. Solo funciona para la posición 0. Para cualquier otro hijo, el LastWrite del padre no dice nada de cuándo se usó por última vez.

ShellBags Explorer muestra también una fecha «first interacted» para algunas entradas. La idea: una clave sin subclaves no ha tenido hijos que reordenar, así que su LastWrite está cerca de su creación. Tómela como una aproximación y lea la documentación de la herramienta antes de citarla.

Un ejemplo práctico

ShellBags Parser incluye una muestra sintética (datos ficticios) en la que la cuenta svc_backup recorre un recurso compartido de finanzas. Simplificadas, las claves relevantes son estas:

BagMRU\1\0\0                    \\FILESRV01\Finance   LastWrite 2026-09-14 10:36:18 UTC
  values: 0 = Payroll, 1 = Board
  MRUListEx = 1, 0, FFFFFFFF
BagMRU\1\0\0\0                  Payroll               LastWrite 2026-09-14 10:32:40 UTC (no subkeys)
BagMRU\1\0\0\1                  Board                 LastWrite 2026-09-14 10:36:18 UTC (no subkeys)

Lo que se puede afirmar:

  • Board está en la posición MRU 0 dentro de Finance, así que su última interacción es el LastWrite de la clave Finance: 10:36:18 UTC.
  • Payroll está en la posición 1. El LastWrite de Finance no lo fecha. El LastWrite de su propia clave (10:32:40) es cuándo cambió esa clave por última vez; como no tiene hijos, es una aproximación razonable de cuándo se registró por primera vez, no una prueba de la última visita.
  • El orden es sólido: Board se usó más recientemente que Payroll.

En la herramienta, «Última interacción» solo se rellena para las entradas en posición MRU 0, y la vista «Cronología» recurre a «Última escritura de la clave» para el resto, de modo que siempre ve qué tipo de fecha está ordenando.

Qué son las fechas incrustadas

Un shell item de tipo file entry contiene una fecha de modificación en el offset 8. Desde Windows XP, su bloque de extensión 0xBEEF0004 añade las fechas de creación y último acceso, según la especificación de libfwsi. Son las fechas del propio directorio, leídas del sistema de archivos cuando se construyó el item. Las pruebas de 4n6k comprobaron que no se actualizan después de crearse el shell item.

Útiles para:

  • Fechar una carpeta que ya no existe (véase carpetas borradas).
  • Relacionar una carpeta de un soporte extraíble con la misma carpeta en una imagen de disco incautada.
  • Mostrar que una carpeta se creó poco antes de visitarla (un patrón de preparación).

No sirven para: decir cuándo la abrió el usuario.

Formatos y precisión

  • Fecha/hora FAT. Dos valores de 16 bits: fecha (año desde 1980, mes, día) y hora (hora, minuto, segundos/2). Microsoft documenta la estructura en DosDateTimeToFileTime. Los segundos siempre son pares. Espere hasta 1 segundo de diferencia al comparar con un FILETIME de la $MFT o del diario USN.
  • Zona horaria. libfwsi documenta las fechas FAT de los shell items como UTC. Los LastWrite del registro son FILETIME en UTC. Presente todo en UTC en los informes y convierta solo para visualizar.
  • Sistemas de archivos FAT. Para carpetas en volúmenes FAT (muchas memorias USB), el propio sistema de archivos guarda la hora local, y el último acceso es solo una fecha. La página de Microsoft File Times indica que el acceso en FAT tiene una resolución de un día. No lea una hora en un valor de acceso de una memoria FAT32.

Trampas que veo en los informes

  1. «La carpeta X se abrió por última vez a [LastWrite de la clave]». Falso salvo que X esté en la posición MRU 0 de su padre, y aun así la hora pertenece a la clave padre.
  2. «El usuario accedió a la carpeta a [fecha de acceso incrustada]». Es la fecha de acceso de la carpeta en el sistema de archivos cuando se registró el item.
  3. Usar el LastWrite de un padre para todos sus hijos. Solo un hijo lo hereda.
  4. Suponer que toda escritura se debe a una navegación. Los cambios de vista (orden, tamaño de iconos) y el mantenimiento del Explorador también escriben claves. La fecha acota un suceso; no lo nombra.
  5. Precisión al minuto sin corroboración. Las escrituras del registro pueden ir por detrás del clic. Contraste con archivos LNK, Jump Lists, registros de eventos y el diario USN antes de afirmar una hora precisa.
  6. Hive sin reproducir. En un hive sucio, los LastWrite más recientes pueden estar en los registros de transacciones.
  7. Problemas de reloj. Un reloj del sistema erróneo o modificado a propósito desplaza todas las fechas del registro. Revise los eventos de cambio de hora del sistema.

Cómo redactarlo

Una formulación defendible: «La entrada BagMRU de \\FILESRV01\Finance\Board era el hijo usado más recientemente de \\FILESRV01\Finance cuando esa clave se escribió por última vez, el 2026-09-14 a las 10:36:18 UTC. Esto es coherente con que la cuenta navegara a esa carpeta en ese momento o poco antes». Después, cite el artefacto que lo corrobora.

Preguntas frecuentes

¿El LastWrite de una clave de ShellBags es la última vez que se abrió la carpeta?

En general, no. El LastWrite de una clave BagMRU cambia cuando cambian sus propios valores, lo que ocurre cuando se añaden o reordenan sus hijos. Solo el hijo en primera posición del MRUListEx de un padre puede vincularse al LastWrite de ese padre.

¿Las fechas de creación/modificación/acceso de un ShellBag son fechas de acceso del usuario?

No. Son las fechas de la propia carpeta en el sistema de archivos, copiadas en el shell item cuando se registró, y no se actualizan en visitas posteriores.

¿Por qué las horas de los ShellBags acaban en segundos pares?

Las fechas incrustadas se almacenan en formato de fecha/hora FAT (DOS), que tiene una resolución de 2 segundos para la hora.

Artículos relacionados

Artículos relacionados