Skip to content

Analyser des ShellBags en ligne avec un parseur navigateur

Pas à pas : analyser UsrClass.dat et NTUSER.DAT dans le navigateur, lire l'arborescence et la chronologie, trier les dossiers signalés, exporter en CSV ou JSON.

Publié le 7 min de lecture

TL;DR. Ouvrez le ShellBags Parser, déposez UsrClass.dat et NTUSER.DAT (ou un ZIP KAPE/Velociraptor complet) et vous obtenez chaque dossier parcouru, en arborescence par compte et en chronologie, avec des signaux de tri pour les autres lecteurs, partages réseau, archives et dossiers modifiables par l'utilisateur, plus l'export CSV/JSON. Le parseur est écrit en Rust, compilé en WebAssembly et exécuté dans un Web Worker : les ruches ne quittent jamais votre machine. Il ne rejoue pas encore les journaux de transactions : rejouez d'abord les ruches sales.

On cherche « ShellBags Explorer en ligne » parce que les outils de référence sont des programmes Windows, et qu'une bonne partie du triage initial se fait sur un Mac, une station d'analyse Linux ou un portable verrouillé où installer des outils .NET demande un ticket. Ce guide déroule une session complète avec l'échantillon synthétique intégré au site, pour suivre sans données réelles.

Avant de commencer : collecter les bons fichiers

Il vous faut, par utilisateur :

FichierEmplacementPourquoi
UsrClass.datC:\Users\<user>\AppData\Local\Microsoft\Windows\Arborescence ShellBags principale depuis Vista
NTUSER.DATC:\Users\<user>\Seconde arborescence BagMRU, et le nom d'utilisateur
.LOG1 / .LOG2 de chaque rucheÀ côté de chaque rucheÉcritures en attente d'une ruche sale

Les deux ruches sont verrouillées tant que l'utilisateur est connecté. Utilisez la cible KAPE RegistryHivesUser, Velociraptor, FTK Imager ou une image disque. Détails et pièges dans où sont stockés les ShellBags et comment les collecter.

Si une ruche est sale (dirty), rejouez d'abord ses journaux avec rla.exe ou Registry Explorer (outils d'Eric Zimmerman). Le parseur détecte les ruches sales et le signale, mais lit le fichier principal tel quel.

Étape 1 : charger les ruches

Ouvrez la page d'accueil. Vous pouvez :

  • déposer des fichiers isolés (UsrClass.dat, NTUSER.DAT, les copies renommées fonctionnent),
  • choisir un dossier (par exemple un répertoire de sortie KAPE),
  • déposer une collecte de triage ZIP issue de KAPE ou Velociraptor.

Ou cliquez sur Essayer un exemple pour charger deux ruches synthétiques tirées d'une intrusion fictive : le compte svc_backup décompresse une boîte à outils, parcourt un partage finance et copie des données sur une clé USB.

L'analyse s'exécute dans un Web Worker. Il n'existe aucun point d'envoi ; une fois la page chargée, elle fonctionne hors ligne.

Étape 2 : lire le rapport d'intégration

Avant de lire les résultats, vérifiez ce qui n'a pas été analysé. L'outil liste chaque fichier ignoré avec une raison :

  • Rempli de zéros : la ruche était verrouillée lors de la copie et l'outil de copie a produit une image vide. Recollectez avec une méthode de copie brute.
  • Journal de transactions : gardez-le à côté de la ruche et rejouez-le ; il n'est pas analysé seul.
  • Une autre ruche (SYSTEM, SOFTWARE, Amcache...) : les ShellBags ne se trouvent que dans NTUSER.DAT et UsrClass.dat. Pour les autres ruches, voyez le parseur de registre ou le parseur Amcache.
  • Pas une ruche de registre : les premiers octets sont affichés.

Les avertissements du parseur (valeurs illisibles, ruche sale) apparaissent dans un panneau dédié. Un avertissement de ruche sale signifie que des ShellBags récents peuvent manquer.

Étape 3 : identifier les comptes

Chaque ruche est attribuée à un compte : le SID de la clé racine de UsrClass (S-1-5-21-..._Classes), le nom d'utilisateur tiré des valeurs Shell Folders de NTUSER, ou le dossier Users\<nom>\ du chemin déposé. Avec une collecte de triage complète, vous obtenez un groupe par utilisateur. Dans l'échantillon, les deux ruches appartiennent à svc_backup.

Étape 4 : parcourir l'arborescence

La vue Arborescence suit la hiérarchie BagMRU, groupée par compte et par ruche. Colonnes : dossier, type d'élément shell, dernière interaction, dernière écriture de la clé, création, accès, MFT, signaux.

Cliquez sur une ligne pour ouvrir le panneau de détails :

ChampSignification
Nom / Nom 8.3Nom long issu du bloc d'extension, nom court issu de l'en-tête de l'item
Type d'élément shellRacine, volume, répertoire, réseau, délégué, panneau de configuration, URI, variable
Clé BagMRUPar exemple BagMRU\0\1\0\0, pour la retrouver dans Registry Explorer
Position MRUPosition dans le MRUListEx du parent (0 = la plus récente)
NodeSlotLien vers la clé de réglages Bags
Sous-dossiersNombre de sous-clés
Modification (élément shell)Date de modification FAT issue de l'en-tête de l'item
Version du bloc d'extension3, 7, 8 ou 9 : indique la version de Windows qui l'a écrit
GUIDPour les items racines et les dossiers connus
Élément shell brutHexadécimal, pour tout ce que le parseur ne décode pas

Dans l'échantillon, dépliez My Computer\E: pour trouver exfil\finance_2026, et Network pour trouver \\FILESRV01\Finance avec Payroll et Board.

Étape 5 : trier avec les signaux et les filtres

Cochez Signalés uniquement. Les signaux sont des heuristiques simples et documentées :

  • Autre lecteur (USB ?) : une lettre de lecteur autre que C: sous Poste de travail.
  • Emplacement réseau : un chemin UNC ou un item réseau.
  • Dans une archive : un chemin qui passe par .zip, .7z, .rar, .cab, .iso, .tar, .gz, .vhd(x) et similaires.
  • Dossier modifiable par l'utilisateur : AppData, Users\Public, ProgramData, Windows\Temp, $Recycle.Bin, PerfLogs, Temp.

Ils orientent, ils ne prouvent pas. Un lecteur D: peut être un second disque interne, un sous-dossier de ProgramData peut être un répertoire éditeur légitime. Le champ de filtre accepte chemins, dates et numéros d'entrée MFT : c'est ainsi que vous pivotez d'une entrée MFT vue dans le journal USN vers le dossier.

Étape 6 : passer à la chronologie

La vue Chronologie trie selon la meilleure date disponible : « Dernière interaction » quand l'entrée était première dans le MRUListEx de son parent, sinon « Dernière écriture de la clé ». Sachez laquelle vous regardez : la colonne vous le dit. La logique est détaillée dans les horodatages des ShellBags expliqués. Basculez entre UTC et heure locale avec le sélecteur ; rédigez vos rapports en UTC.

Pour l'échantillon, le récit se lit ainsi : tools.zip\x64 parcouru vers 10:07, ProgramData\Intel à 10:09, \\FILESRV01\Finance à partir de 10:31, Board à 10:36, E:\exfil\finance_2026 à 10:45, la Corbeille à 10:50 (tout le 2026-09-14 en UTC, fictif). La mise en situation d'investigation l'interprète.

Étape 7 : exporter et corroborer

Exportez en CSV ou en JSON. Les exports contiennent les lignes affichées : filtrez d'abord pour obtenir un tableau ciblé. Les cellules CSV qui commencent comme une formule de tableur sont neutralisées, car les noms de dossiers sont contrôlables par un attaquant.

Puis corroborez : fichiers LNK et Jump Lists pour les fichiers ouverts dans ces dossiers, journaux d'événements (parseur EVTX) pour les ouvertures de session et les connexions USB, et journal USN pour la création et la suppression de fichiers.

Ce que l'outil ne fait pas (encore)

  • Rejouer les journaux de transactions .LOG1/.LOG2.
  • Récupérer les clés BagMRU supprimées dans les cellules non allouées de la ruche.
  • Décoder entièrement les items de périphériques MTP, de contenu ZIP (0x52) et de résultats de recherche (conservés sous forme de nom approximatif plus hexadécimal).

Pour cela, utilisez en complément ShellBags Explorer / SBECmd et Registry Explorer.

Articles liés

Articles liés