FLOSS (FLARE Obfuscated String Solver, von Mandiant) extrahiert automatisch obfuskierte Strings aus Malware. Autoren verstecken routinemäßig URLs, Registry-Schlüssel und Befehle, so dass das klassische strings Utility nichts Nützliches findet. FLOSS geht weiter: es identifiziert Dekodierungs-Routinen innerhalb der Binärdatei, emuliert sie und recuperiert den Klartext – recovering Stack-Strings, Tight-Strings und dekodierte Strings, die statische Extraktion vermisst. Es ist ein First-Step Triage-Tool für jede Windows-Malware-Sample.
Analysieren Sie Malware nur in einer isolierten VM/Sandbox. FLOSS emuliert Code aus der Sample.
Installation
| Methode | Befehl |
|---|
| Standalone Binary | Download von GitHub Releases (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| Überprüfen | floss --version |
Grundlegende Verwendung
| Befehl | Beschreibung |
|---|
floss malware.exe | Extrahieren Sie alle String-Typen |
floss -j malware.exe | JSON-Ausgabe |
floss --no static malware.exe | Überspringen Sie einfache statische Strings |
floss -n 6 malware.exe | Minimale String-Länge 6 |
floss --help | Vollständige Optionsliste |
String-Typen FLOSS recuperiert
| Typ | Was es ist |
|---|
| Static | Gewöhnliche Strings (was strings findet) |
| Stack | Charakter-für-Charakter auf dem Stack zur Laufzeit gebaut |
| Tight | In engen Schleifen konstruiert, nie vollständig im Speicher auf einmal |
| Decoded | Erzeugt durch eine Dekodierungs-Routine (XOR, RC4, benutzerdefiniert) |
Die letzten drei sind der Value-Add – sie sind unsichtbar für strings, weil sie nie als zusammenhängende Bytes in der Datei existieren.
Analyse-Typen auswählen
| Flag | Effekt |
|---|
--only static | Nur einfache Strings (schnell) |
--only stack | Nur Stack-Strings |
--only tight | Nur Tight-Strings |
--only decoded | Nur emulierte/dekodierte Strings |
--no decoded | Überspringen Sie die (langsame) Emulations-Phase |
# Schnelle Triage: Überspringen Sie Emulation
floss --no decoded sample.exe
# Tiefpass: alles, JSON für Tooling
floss -j sample.exe > strings.json
Triage-Signale zu Grep
| Pattern | Schlägt vor |
|---|
| URLs / IPs | C2-Infrastruktur |
HKLM\, HKCU\ | Persistenz via Registry |
cmd.exe, powershell | Command Execution |
CreateRemoteThread, VirtualAlloc | Process Injection |
| Base64 Blobs | Eingebettete Payloads |
.onion, Wallet-Adressen | Ransomware/Exfiltration |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
Ausgabe & Integration
| Option | Zweck |
|---|
-j / --json | Maschinell lesbare Ausgabe für Pipelines |
-v / -vv | Verbose / Debug |
--functions 0x401000 | Fokus Emulation auf spezifische Funktionen |
| IDA/Ghidra Scripts | Annotierten Sie recuperierte Strings zurück in den Disassembly |
Das Füttern der FLOSS-Ausgabe zurück in Ghidra als Kommentare macht die nachfolgende manuelle Analyse viel schneller.
Häufige Workflows
# Standard Malware Triage-Sequenz
floss -j sample.exe > floss.json # Recuperieren Sie Strings
jq -r '.strings.decoded[].string' floss.json | sort -u # Fokus auf dekodierte
# → Pivot zu Ghidra/x64dbg auf den Funktionen, die interessante Strings erzeugt haben
# Vergleichen Sie Varianten: welche Strings änderten sich zwischen Samples?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
| Tool | recuperiert |
|---|
| FLOSS | Static + Stack + Tight + Decoded (Emulation) |
strings | Nur zusammenhängende druckbare Bytes |
| capa | Capabilities/Behaviors, keine Strings |
| Detect It Easy | Packer/Compiler-Identifikation |
Ein Standard Triage-Trio: Detect It Easy um Packing zu identifizieren, FLOSS um Strings zu recuperieren, capa um Capabilities aufzuzählen.
Ressourcen