ShellBags et dossiers supprimés : prouver leur existence
Prouver avec les ShellBags qu'un dossier supprimé ou renommé a existé : chemin, dates embarquées, entrée et séquence MFT, puis la $MFT et l'USN.
TL;DR. Les ShellBags conservent les entrées après la suppression du dossier : le chemin complet, le nom et les dates embarquées d'un dossier disparu survivent dans la ruche de l'utilisateur. Sur NTFS, le shell item contient aussi le numéro d'entrée MFT et de séquence du dossier. Cherchez cette entrée dans la $MFT actuelle : même séquence et même nom, le dossier (ou son enregistrement) est toujours là ; séquence plus élevée, il a été supprimé et l'enregistrement réutilisé ; enregistrement non alloué avec la même séquence, supprimé mais pas encore réutilisé. Portez ensuite la référence de fichier dans le journal USN pour dater la suppression.
« Ce dossier n'a jamais existé » et « je l'ai supprimé il y a des mois » sont deux affirmations que les ShellBags permettent de tester. Voici la procédure que j'utilise, avec ses limites.
Pourquoi l'entrée survit
L'Explorateur ne nettoie pas les entrées BagMRU quand un dossier est supprimé. La clé décrit un lieu vers lequel l'utilisateur a navigué, pas un objet vivant. Les praticiens s'appuient sur ce comportement depuis les premières recherches sur les ShellBags, par exemple l'article de Chad Tilbury au SANS sur la reconstitution de supports amovibles disparus depuis longtemps. Ce qui supprime des entrées : la limite propre à Windows sur le nombre de dossiers mémorisés, les réinitialisations de profil et les outils de nettoyage (voir limites et anti-forensique).
L'entrée survivante vous donne :
| Champ | Source | Usage |
|---|---|---|
| Chemin complet | Assemblé depuis l'arborescence BagMRU | Où se trouvait le dossier, même si ses parents ont aussi disparu |
| Nom long et nom 8.3 | Item file entry + bloc 0xBEEF0004 | Nom exact, y compris les caractères perdus dans certains listings |
| Création / modification / accès | Dates FAT embarquées | Date de création du dossier, telle que le système de fichiers la voyait |
| Entrée MFT + séquence | Bloc d'extension version 7+ | Relie l'entrée à un enregistrement NTFS précis |
| LastWrite de clé, position MRU | Registre | Quand l'utilisateur était pour la dernière fois dans le dossier ou à proximité |
Étape 1 : trouver les entrées candidates
Listez tout le contenu des ShellBags de l'utilisateur, puis comparez-le au système de fichiers actuel. Avec le ShellBags Parser, exportez en CSV et comparez les chemins à un listing de fichiers tiré de l'image (ou à une analyse de la $MFT). Les dossiers présents dans les ShellBags mais absents du disque sont vos candidats.
Deux cas à écarter tôt :
- Chemins amovibles et réseau. Un
E:\exfilmanquant n'est pas supprimé : le lecteur n'est simplement pas là. Vérifiez-le sur le périphérique ou le serveur si vous pouvez l'obtenir. - Chemins d'archives. Les items situés sous un
.zipn'ont jamais existé sur le disque comme dossiers. Voir ShellBags et fichiers ZIP.
Étape 2 : lire la référence MFT
Pour chaque candidat local sur NTFS, notez l'entrée MFT et la séquence dans le panneau de détails (le champ de recherche filtre aussi par numéro d'entrée MFT). Le format est la structure MFT_SEGMENT_REFERENCE de Microsoft : un numéro d'entrée sur 48 bits et un numéro de séquence sur 16 bits, que Microsoft décrit comme une étiquette réutilisée de façon circulaire. La documentation NTFS de libyal précise que le numéro de séquence est incrémenté chaque fois que l'enregistrement est libéré.
Sans référence MFT (items de l'époque XP avec une extension de version 3, volumes FAT/exFAT, items réseau), passez à l'étape 4.
Étape 3 : comparer avec la $MFT actuelle
Analysez la $MFT du même volume et cherchez l'entrée :
| Enregistrement actuel dans la $MFT | Interprétation |
|---|---|
| Utilisé, même séquence, même nom et même parent | Le dossier existe toujours (vous l'avez peut-être manqué). Vérifiez un éventuel renommage si le nom diffère. |
| Utilisé, même séquence, nom différent | Renommé (ou déplacé sur le même volume) : même enregistrement, nouveau nom. |
| Non utilisé, même séquence | Dossier supprimé, enregistrement pas encore réutilisé. Ses attributs, et parfois ses entrées d'index, peuvent encore être lisibles. |
| Séquence plus élevée que dans le ShellBag | Dossier d'origine supprimé ; l'enregistrement appartient désormais à autre chose. |
| Séquence plus basse que dans le ShellBag | Mauvais volume, ou autre image du volume. Revérifiez. |
Cette comparaison transforme « un ShellBag nomme ce dossier » en « cet enregistrement de dossier précis a existé puis a été supprimé », ce qui est bien plus difficile à contester.
Un renommage mérite sa propre note. Si deux entrées ShellBags d'un même parent partagent l'entrée et la séquence MFT mais portent des noms différents, le dossier a très probablement été renommé entre les deux visites. L'ancien nom est celui de l'entrée dont la date de clé est la plus ancienne.
Étape 4 : dater la suppression
Le ShellBag ne dit pas quand le dossier a été supprimé. D'autres artefacts le peuvent :
- Journal USN. Filtrez
$UsnJrnl:$Jsur le numéro de référence de fichier du dossier (entrée + séquence). Une raisonFILE_DELETEdonne l'heure ; une paireRENAME_OLD_NAME/RENAME_NEW_NAMEdonne les renommages. Le parseur USN le fait dans le navigateur. - Corbeille. Un dossier envoyé à la Corbeille devient
$R...avec un fichier$I...correspondant qui contient le chemin d'origine et la date de suppression. Le parseur de Corbeille lit les fichiers$I. - Clichés instantanés de volume. Un instantané plus ancien peut encore contenir le dossier et son contenu.
- Fichiers LNK et Jump Lists. Les fichiers ouverts depuis le dossier avant sa suppression peuvent être référencés par des fichiers LNK et des Jump Lists, avec leurs propres références MFT.
Étape 5 : borner la chronologie
Assemblez les éléments :
- Date de création embarquée : le dossier existait au moins depuis ce moment.
- Dates des clés ShellBags (dérivées du MRU quand c'est possible) : l'utilisateur y était vers ce moment. Voir les horodatages des ShellBags expliqués.
- USN / Corbeille : le dossier a été supprimé à ce moment.
Une rédaction hypothétique (valeurs inventées) : « Un dossier nommé staging a existé à C:\Users\Public\staging (entrée MFT 104233, séquence 3), créé le [date]. Le compte l'a parcouru, pour la dernière fois vers [heure]. L'enregistrement a été libéré et réutilisé (séquence actuelle 4). Le journal USN enregistre sa suppression à [heure]. » Chaque proposition repose sur une source unique que vous pouvez montrer.
Limites
- Pas de référence MFT, pas de vérification d'enregistrement. Items de l'époque XP, volumes FAT/exFAT et certains types d'items n'ont pas de référence exploitable.
- L'entrée peut être plus ancienne que vous ne le pensez. Un ShellBag créé il y a des années dans un profil migré peut désigner un dossier sur un disque qui n'existe plus.
- Les outils de nettoyage visent précisément cet usage. Les outils qui suppriment les « traces de dossiers supprimés » effacent les ShellBags dont les dossiers ont disparu. Une absence ne prouve rien.
- Tous les outils ne récupèrent pas les clés supprimées. Les entrées retirées de la ruche peuvent subsister dans des cellules non allouées ; Registry Explorer sait afficher les clés supprimées. Le ShellBags Parser ne les récupère pas encore.
FAQ
Les ShellBags conservent-ils des entrées pour les dossiers supprimés ?
Oui. Supprimer un dossier ne retire pas son entrée BagMRU. L'entrée reste jusqu'à ce que Windows l'élague ou qu'un outil de nettoyage la supprime, avec le chemin du dossier, ses dates embarquées et, sur NTFS, son numéro d'entrée MFT et de séquence.
Comment savoir si l'enregistrement MFT du dossier a été réutilisé ?
Comparez le numéro de séquence du ShellBag avec l'enregistrement actuel de la $MFT pour la même entrée. NTFS incrémente le numéro de séquence quand un enregistrement est libéré : une valeur actuelle plus élevée signifie que le dossier d'origine a disparu et que l'enregistrement a été recyclé.