Artefactos de Windows · Lección 5 de 9
Shellbags
11 min de lectura
Windows recuerda el aspecto que tenía cada carpeta la última vez que un usuario accedió a ella en el Explorador: tamaño y posición de la ventana, orden de clasificación, modo de vista y tamaño de los iconos. Estos registros, llamados Shellbags, perduran después de que la carpeta, la unidad USB o el recurso compartido de red hayan desaparecido. Esta lección explica dónde se almacenan, cómo reconstruir las rutas de las carpetas a partir de ellos y hasta qué punto se puede confiar en sus marcas de tiempo.
Qué son los Shellbags y por qué les interesan a los examinadores
Los Shellbags los escribe el shell de Windows, que controla el Explorador de archivos, el escritorio y los cuadros de diálogo estándar Abrir/Guardar. Cuando un usuario abre una carpeta a través del shell, Windows registra la posición de la carpeta en el espacio de nombres del shell (Escritorio, Este equipo, E:\, Clients …) en el subárbol del Registro del usuario, con un espacio para su configuración de vista. No es necesario que el usuario cambie la vista para que se cree la entrada.
Esto constituye evidencia de que una cuenta de usuario específica accedió a una carpeta, incluidas carpetas que resultan difíciles de detectar por otros medios:
- carpetas en unidades extraíbles que ya no están conectadas;
- recursos compartidos de red (por ejemplo,
\\FILESRV01\Projects); - carpetas dentro de archivos ZIP abiertos en el Explorador como carpetas comprimidas;
- carpetas que posteriormente se eliminaron, se renombraron o se borraron de forma segura.
Los datos residen en un subárbol por usuario, por lo que se atribuyen a la cuenta propietaria de ese subárbol (Lección 2.2).
Dónde se encuentran
En Windows 7, 8, 10 y 11, la mayoría de los Shellbags se encuentran en UsrClass.dat, en C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat:
Local Settings\Software\Microsoft\Windows\Shell\BagMRULocal Settings\Software\Microsoft\Windows\Shell\Bags
En un sistema en ejecución, este subárbol se monta como HKEY_USERS\<SID>_Classes. NTUSER.DAT también contiene Software\Microsoft\Windows\Shell\BagMRU y Software\Microsoft\Windows\Shell\Bags; en estas versiones suele contener muchas menos entradas, pero no siempre está vacío, por lo que se deben analizar ambos subárboles.
En una recopilación de triaje, cabe esperar UsrClass.dat junto con UsrClass.dat.LOG1 y .LOG2: el subárbol suele tener cambios pendientes de consolidar, y las entradas recientes pueden existir únicamente en los registros de transacciones hasta que estos se reapliquen (Lección 2.1).
Estructura del árbol BagMRU
BagMRU es un árbol que refleja el espacio de nombres del shell. La propia clave BagMRU es la raíz (el Escritorio). Cada clave contiene:
- Valores numerados (
0,1,2…, REG_BINARY). Cada uno contiene un_ elemento del shell_: el identificador binario de una carpeta secundaria, en el formato ITEMIDLIST que también se utiliza en los archivos LNK. La subclave con el mismo número contiene los elementos secundarios de esa carpeta, por lo que la ruta completa de una carpeta es la cadena de elementos desde la raíz hacia abajo. - MRUListEx (REG_BINARY): los números de los valores secundarios como enteros de 4 bytes en little-endian, con el utilizado más recientemente en primer lugar y terminados en
0xFFFFFFFF. - NodeSlot (REG_DWORD): el número_ n_ de la clave
Bags\<n>que contiene la configuración de vista de esta carpeta. EnBags\<n>\Shell\<folder type GUID>se encuentran valores comoMode,LogicalViewMode,SorteIconSize; aparece una subclaveComDlgpara las carpetas visualizadas a través de los cuadros de diálogo Abrir/Guardar.
Los números no tienen ningún significado: el valor 2 es simplemente el tercer elemento secundario registrado bajo ese elemento principal.
Tipos de elementos del shell
Cada elemento del shell comienza con un tamaño de 2 bytes y un indicador de tipo de clase de 1 byte en el desplazamiento 2, que indica al analizador cómo leer el resto.
| Tipo de clase | Tipo de elemento | Qué contiene | Ejemplo |
|---|---|---|---|
| 0x1F | Carpeta raíz | Índice de ordenación (desplazamiento 3) y un GUID de 16 bytes (desplazamiento 4) | Mi PC {20D04FE0-3AEA-1069-A2D8-08002B30309D}, Red {F02C1A0D-BE21-4350-88B0-7367FC96EF3C} |
| 0x20–0x2F (a menudo 0x2F) | Volumen | Ruta con letra de unidad como cadena ASCII | E:\ |
| 0x31 | Entrada de archivo, directorio | Tamaño, fecha y hora de modificación DOS, atributos, nombre corto 8.3, bloques de extensión | CLIENTS / Clients |
| 0x32 | Entrada de archivo, archivo | La misma estructura, para un archivo que el shell trata como una carpeta | archive.zip |
| 0x40–0x4F | Ubicación de red | Nombre del servidor o del recurso compartido, descripción | \\FILESRV01\Projects |
| 0x61 | URI | Una URL, como una ubicación FTP | ftp://files.example.org |
Las carpetas dentro de un archivo ZIP aparecen debajo del elemento del propio archivo comprimido, uno de los pocos casos en los que aparece un nombre de archivo en los Shellbags.
Marcas de tiempo
Los Shellbags ofrecen dos tipos distintos de información temporal; no deben confundirse.
Marcas de tiempo LastWrite de las claves
Cada clave BagMRU tiene una marca de tiempo LastWrite (FILETIME, UTC): el último cambio en cualquier valor de esa clave, como la adición de un nuevo elemento secundario, la reordenación de MRUListEx porque se volvió a acceder a un elemento secundario o la creación de la clave. Por tanto, el LastWrite de un elemento principal indica cuándo cambió por última vez su lista de elementos secundarios, y el elemento secundario al principio de MRUListEx es el que con mayor probabilidad estuvo implicado. Hay una sola marca de tiempo por clave; las visitas anteriores se sobrescriben.
Marcas de tiempo dentro de los elementos de entrada de archivo
Un elemento de entrada de archivo (0x31/0x32) almacena, desde su inicio:
| Desplazamiento | Tamaño | Campo |
|---|---|---|
| 0x00 | 2 | Tamaño del elemento |
| 0x02 | 1 | Tipo de clase (0x31 directorio, 0x32 archivo) |
| 0x04 | 4 | Tamaño del archivo (0 para directorios) |
| 0x08 | 4 | Última modificación, fecha y hora DOS |
| 0x0C | 2 | Atributos del archivo (0x10 directorio) |
| 0x0E | var. | Nombre corto (8.3), ASCII, terminado en nulo |
Después del nombre corto hay un bloque de extensión con la firma 0xBEEF0004. Contiene las marcas de tiempo de creación y último acceso (también en formato de fecha/hora DOS), el nombre largo en UTF-16LE y, en Windows 10 y 11 para carpetas en NTFS, la referencia de archivo de 8 bytes de la carpeta (número de entrada de la MFT de 6 bytes más un número de secuencia de 2 bytes).
La fecha/hora DOS empaqueta una fecha de 16 bits (bits 15–9: año desde 1980, 8–5: mes, 4–0: día) y una hora de 16 bits (bits 15–11: hora, 10–5: minuto, 4–0: segundos divididos entre 2). Los segundos se almacenan en incrementos de 2, por lo que estos valores pueden diferir de las marcas de tiempo NTFS hasta en 2 segundos. Los analizadores como SBECmd los presentan en UTC.
Estas son las marcas de tiempo MAC de la propia carpeta en el momento en que se escribió el elemento, no las horas de acceso mediante navegación. Ayudan de forma indirecta: el elemento no puede ser anterior a su marca de tiempo de modificación incrustada, y la referencia MFT identifica la carpeta en la $MFT de la unidad (Lección 1.3).
"Primera interacción" y "última interacción"
Los analizadores las derivan de las marcas de tiempo LastWrite. Normalmente, si una carpeta encabeza el MRUListEx de su elemento principal, el LastWrite de ese elemento principal se presenta como la hora de última interacción de la carpeta; si la clave de la propia carpeta no tiene elementos secundarios, su LastWrite se presenta como primera interacción, ya que nada ha cambiado esa clave desde su creación. Se trata de inferencias, no de campos almacenados. Al informar sobre ellas, indique su origen ("la clave BagMRU\1\0\2 se escribió por última vez en T, con 2026 en primer lugar en su MRUListEx"), no afirme que "el usuario abrió 2026 en T", y corrobore la información con archivos LNK, Jump Lists (Lección 2.4) y horas de conexión USB (Lección 2.6).
Qué demuestran y qué no demuestran los Shellbags
Los Shellbags respaldan la afirmación de que esta cuenta de usuario accedió a esta ruta de carpeta a través del shell de Windows, al menos una vez y, como máximo, en el momento indicado por la marca de tiempo LastWrite pertinente. No demuestran:
- que se haya abierto, copiado o visto algún archivo de la carpeta: no se registran los nombres de archivos ordinarios;
- cuánto tiempo permaneció el usuario en ella ni con qué frecuencia accedió;
- que cada carpeta intermedia se haya abierto por separado: escribir una ruta completa en la barra de direcciones también crea nodos para las carpetas superiores;
- qué dispositivo físico se montó como E: (utilice los artefactos de la Lección 2.6 o la referencia MFT).
Eliminar una carpeta no elimina su Shellbag; solo la limpieza del subárbol lo hace (Módulo 7).
Ejemplos de herramientas: ShellBags Explorer (árbol gráfico), SBECmd (SBECmd.exe -d <hive folder> --csv <out>, una fila CSV por elemento con ruta absoluta, posición MRU, número de nodo, LastWrite y marcas de tiempo incrustadas) y Registry Explorer para las claves sin procesar.
Ejemplo resuelto: E:\Clients\2026\Contracts
El UsrClass.dat de la cuenta de usuario mira (Windows 11, registros reaplicados; E: era una unidad USB NTFS) contiene esta rama:
| Clave | Representa | Valor seguido y su elemento | MRUListEx | LastWrite (UTC) |
|---|---|---|---|---|
BagMRU | Escritorio (raíz) | 1: 0x1F, GUID de Mi PC | 1, 0 | 2026-03-12T07:58:20Z |
BagMRU\1 | Mi PC | 0: 0x2F, E:\ | 0, 1 | 2026-03-18T14:05:40Z |
BagMRU\1\0 | E:\ | 2: 0x31, Clients | 2, 0, 1 | 2026-03-18T14:05:44Z |
BagMRU\1\0\2 | E:\Clients | 0: 0x31, 2026 | 0, 1 | 2026-03-18T14:05:51Z |
BagMRU\1\0\2\0 | E:\Clients\2026 | 1: 0x31, Contracts | 1, 0 | 2026-03-18T14:06:03Z |
BagMRU\1\0\2\0\1 | E:\Clients\2026\Contracts | ninguno (sin elementos secundarios), NodeSlot 38 | ninguno | 2026-03-18T14:06:03Z |
Ruta. Al unir los elementos desde la raíz hacia abajo se obtiene E:\Clients\2026\Contracts, con la configuración de vista en Bags\38.
Marcas de tiempo incrustadas del elemento 2026. El campo de modificación contiene la palabra de fecha 0x5C62 y la palabra de hora 0x8509. Fecha: 0x5C62 = 23.650; 23.650 >> 9 = 46, por lo que el año es 1980 + 46 = 2026; (23.650 >> 5) & 0xF = 3 (marzo); 23.650 & 0x1F = 2. Hora: 0x8509 = 34.057; 34.057 >> 11 = 16 horas; (34.057 >> 5) & 0x3F = 40 minutos; (34.057 & 0x1F) × 2 = 9 × 2 = 18 segundos. Resultado: 2026-03-02T16:40:18Z. El bloque 0xBEEF0004 indica la creación en 2026-01-05T09:12:44Z y la entrada MFT 64, secuencia 1.
Qué se puede concluir sobre E:\Clients\2026:
- La cuenta
miraaccedió a través del shell aE:\Clients\2026en el volumen que estuviera montado como E:. - La clave
E:\Clientsse escribió por última vez en 2026-03-18T14:05:51Z con2026encabezando su MRUListEx: la afirmación mejor respaldada es que2026se añadió a las carpetas visitadas bajoClients, o se movió al principio de esa lista, en ese momento. - La clave
2026se escribió por última vez en 2026-03-18T14:06:03Z conContractsal principio, y la claveContracts, sin elementos secundarios, lleva la misma marca de tiempo: a las 14:06:03Z, el usuario llegó aContractsa través de2026, probablemente por primera vez. - No se puede determinar cuándo se accedió por primera vez a
2026; las visitas anteriores se sobrescriben. Las fechas incrustadas describen la carpeta y solo muestran que el elemento no se escribió antes de 2026-03-02T16:40:18Z. - Nada indica qué archivos de
Contractsse abrieron. Para vincular E: con la unidad de evidencia, busque la entrada MFT 64 en la $MFT de la imagen USB: la secuencia 1, el nombre2026y el elemento principalClientslo confirmarían.
Enfoque del examen: Prepárese para reconstruir una ruta de carpeta completa a partir de una rama BagMRU, incluidas ubicaciones extraíbles o de red, y para identificar la cuenta a partir del subárbol de origen. Es posible que se le pida una marca de tiempo LastWrite en formato ISO 8601 UTC, que la distinga de las marcas de tiempo incrustadas de la carpeta o que relacione una carpeta con su entrada MFT. Sepa qué no demuestra un Shellbag, en especial que se hayan abierto los archivos que contiene.
Puntos clave
- Los Shellbags registran las carpetas a las que un usuario accedió a través del shell de Windows, junto con la configuración de vista; persisten después de que la carpeta, la unidad o el recurso compartido hayan desaparecido.
- En Windows 7 y versiones posteriores se encuentran principalmente en UsrClass.dat (
Local Settings\Software\Microsoft\Windows\Shell\BagMRUyBags), con menos entradas en NTUSER.DAT (Software\Microsoft\Windows\Shell\BagMRUyBags); recopile también los archivos .LOG1/.LOG2. - BagMRU es un árbol: los valores numerados contienen elementos del shell, las subclaves con el mismo número contienen elementos secundarios, MRUListEx indica el orden y NodeSlot apunta a
Bags\<n>. - Las marcas de tiempo LastWrite de las claves muestran cuándo cambió por última vez la lista de elementos secundarios de un nodo; las marcas de tiempo DOS dentro de los elementos de entrada de archivo son las marcas de tiempo MAC de la propia carpeta en el momento del registro, con una resolución de 2 segundos.
- Los valores de "primera/última interacción" son inferencias derivadas de las marcas de tiempo LastWrite; indique su origen al informar sobre ellos y corrobórelos.
- Los Shellbags demuestran el acceso a una ruta, no que se haya abierto algún archivo dentro de ella.