Format du fichier thumbcache_*.db : en-tête et entrées
Structure binaire des bases thumbcache et iconcache de Windows, de Vista à Windows 11 : en-tête de fichier, types de cache par version et structure des entrées.
Cet article documente la structure sur disque des caches de miniatures et
d'icônes de l'Explorateur Windows (thumbcache_*.db, iconcache_*.db). Cette
structure n'est pas documentée par Microsoft. Ce qui suit est cohérent avec les
recherches publiques et les parseurs open source tels que Vinetto et Thumbcache
Viewer, et correspond à ce qu'implémente Thumbcache Parser. Tous les
entiers sont en little-endian.
En-tête du fichier
| Offset | Taille | Champ |
|---|---|---|
| 0 | 4 | Signature CMMM |
| 4 | 4 | Version du format |
| 8 | 4 | Type de cache (index dans la table ci-dessous) |
La suite dépend de la version :
| Version | Écrit par | Offset 12 | Offset 16 | Offset 20 | Offset 24 |
|---|---|---|---|---|---|
0x14 | Vista | première entrée | entrée disponible | nombre d'entrées | – |
0x15 | 7 | première entrée | entrée disponible | nombre d'entrées | – |
0x1A | 8 | première entrée | entrée disponible | nombre d'entrées | – |
0x1C | 8 (v2) | réservé | première entrée | entrée disponible | nombre d'entrées |
0x1E | 8 (v3) | réservé | première entrée | entrée disponible | – |
0x1F | 8.1 | réservé | première entrée | entrée disponible | – |
0x20 | 10 / 11 | réservé | première entrée | entrée disponible | – |
Première entrée est l'offset de la première entrée de cache. Entrée
disponible marque le début de l'espace libre : les entrées situées après ont
été libérées, mais leurs octets sont souvent encore intacts. Un parseur robuste
doit vérifier que l'offset de première entrée pointe bien vers CMMM, et
revenir à un balayage complet si ce n'est pas le cas.
Types de cache
Le numéro de type de cache correspond à la classe de taille du fichier, et cette table a changé au fil des versions :
| Version | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Vista / 7 | 32 | 96 | 256 | 1024 | sr | |||||||||
| 8 (all) | 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 |
Entrée de cache
Les entrées se suivent bout à bout. L'en-tête fait 48 octets sous Windows 7 et 56 octets sous Vista et Windows 8+ :
| Champ | Vista | 7 | 8 → 11 |
|---|---|---|---|
Signature CMMM | 0 | 0 | 0 |
| Taille de l'entrée (entrée complète) | 4 | 4 | 4 |
| Hash d'entrée / ID de cache (u64) | 8 | 8 | 8 |
| Extension source (4 × UTF-16) | 16 | – | – |
| Taille de l'identifiant | 24 | 16 | 16 |
| Taille du padding | 28 | 20 | 20 |
| Taille des données | 32 | 24 | 24 |
| Largeur | – | – | 28 |
| Hauteur | – | – | 32 |
| Inconnu | 36 | 28 | 36 |
| Somme de contrôle des données (u64) | 40 | 32 | 40 |
| Somme de contrôle de l'en-tête (u64) | 48 | 40 | 48 |
Après l'en-tête viennent l'identifiant (UTF-16LE, généralement l'ID de
cache écrit sous forme de 16 chiffres hexadécimaux), le padding, puis les
données de l'image. L'entrée suivante commence à offset + taille de l'entrée.
Les entrées avec une taille de données de 0 sont fréquentes. Ce sont des emplacements réservés pour des éléments dont la miniature n'a pas été générée ou a été abandonnée. Elles portent tout de même un ID de cache et méritent donc de figurer dans une chronologie.
Vérifications de cohérence lors du carving
Lors d'un balayage à la recherche de CMMM en dehors de la chaîne active,
rejetez un candidat sauf si :
- la taille de l'entrée est au moins égale à la longueur de l'en-tête et tient dans le fichier ;
- en-tête + identifiant + padding + données ≤ taille de l'entrée ;
- la taille de l'identifiant est paire et raisonnablement petite.
Ces vérifications rendent les faux positifs rares, car CMMM apparaît peu
souvent dans les données d'image.
Les données de l'image
La charge utile est un fichier image complet : BM (BMP), FF D8 FF
(JPEG) ou 89 50 4E 47 (PNG). Hachez ces octets tels quels pour le rapport.
Windows 10 et 11 stockent surtout des BMP 32 bits top-down ou bottom-up, que
tout navigateur moderne peut afficher.
thumbcache_idx.db
L'index (IMMM) fait correspondre les ID de cache aux offsets des entrées
dans chaque base de taille, avec des indicateurs (flags). Il ne contient aucune
image, et sa structure varie davantage d'une version à l'autre. Il est surtout
utile pour confirmer qu'un ID a bien été mis en cache, même après le nettoyage
des bases de taille.