Skip to content

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.

Publié le 7 min de lecture

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 :

ChampSourceUsage
Chemin completAssemblé depuis l'arborescence BagMRUOù se trouvait le dossier, même si ses parents ont aussi disparu
Nom long et nom 8.3Item file entry + bloc 0xBEEF0004Nom exact, y compris les caractères perdus dans certains listings
Création / modification / accèsDates FAT embarquéesDate de création du dossier, telle que le système de fichiers la voyait
Entrée MFT + séquenceBloc d'extension version 7+Relie l'entrée à un enregistrement NTFS précis
LastWrite de clé, position MRURegistreQuand 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:\exfil manquant 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 .zip n'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 $MFTInterprétation
Utilisé, même séquence, même nom et même parentLe 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érentRenommé (ou déplacé sur le même volume) : même enregistrement, nouveau nom.
Non utilisé, même séquenceDossier 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 ShellBagDossier d'origine supprimé ; l'enregistrement appartient désormais à autre chose.
Séquence plus basse que dans le ShellBagMauvais 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:$J sur le numéro de référence de fichier du dossier (entrée + séquence). Une raison FILE_DELETE donne l'heure ; une paire RENAME_OLD_NAME/RENAME_NEW_NAME donne 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 :

  1. Date de création embarquée : le dossier existait au moins depuis ce moment.
  2. 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.
  3. 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é.

Articles liés

Articles liés