TL;DR. Chaque génération de Windows a réécrit la structure de l'AppCompatCache. XP utilise un magic 0xDEADBEEF et un enregistrement fixe de 552 octets ; Server 2003, Vista/2008, Windows 7/2008 R2 et Windows 8/8.1 ont chacun leur propre en-tête et disposition d'entrée. Un parseur doit brancher selon le magic d'en-tête — il n'existe pas de format unique.
La plupart de la documentation ShimCache couvre la disposition Windows 10/11. Mais les intervenants en réponse à incident croisent encore des contrôleurs de domaine Windows 7, des machines Server 2008 R2 et l'occasionnel boîtier XP. La structure sur disque y est fondamentalement différente. Voici la référence par version.
Pourquoi il n'y a pas de format unique
ShimCache est une structure interne de Windows sans spécification publique. Microsoft l'a remodelée au fil des versions à mesure que l'infrastructure de shim évoluait. Le nom et le chemin de la valeur de registre ont aussi changé. Un parseur robuste identifie la version depuis l'en-tête avant de lire la moindre entrée.
Aide-mémoire par version
| Windows | Valeur de registre | Magic d'en-tête | Forme d'entrée |
|---|---|---|---|
| XP (32 bits) | …\AppCompatibility\AppCompatCache | 0xDEADBEEF | Enregistrements fixes de 552 octets, max 96 |
| Server 2003 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Entrées 24 octets (x86) / 32 octets (x64) |
| Vista / 2008 | …\AppCompatCache\AppCompatCache | 0xBADC0FFE | Comme 2003, drapeaux différents |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | En-tête 32 octets ; les entrées portent le drapeau d'insertion |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Signature d'entrée 00ts de longueur variable |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Signature d'entrée 10ts |
(La disposition moderne 10ts/00ts de Windows 10/11 est détaillée séparément.)
XP — le cas atypique
Windows XP ne ressemble à rien de ce qui suit : un magic 0xDEADBEEF, des enregistrements de largeur fixe de 552 octets, un plafond strict de 96 entrées et des chemins UTF-16 complétés à une longueur fixe. Il stockait aussi un horodatage de dernière mise à jour et un champ de taille de fichier que les versions ultérieures ont abandonnés. Si vous voyez 0xDEADBEEF, vous êtes en territoire XP et aucune logique d'analyse moderne ne s'applique.
Windows 7 — celui que vous croiserez le plus
Windows 7 / Server 2008 R2 reste courant en réponse à incident. Magic 0xBADC0FEE, en-tête de 32 octets, et des enregistrements par entrée incluant le chemin, la date de dernière modification du fichier et — particulièrement utile — un drapeau d'exécution supprimé à partir de Windows 8. Sur Windows 7, un drapeau positionné est une corroboration raisonnable (non absolue) de l'exécution ; ne l'extrapolez pas aux systèmes plus récents, comme expliqué dans le ShimCache prouve-t-il l'exécution.
La transition 8 / 8.1
Windows 8 a introduit l'entrée de longueur variable avec une signature par entrée (00ts), et 8.1 l'a fait passer à 10ts. C'est l'ancêtre structurel du format Windows 10/11 ; un parseur qui gère 8.1 est donc à mi-chemin de gérer 10.
Les analyser sans chaîne d'outils
Le Shimcache Parser détecte automatiquement le magic d'en-tête et bascule vers le bon décodeur pour XP, 2003, Vista, 7, 8, 8.1 et 10/11 — vous pouvez ainsi lire une ruche SYSTEM héritée dans le navigateur sans déployer d'anciens outils. Pour la collecte sur ces systèmes anciens, voir acquérir une ruche SYSTEM.
Pour aller plus loin
- Mandiant : leveraging the ShimCache — la rétro-ingénierie d'origine par version.
- AppCompatCacheParser d'Eric Zimmerman — gère toutes les versions ; une bonne vérité terrain.