TL;DR. Chaque génération Windows a réécrit la structure de l'AppCompatCache. XP utilise une 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 parser doit brancher sur la magic de l'en-tête. Il n'y a pas un format unique.
La plupart de la documentation ShimCache couvre la disposition Windows 10/11, parce que c'est ce que voient les enquêteurs sur les postes de travail. Puis on te tend un hive SYSTEM d'un contrôleur de domaine Windows 7, d'une machine applicative Server 2008 R2, ou de l'occasionnelle appliance XP qui fait encore tourner du code métier, et le parser moderne refuse poliment. Voici la référence pour ces cas.
Pourquoi il n'y a pas un format unique
ShimCache est une structure interne Windows sans spécification publique. Microsoft l'a remodelée au fil des releases à mesure que l'infrastructure shim évoluait. Le nom de valeur registre et le chemin ont aussi bougé. Un parser robuste identifie la version depuis l'en-tête avant de lire une seule entrée. L'AppCompatCacheParser d'Eric Zimmerman gère toutes les versions. Le Shim Cache Parser de Mandiant en gère la plupart. Réécrire le tien sans étape de détection de version, c'est produire de la corruption silencieuse.
Antisèche par version
| Windows | Valeur 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, flags différents |
| Windows 7 / 2008 R2 | …\AppCompatCache\AppCompatCache | 0xBADC0FEE | En-tête de 32 octets ; les entrées portent le flag d'insertion |
| Windows 8 / 2012 | …\AppCompatCache\AppCompatCache | 0x00000080 | Signature d'entrée 00ts à longueur variable |
| Windows 8.1 / 2012 R2 | …\AppCompatCache\AppCompatCache | 0x00000080 | Signature d'entrée 10ts |
La disposition moderne 10ts de Windows 10/11 est détaillée séparément.
XP, l'OVNI
Windows XP n'a rien à voir avec ce qui suit. Magic 0xDEADBEEF, enregistrements de largeur fixe de 552 octets, plafond dur de 96 entrées, chemins UTF-16 paddés à une longueur fixe. Il stockait aussi un timestamp de dernière mise à jour et un champ taille de fichier que les versions suivantes ont laissé tomber. Si tu vois 0xDEADBEEF, tu es en territoire XP et aucune logique de parsing moderne ne s'applique. Le chemin registre a aussi bougé : XP garde la valeur sous AppCompatibility, pas AppCompatCache.
Windows 7, celui que tu croiseras le plus
Windows 7 et Server 2008 R2 sont encore courants en IR. Magic 0xBADC0FEE, en-tête de 32 octets, et enregistrements par entrée qui incluent le chemin, l'heure de dernière modification du fichier et (utilité unique) un flag d'exécution retiré dans Windows 8 et après. Sur Windows 7, un flag d'exécution activé est une corroboration raisonnable d'exécution, pas absolue. N'extrapole pas cela aux systèmes plus récents, comme expliqué dans le ShimCache prouve-t-il l'exécution ?.
Les hives Windows 7 vont aussi de pair avec RecentFileCache.bcf, le prédécesseur d'AmCache. Si tu as un SYSTEM Win7, tu as probablement un RecentFileCache.bcf utile à côté.
La transition 8 / 8.1
Windows 8 a introduit l'entrée à longueur variable avec une signature par entrée (00ts), et 8.1 l'a montée à 10ts. C'est l'ancêtre structurel du format Windows 10/11, donc un parser qui gère 8.1 est aux trois quarts du chemin pour gérer 10. La magic de l'en-tête a bougé à 0x00000080 (l'offset de la première entrée), convention conservée par les hives modernes.
Server 2003 et Vista
Magic 0xBADC0FFE. Les entrées sont plus petites (24 octets sur x86, 32 octets sur x64). Vista a ajouté un mot de flag que 2003 n'avait pas. Tous deux sont rares en réponse à incident moderne mais apparaissent dans les migrations lift-and-shift d'infrastructures legacy.
Les parser sans toolchain
Le Shimcache Parser détecte automatiquement la magic de l'en-tête et branche vers le bon décodeur pour XP, 2003, Vista, 7, 8, 8.1 et 10/11. Tu peux lire un hive SYSTEM legacy dans le navigateur sans monter d'ancien outillage. Pour les conseils de collecte sur ces systèmes anciens, voir acquérir un hive SYSTEM. Pour un triage registre plus large sur une machine legacy, le registry parser gère les particularités de l'ancien format hive.
Lectures complémentaires
- Caching Out the Val de Mandiant. le reverse engineering par version d'origine.
- AppCompatCacheParser d'Eric Zimmerman. gère toutes les versions ; bonne vérité terrain.