FLOSS (FLARE Obfuscated String Solver, par Mandiant) extrait automatiquement les strings obfusquées du malware. Les auteurs cachent régulièrement les URLs, clés de registre, et commandes afin que l’utilitaire strings classique ne trouve rien d’utile. FLOSS va plus loin : il identifie les routines de décodage à l’intérieur du binaire, les émule, et récupère le plaintext — surfaçant les stack strings, tight strings, et strings décodées que l’extraction statique manque. C’est un outil de triage de première passe pour n’importe quel exemple de malware Windows.
Analysez le malware uniquement dans une VM/sandbox isolée. FLOSS émule le code de l’exemple.
Installation
| Méthode | Commande |
|---|
| Binaire standalone | Télécharger depuis GitHub Releases (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| Vérifier | floss --version |
Utilisation de base
| Commande | Description |
|---|
floss malware.exe | Extraire tous les types de strings |
floss -j malware.exe | Sortie JSON |
floss --no static malware.exe | Ignorer les strings statiques ordinaires |
floss -n 6 malware.exe | Longueur minimale de string 6 |
floss --help | Liste complète des options |
Types de strings que FLOSS récupère
| Type | Ce que c’est |
|---|
| Statique | Strings ordinaires (ce que strings trouve) |
| Stack | Construit caractère par caractère sur la stack au runtime |
| Tight | Construit dans des boucles serrées, jamais complètement en mémoire à la fois |
| Décodée | Produite par une routine de décodage (XOR, RC4, custom) |
Les trois derniers sont la valeur ajoutée — ils sont invisibles à strings car ils n’existent jamais comme bytes contigus dans le fichier.
Sélectionner les types d’analyse
| Flag | Effet |
|---|
--only static | Seulement les strings ordinaires (rapide) |
--only stack | Seulement les stack strings |
--only tight | Seulement les tight strings |
--only decoded | Seulement les strings émulées/décodées |
--no decoded | Ignorer la phase d’émulation (lente) |
# Triage rapide : ignorer l'émulation
floss --no decoded sample.exe
# Passe profonde : tout, JSON pour les outils
floss -j sample.exe > strings.json
Signaux de triage pour grep
| Pattern | Suggère |
|---|
| URLs / IPs | Infrastructure C2 |
HKLM\, HKCU\ | Persistance via registre |
cmd.exe, powershell | Exécution de commande |
CreateRemoteThread, VirtualAlloc | Injection de processus |
| Blobs Base64 | Payloads embarqués |
.onion, adresses wallet | Ransomware/exfil |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
Sortie et intégration
| Option | Objectif |
|---|
-j / --json | Sortie lisible par machine pour les pipelines |
-v / -vv | Verbeux / debug |
--functions 0x401000 | Cibler l’émulation sur des fonctions spécifiques |
| Scripts IDA/Ghidra | Annoter les strings récupérées de retour dans le désassemblage |
Alimenter la sortie FLOSS dans Ghidra comme commentaires rend l’analyse manuelle suivante beaucoup plus rapide.
Flux de travail courants
# Séquence de triage malware standard
floss -j sample.exe > floss.json # récupérer les strings
jq -r '.strings.decoded[].string' floss.json | sort -u # cibler les décodées
# → pivoter vers Ghidra/x64dbg sur les fonctions qui ont produit les strings intéressantes
# Comparer les variantes : quelles strings ont changé entre les exemples ?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
FLOSS vs outils apparentés
| Outil | Récupère |
|---|
| FLOSS | Statique + stack + tight + décodée (émulation) |
strings | Seulement les bytes imprimables contigus |
| capa | Capabilities/comportements, pas les strings |
| Detect It Easy | Identification de packer/compilateur |
Un trio de triage standard : Detect It Easy pour identifier le packing, FLOSS pour récupérer les strings, capa pour énumérer les capabilities.
Ressources