Où Windows stocke les fichiers Jump List (Win 7, 10, 11)
Réponse courte. Deux dossiers par utilisateur sous le profil Roaming : %AppData%\Microsoft\Windows\Recent\AutomaticDestinations\ et %AppData%\Microsoft\Windows\Recent\CustomDestinations\. Ces chemins sont identiques sous Windows 7, 8, 10 et 11. Le même script de collecte fonctionne sans changement depuis une décennie et demie.
AutomaticDestinations
Écrit par la shell elle-même lorsqu'un utilisateur ouvre un document via une application enregistrée :
%AppData%\Microsoft\Windows\Recent\AutomaticDestinations\
Résolu : C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\. Chaque nom de fichier est <AppID>.automaticDestinations-ms où <AppID> est une chaîne hexadécimale en minuscules de 16 caractères. Le fichier est un OLE Compound File (MS-CFB) dont les flux numérotés sont des structures LNK, ordonnées par un seul flux DestList.
CustomDestinations
Écrit par l'application via l'API COM ICustomDestinationList pour ses propres éléments épinglés et catégories personnalisées (Tâches, Récents, groupes nommés par l'app) :
%AppData%\Microsoft\Windows\Recent\CustomDestinations\
Même convention de nommage : <AppID>.customDestinations-ms. Le format est une séquence plate de structures LNK précédées d'un petit en-tête, terminée par 0xBABFFBAB. Pas de conteneur OLE.
Par utilisateur, pas par machine
Les deux répertoires résident sous AppData\Roaming et itinèrent avec le profil. Il n'y a pas de stockage Jump List à l'échelle de la machine. Sur un hôte en direct, echo %AppData% se résout à l'utilisateur actuel ; sur une image montée, parcourez \Users\ et mappez chaque dossier de profil à son SID via HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SID> dans le registre si vous devez rattacher l'activité à un compte.
Sur une image forensique
Tirez l'arbre Recent\ complet par utilisateur :
\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent\AutomaticDestinations\
\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent\CustomDestinations\
\Users\<username>\AppData\Roaming\Microsoft\Windows\Recent\
Le dossier parent Recent\ héberge aussi des raccourcis .lnk classiques, corroboration utile mais artefact séparé. Les deux sous-dossiers *Destinations existent sans changement depuis Windows 7, donc un seul script de collecte couvre toutes les versions supportées. KAPE a une cible pour cela si vous préférez ne pas écrire le vôtre.
Sur un système en direct, attendez-vous à ce qu'explorer.exe conserve des handles ouverts. Collectez depuis une Volume Shadow Copy (\\?\GLOBALROOT\Device\HarddiskVolumeShadowCopyN\…), depuis une image forensique, ou en déconnectant d'abord l'utilisateur. Le dossier Recent\ est aussi touché par le journal USN et le MFT, tous deux valent la peine d'être tirés en même temps, les événements de création et de suppression pour les fichiers Jump List survivent souvent aux fichiers eux-mêmes.
Ce qu'est réellement l'AppID
Le préfixe du nom de fichier est une chaîne hexadécimale en minuscules de 16 caractères, par exemple 1b4dd67f29cb1962 (Quick Access sur Windows moderne). C'est un hash CRC64 tronqué calculé sur le chemin de l'exécutable de l'application, parfois avec des données identifiantes supplémentaires mélangées. Le même binaire au même chemin produit la même AppID sur chaque machine, c'est pourquoi les listes d'AppID publiées fonctionnent. Les cartes d'AppID livrées avec JLECmd couvrent la plupart des applications bien connues ; pour tout ce qui n'est pas mappé, l'AppID est une piste, pas du bruit.
Deux conséquences de la dérivation d'AppID :
- Déplacez ou renommez l'exécutable et l'AppID change. L'ancien fichier Jump List reste dans le dossier, orphelin, avec une AppID obsolète qui ne mappe plus à aucun binaire installé. Cet orphelin vaut en lui-même un coup d'œil.
- La même application installée au même chemin sur deux machines produit la même AppID sur les deux, mais les contenus sont par utilisateur. L'AppID seule n'attribue pas l'activité, jumelez-la avec le chemin du profil utilisateur.
Checklist d'acquisition rapide
- Imagez ou montez le volume ; ne copiez pas en direct avec un simple
xcopy. - Parcourez
\Users\et collectez les deux dossiers*Destinations\par utilisateur. - Tirez le dossier parent
Recent\pour les fichiers.lnkautonomes. - Tirez
\Users\<user>\NTUSER.DATpour les clésUserAssistetRecentDocscorrespondantes. - Notez toute AppID inattendue et tout dossier vide de fichiers plus anciens, les deux sont des constatations.
Pour la disposition des octets sur disque de ces fichiers, voir la décomposition du format de fichier AutomaticDestinations.
Pour aller plus loin
- Eric Zimmerman, JLECmd et JumpListExplorer, parsing hors ligne et la liste d'AppID canonique.
- Pour les artefacts corrélatifs : parser LNK, parser MFT, parser de journal USN, parser Prefetch.