Formato de thumbcache_*.db: cabecera CMMM y entradas
Estructura a nivel de byte de las bases thumbcache e iconcache de Windows, de Vista a Windows 11: cabecera, tipos de caché por versión y estructura de entrada.
Esta es una referencia de la estructura en disco de las cachés de miniaturas e
iconos del Explorador de Windows (thumbcache_*.db, iconcache_*.db). El
formato no está documentado por Microsoft. Lo que sigue es coherente con
investigaciones públicas y parsers de código abierto como Vinetto y Thumbcache
Viewer, y es lo que implementa Thumbcache Parser. Todos los enteros son
little-endian.
Cabecera del archivo
| Offset | Tamaño | Campo |
|---|---|---|
| 0 | 4 | Firma CMMM |
| 4 | 4 | Versión de formato |
| 8 | 4 | Tipo de caché (índice en la tabla siguiente) |
Lo que sigue depende de la versión:
| Versión | Escrita por | Offset 12 | Offset 16 | Offset 20 | Offset 24 |
|---|---|---|---|---|---|
0x14 | Vista | primera entrada | entrada disponible | número de entradas | – |
0x15 | 7 | primera entrada | entrada disponible | número de entradas | – |
0x1A | 8 | primera entrada | entrada disponible | número de entradas | – |
0x1C | 8 (v2) | reservado | primera entrada | entrada disponible | número de entradas |
0x1E | 8 (v3) | reservado | primera entrada | entrada disponible | – |
0x1F | 8.1 | reservado | primera entrada | entrada disponible | – |
0x20 | 10 / 11 | reservado | primera entrada | entrada disponible | – |
Primera entrada es el offset de la primera entrada de caché. Entrada
disponible marca el inicio del espacio libre: las entradas posteriores a ese
punto fueron liberadas, pero sus bytes suelen seguir intactos. Un parser
robusto debe comprobar que el offset de la primera entrada apunta realmente a
CMMM, y recurrir al escaneo si no es así.
Tipos de caché
El número de tipo de caché corresponde a la clase de tamaño del archivo, y la tabla cambió entre versiones:
| Versión | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Vista / 7 | 32 | 96 | 256 | 1024 | sr | |||||||||
| 8 (todas) | 16 | 32 | 48 | 96 | 256 | 1024 | sr | wide | exif | |||||
| 8.1 | 16 | 32 | 48 | 96 | 256 | 1024 | 1600 | sr | wide | exif | wide_alternate | |||
| 10 / 11 | 16 | 32 | 48 | 96 | 256 | 768 | 1280 | 1920 | 2560 | sr | wide | exif | wide_alternate | custom_stream |
Entrada de caché
Las entradas se suceden una tras otra. La cabecera ocupa 48 bytes en Windows 7 y 56 bytes en Vista y Windows 8+:
| Campo | Vista | 7 | 8 → 11 |
|---|---|---|---|
Firma CMMM | 0 | 0 | 0 |
| Tamaño de entrada (total) | 4 | 4 | 4 |
| Hash de entrada / ID de caché (u64) | 8 | 8 | 8 |
| Extensión de origen (4 × UTF-16) | 16 | – | – |
| Tamaño del identificador | 24 | 16 | 16 |
| Tamaño de relleno | 28 | 20 | 20 |
| Tamaño de datos | 32 | 24 | 24 |
| Ancho | – | – | 28 |
| Alto | – | – | 32 |
| Desconocido | 36 | 28 | 36 |
| Checksum de datos (u64) | 40 | 32 | 40 |
| Checksum de cabecera (u64) | 48 | 40 | 48 |
Tras la cabecera vienen el identificador (UTF-16LE, normalmente el ID de caché
escrito como 16 dígitos hexadecimales), el relleno y los datos de imagen. La
siguiente entrada empieza en offset + tamaño de entrada.
Las entradas con tamaño de datos 0 son habituales. Son marcadores de posición de elementos cuya miniatura no se generó o se descartó. Aun así llevan un ID de caché, por lo que merece la pena incluirlas en una línea de tiempo.
Comprobaciones al tallar (carving)
Al buscar CMMM fuera de la cadena de entradas activa, descarta un candidato
salvo que:
- el tamaño de entrada sea al menos la longitud de la cabecera y quepa en el archivo;
- cabecera + identificador + relleno + datos ≤ tamaño de entrada;
- el tamaño del identificador sea par y razonablemente pequeño.
Estas comprobaciones mantienen los falsos positivos poco frecuentes, porque
CMMM no aparece a menudo dentro de datos de imagen.
Los datos de imagen
El payload es un archivo de imagen completo: BM (BMP), FF D8 FF (JPEG) o
89 50 4E 47 (PNG). Estos bytes se deben hachear tal cual para el informe.
Windows 10 y 11 almacenan sobre todo BMP de 32 bits, de arriba abajo o de
abajo arriba, que cualquier navegador moderno puede mostrar.
thumbcache_idx.db
El índice (IMMM) asocia IDs de caché con offsets de entrada en cada base de
datos de tamaño, junto con indicadores (flags). No contiene imágenes, y su
estructura varía más entre builds. Es más útil para confirmar que un ID
estuvo en caché en algún momento, incluso después de que las bases de tamaño
se hayan limpiado.