TL;DR. Le ShimCache prouve qu'un fichier a existé sur disque ; AmCache prouve qu'il a été exécuté et l'identifie par SHA-1. Le ShimCache n'est flushé qu'à l'arrêt propre — AmCache écrit en continu. Récupérez les deux ; ils sont co-témoins, pas substituts.
ShimCache et AmCache sont les deux artefacts basés sur le registre les plus cités dans les enquêtes d'exécution de programmes Windows. Ils se ressemblent. Ils ne sont pas interchangeables. Voici une référence rapide pour choisir lequel dégainer en fonction de la question que vous vous posez.
Vue d'ensemble
| ShimCache | AmCache | |
|---|---|---|
| Emplacement | HKLM\SYSTEM\…\AppCompatCache | C:\Windows\AppCompat\Programs\Amcache.hve |
| Capacité | Jusqu'à 1 024 entrées | Des milliers d'entrées, pas de plafond fixe |
| Données par entrée | Chemin, mtime, (legacy) drapeau d'exécution | Chemin, SHA-1, taille, éditeur, date d'install, et bien plus |
| Écrit | Uniquement à l'arrêt | En continu (et selon des intervalles planifiés) |
| Survit à un crash | Non — les entrées récentes sont perdues | Oui — déjà sur disque |
| Idéal pour | Prouver qu'un fichier a existé sur disque | Prouver qu'un fichier a tourné + l'identifier par hash |
Quand le ShimCache l'emporte
Le ShimCache contient une entrée pour tout exécutable que Windows a simplement examiné pour des raisons de compatibilité. Cela le rend sensible : un binaire qu'un attaquant a déposé puis immédiatement supprimé peut encore laisser une trace ShimCache. Si votre question est « ce fichier a-t-il déjà existé sur cet hôte ? », le ShimCache est votre allié.
C'est aussi le seul des deux à capturer le mtime $STANDARD_INFORMATION du fichier. Cet horodatage n'est pas l'heure d'exécution (une confusion fréquente couverte dans un autre billet), mais il ancre l'identité du fichier dans le temps.
Quand l'AmCache l'emporte
AmCache est ce qu'il vous faut quand la question est « ce fichier a-t-il réellement été exécuté, et quel fichier exactement ? ». Chaque entrée AmCache transporte un hash SHA-1, la taille du fichier, l'éditeur, la date d'installation — assez pour identifier un binaire sans ambiguïté, même si le fichier sur disque a depuis été remplacé ou effacé.
AmCache persiste aussi. Parce que Windows l'écrit en continu plutôt qu'uniquement à l'arrêt, l'activité récente sur un système qui a planté ou qui a été redémarré brutalement a plus de chances de se retrouver dans AmCache que dans le ShimCache.
Comment les utiliser ensemble
En pratique, traitez-les comme des co-témoins :
- Une entrée dans les deux, ShimCache et AmCache, avec des chemins concordants et un horodatage AmCache récent, est une preuve forte d'exécution.
- Une entrée dans le ShimCache seul dit que le fichier était au moins sur disque à un moment donné. Cherchez des preuves corroborantes (Prefetch, AmCache, journaux d'événements) avant d'affirmer l'exécution.
- Une entrée dans AmCache seul, sans Prefetch ni ShimCache, signifie typiquement que l'hôte n'a pas été arrêté proprement depuis l'activité — le ShimCache n'a jamais été écrit sur disque.
Pour les détails techniques du format binaire du ShimCache, voir Analyser le ShimCache : le format binaire Windows 10 et 11. Pour analyser une ruche dès maintenant sans rien installer, utilisez le Shimcache Parser — tout s'exécute dans votre navigateur.
Pour aller plus loin
- AppCompatCacheParser d'Eric Zimmerman — l'implémentation C# de référence.
- Artefact
Windows.Registry.AppCompatCachede Velociraptor — logique de collecte sur système vivant. - ShimCache & AmCache forensic analysis (Mehrnoush) — étude détaillée avec cas pratiques.