Parseurs de cache RDP comparés : bmc-tools et alternatives
bmc-tools, RdpCacheStitcher et RDP Bitmap Cache Parser côte à côte : rôle de chacun, place dans une enquête et limites assumées de l'outil navigateur.
En bref. bmc-tools (ANSSI, Python) est le décodeur de référence du cache bitmap RDP, et celui qu'il faut citer. RdpCacheStitcher (BSI) est une interface graphique qui vous aide à assembler en écrans les tuiles exportées par bmc-tools. RDP Bitmap Cache Parser décode les mêmes fichiers dans le navigateur, avec son propre décodeur, écrit indépendamment et validé par comparaison avec bmc-tools, et y ajoute une galerie avec indices de triage, un collage, un canevas de reconstruction et des exports. Il ne dispense pas d'un second avis : sur un cas réel, comparez les tuiles importantes avec bmc-tools.
Si vous choisissez un outil parce que vous venez de tomber sur un dossier Terminal Server Client\Cache, le guide d'analyse forensique du cache bitmap RDP explique ce que vous avez sous les yeux.
Les trois outils en un coup d'œil
| bmc-tools | RdpCacheStitcher | RDP Bitmap Cache Parser | |
|---|---|---|---|
| Mainteneur | ANSSI (France) | BSI (Allemagne) | Indépendant (ce site) |
| Forme | Script Python en ligne de commande | Interface graphique de bureau | Page web, WebAssembly dans un Web Worker |
| Entrée | bcache*.bmc, Cache*.bin | Tuiles exportées par bmc-tools | bcache*.bmc, Cache*.bin, dossiers, ZIP |
| Décodage | Oui (référence) | Non, utilise les tuiles exportées | Oui (indépendant, validé face à bmc-tools) |
| Collage | Oui (-b, largeur -w) | Ce n'est pas son rôle | Oui, paramétrable, deux dispositions |
| Reconstruction d'écran | Non | Oui, c'est son rôle | Canevas manuel |
| Restes d'emplacement | Exportés avec -o | Travaille sur les tuiles exportées | Affichés et signalés |
| Installation | Python | Téléchargement | Aucune |
| Licence | CeCILL 2.1 | Voir son dépôt | Utilisation gratuite |
Nous ne décrivons RdpCacheStitcher que dans la mesure où nous en sommes sûrs ; consultez son dépôt et son manuel pour l'ensemble de ses fonctionnalités.
bmc-tools
bmc-tools est l'implémentation de référence. Une bonne partie des travaux publics sur cet artefact repose sur sa rétro-ingénierie des formats BMC et Cache*.bin. Notre propre décodeur est une implémentation distincte, écrite à partir des spécifications de protocole publiées par Microsoft (MS-RDPBCGR et MS-RDPEGDI) et de la description publique des fichiers par le CERT-FR (bulletin CERTFR-2016-ACT-017), puis validée tuile par tuile avec bmc-tools. La décompression des tuiles (RLE entrelacé) est prise en charge depuis la version 3.00, en 2022.
Options :
| Option | Rôle |
|---|---|
-s | Fichier ou dossier source |
-d | Dossier de destination |
-c | Nombre de tuiles à extraire |
-v | Sortie détaillée |
-o / --old | Exporter aussi les anciennes données des emplacements (restes) |
-b | Construire un bitmap de collage |
-w | Largeur du collage en tuiles par ligne (64 par défaut) |
-k | Dossiers de sortie au format KAPE |
Sortie : un BMP par tuile nommé <file>_<NNNN>.bmp, et <file>_collage.bmp quand un collage est demandé.
Points forts : le comportement de référence, scriptable, facile à lancer sur de nombreuses collectes, citable. Contreparties : un environnement Python sur la machine d'analyse, puis des centaines voire des milliers de fichiers BMP à parcourir dans une visionneuse d'images.
RdpCacheStitcher
RdpCacheStitcher, publié par le BSI, est une interface graphique qui vous aide à assembler en écrans les tuiles exportées. Il prend en entrée les tuiles exportées par bmc-tools. Utilisez-le quand le travail consiste à reconstituer des écrans complets et que vous voulez une application de bureau dédiée à cette tâche.
Points forts : conçu spécifiquement pour la reconstruction. Contreparties : c'est une seconde étape après bmc-tools, et une installation sur le poste.
RDP Bitmap Cache Parser
L'outil de ce site décode les deux formats dans le navigateur. Les fichiers ne quittent jamais la machine : le décodage tourne en Rust compilé en WebAssembly, dans un Web Worker.
Ce qu'il ajoute autour du décodeur :
- Chargement de fichiers, de dossiers et de ZIP (KAPE, Velociraptor, profils zippés), chaque fichier étant rattaché au compte déduit de
Users\<name>\dans le chemin. - Panneau Constats : comptes ayant utilisé le client RDP, tuiles de type console, restes d'emplacement, tuiles non décodables, et un rappel que les tuiles ne portent aucun horodatage.
- Galerie avec index des tuiles et ordre du cache, indices de triage (Type console, Type texte, Reste d'emplacement, Uni, Doublon, Non décodée), un filtre À examiner d'abord et l'option Masquer les tuiles unies et les doublons.
- Collage avec un nombre de tuiles par ligne paramétrable, en Ordre du cache ou en Disposition bmc-tools pour retrouver l'agencement du
_collage.bmpde bmc-tools. - Reconstruire : un canevas en grille pour placer les tuiles à la main, exporté en PNG avec un JSON de disposition.
- Détail d'une tuile : clé, taille, profondeur, compression, offset dans le fichier.
- Exports : CSV, JSON, un ZIP des tuiles en PNG ou en BMP nommés comme la sortie de bmc-tools (avec un
tiles.csv), PNG d'une tuile, PNG du collage.
Limites, en toute franchise
| Limite | Que faire |
|---|---|
| Pas d'OCR | Lisez le texte vous-même ; retranscrivez-le dans vos notes |
| Pas d'assemblage automatique | Placez les tuiles à la main sur le canevas Reconstruire, ou utilisez RdpCacheStitcher |
| Les indices heuristiques peuvent rater des tuiles ou en signaler à tort | Voyez-les comme un ordre de lecture, pas comme des constats |
| Couleurs 8 bits approximatives | La palette n'est pas dans le cache ; fiez-vous aux formes et au texte |
| Tuiles étroites décodées avec leur propre largeur comme pas de ligne | bmc-tools suppose 64 ; comparez les deux sur les tuiles étroites |
| Tuiles 8 et 32 bits décompressées affichées dans leur profondeur réelle ; tuiles 32 bits en codec planar décodées | bmc-tools rend les tuiles décompressées en 16 bits et ignore les tuiles planar ; attendez-vous à des différences sur ces tuiles |
| Validé sur des fichiers synthétiques et construits à la main | Recoupez les tuiles importantes avec bmc-tools sur les cas réels |
| Tourne dans un onglet de navigateur | Les très grosses collectes dépendent de la mémoire du navigateur |
L'outil n'affiche aucune plage horaire, parce que le cache ne contient aucune heure. La datation se fait avec les artefacts du poste source.
Lequel choisir, et quand
| Situation | Outil suggéré |
|---|---|
| Coup d'œil rapide sur un dossier de cache depuis un portable d'analyse sans Python | RDP Bitmap Cache Parser |
| Traitement par lots de nombreuses collectes dans une chaîne automatisée | bmc-tools |
| Reconstitution d'écrans complets avec un outil de bureau dédié | bmc-tools, puis RdpCacheStitcher |
| Triage : quelles tuiles lire en premier ? | RDP Bitmap Cache Parser (À examiner d'abord) |
| Un constat destiné à un rapport | Décoder avec deux outils et comparer |
| Partager des tuiles avec un collègue qui travaille avec bmc-tools | ZIP BMP de RDP Bitmap Cache Parser (nommage bmc-tools) |
Les outils se combinent bien. Un parcours qui fonctionne : triage dans le navigateur, export du ZIP BMP, reconstruction dans RdpCacheStitcher ou sur le canevas Reconstruire, puis nouveau passage de bmc-tools sur les fichiers originaux pour les tuiles que vous citez.
Vérifier un outil avec un autre
Pour une tuile que vous comptez citer :
- Notez son index et son offset dans le fichier depuis le panneau de détail de la tuile.
- Lancez bmc-tools sur le même fichier et ouvrez le BMP correspondant (rapprochez par index, et par contenu si la numérotation diffère).
- Comparez les images. Les différences apparaissent le plus souvent sur les tuiles étroites (pas de ligne), les tuiles 8 bits (palette), les tuiles 8 et 32 bits décompressées (bmc-tools les rend en 16 bits) et les tuiles 32 bits en codec planar, que bmc-tools ignore.
- Consignez les deux dans vos notes.
Pour une prise en main pas à pas dans le navigateur, voir comment analyser le cache bitmap RDP dans votre navigateur.