Skip to content

Forensique des ShellBags Windows

ShellBags Parser

Chaque dossier parcouru par un utilisateur dans l'Explorateur — local, USB, partages réseau, contenu de ZIP, même des dossiers qui n'existent plus. Analysé dans votre navigateur en WebAssembly — rien n'est envoyé.

  • NTUSER.DAT
  • UsrClass.dat
  • BagMRU
  • Rust → WebAssembly

Déposez UsrClass.dat ou NTUSER.DAT ici

Depuis Windows 7, la plupart des ShellBags sont dans UsrClass.dat ; ajoutez aussi NTUSER.DAT. Les dossiers et collectes ZIP (KAPE, Velociraptor) sont acceptés tels quels, une paire de ruches par utilisateur.

Ruches synthétiques d'une intrusion fictive — aucune donnée réelle. Comment collecter ↓

100 % côté client : les ruches sont analysées en WebAssembly dans votre navigateur et jamais envoyées.

Comment récupérer vos données

UsrClass.dat + NTUSER.DAT

Il vous faut les deux ruches de chaque utilisateur, idéalement avec leurs fichiers .LOG1/.LOG2. Windows les verrouille tant qu'il tourne : faites une copie brute. La première méthode tient en un seul copier-coller.

  1. CollecterCopiez les deux ruches de chaque utilisateur, avec leurs journaux.
  2. DéposerDéposez le dossier C:\triage ou le ZIP dans la zone ci-dessus.
  3. Reste dans votre navigateurAnalyse locale en WebAssembly. Rien n'est envoyé.

Recommandé · intégré à Windows

Windows 10/11 ou Server 2016+. Collez dans un PowerShell ouvert avec « Exécuter en tant qu'administrateur ». La commande copie les ruches et journaux de chaque profil via un cliché instantané (esentutl /vss) ; rien à installer.

PowerShell · en administrateur
$out = 'C:\triage'
Get-ChildItem C:\Users -Directory | ForEach-Object {
  foreach ($rel in 'NTUSER.DAT', 'NTUSER.DAT.LOG1', 'NTUSER.DAT.LOG2',
      'AppData\Local\Microsoft\Windows\UsrClass.dat',
      'AppData\Local\Microsoft\Windows\UsrClass.dat.LOG1',
      'AppData\Local\Microsoft\Windows\UsrClass.dat.LOG2') {
    $src = Join-Path $_.FullName $rel
    if (Test-Path -LiteralPath $src) {
      $dst = Join-Path "$out\Users\$($_.Name)" $rel
      New-Item -ItemType Directory -Force -Path (Split-Path $dst) | Out-Null
      esentutl.exe /y $src /vss /d $dst
    }
  }
}
attrib -h -s "$out\*" /s /d

Résultat : C:\triage\Users\<nom>\… pour chaque compte. Déposez le dossier C:\triage ici, ou compressez-le et déposez le ZIP.

Pièges

  • Une copie normale d'une ruche en cours d'utilisation échoue ou produit un fichier rempli de zéros (l'outil vous le signale). Utilisez une des méthodes de copie brute ci-dessus.
  • Avertissement « ruche sale » ? Rejouez les .LOG1/.LOG2 avec rla.exe d'Eric Zimmerman ou Registry Explorer, puis déposez la ruche propre.
  • Collectez tous les profils, comptes de service et d'administration compris, et gardez les dossiers Users\<nom>\ : des fichiers isolés renommés risquent de n'être identifiés que par leur SID.

Que sont les ShellBags ?

Les ShellBags sont des clés de registre où l'Explorateur Windows mémorise l'affichage de chaque dossier — mode d'affichage, taille des icônes, position de la fenêtre. Pour cela, il enregistre par utilisateur une entrée pour chaque dossier ouvert, dans une arborescence qui reflète celle des dossiers.

Comme Windows conserve ces entrées longtemps après la disparition du dossier, les ShellBags prouvent qu'un utilisateur a parcouru un emplacement : une clé USB débranchée, un partage réseau, l'intérieur d'un fichier ZIP ou un dossier supprimé depuis.

Où sont stockés les ShellBags

  • Windows 7 et suivants : UsrClass.dat (C:\Users\<utilisateur>\AppData\Local\Microsoft\Windows\UsrClass.dat) sous Local Settings\Software\Microsoft\Windows\Shell\BagMRU et Bags.
  • Aussi NTUSER.DAT (C:\Users\<utilisateur>\NTUSER.DAT) sous Software\Microsoft\Windows\Shell\BagMRU — surtout le bureau et le réseau.
  • Windows XP : NTUSER.DAT, Software\Microsoft\Windows\ShellNoRoam\BagMRU.
  • Chaque clé BagMRU contient des valeurs numérotées — un élément shell par sous-dossier — ainsi que MRUListEx (ordre d'utilisation récente) et NodeSlot (lien vers les réglages d'affichage de Bags).

Pourquoi c'est utile en investigation

  • Montre les dossiers ouverts par un utilisateur précis, même sur des supports amovibles ou des partages distants qui ne sont plus connectés.
  • Les éléments shell contiennent l'entrée MFT et le numéro de séquence du dossier, ainsi que ses dates de création, modification et accès au moment de la navigation.
  • La navigation dans des fichiers ZIP et vers des partages réseau révèle souvent la préparation et l'exfiltration de données.

Limites

  • Les horodatages de clés indiquent seulement leur dernière modification ; la « dernière interaction » ne se déduit que pour l'enfant le plus récemment utilisé de chaque dossier.
  • Les dates des éléments shell sont au format FAT : résolution de 2 secondes.
  • Un ShellBag prouve que le dossier a été parcouru dans l'Explorateur, pas que ses fichiers ont été ouverts.
  • Les entrées supprimées du registre (cellules non allouées) ne sont pas encore récupérées.

Comment récupérer les ruches

  • Les deux ruches sont verrouillées tant que l'utilisateur est connecté : collectez-les avec KAPE (cible RegistryHivesUser), Velociraptor, FTK Imager ou depuis une image disque.
  • Conservez les fichiers .LOG1 et .LOG2 à côté de chaque ruche : une ruche « dirty » peut manquer les dernières écritures.
  • Nommez chaque paire par utilisateur (ou gardez l'arborescence Users\<nom>\) pour que l'outil distingue les comptes.

FAQ

Ma ruche est-elle envoyée quelque part ?

Non. Le parseur est écrit en Rust, compilé en WebAssembly et s'exécute dans un Web Worker de votre navigateur. Il n'existe aucun point d'envoi ; le site fonctionne hors ligne une fois chargé.

UsrClass.dat ou NTUSER.DAT ?

Les deux. Depuis Windows 7, la plupart des ShellBags sont dans UsrClass.dat ; NTUSER.DAT contient un BagMRU plus petit (bureau, certains éléments réseau). Déposez-les ensemble pour tout voir pour un utilisateur.

Que signifie « dernière interaction » ?

Quand l'ordre des sous-dossiers d'un dossier change, Windows réécrit sa clé. Le sous-dossier en tête de MRUListEx est donc celui utilisé lors de la dernière écriture de la clé parente — cette date est affichée comme sa dernière interaction.

Les ShellBags peuvent-ils montrer des dossiers supprimés ?

Oui. Les entrées restent après la suppression du dossier : un dossier absent du disque peut donc encore apparaître ici, avec son entrée MFT et ses horodatages.

Est-ce équivalent à SBECmd / ShellBags Explorer ?

L'outil couvre les mêmes champs essentiels (chemin absolu, type shell, position MRU, NodeSlot, référence MFT, horodatages) et exporte en CSV, mais fonctionne dans le navigateur sans installation.