FLOSS (FLARE Obfuscated String Solver, por Mandiant) extrae automáticamente cadenas ofuscadas de malware. Los autores rutinariamente ocultan URLs, claves de registro y comandos para que la utilidad clásica strings no encuentre nada útil. FLOSS va más allá: identifica rutinas de decodificación dentro del binario, las emula, y recupera el texto plano — descubriendo cadenas de pila, cadenas ajustadas y cadenas decodificadas que la extracción estática pierde. Es una herramienta de clasificación de primer paso para cualquier muestra de malware de Windows.
Analiza malware solo en una VM/sandbox aislada. FLOSS emula código de la muestra.
Instalación
| Método | Comando |
|---|
| Binario independiente | Descarga desde GitHub Releases (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| Verificar | floss --version |
Uso básico
| Comando | Descripción |
|---|
floss malware.exe | Extrae todos los tipos de cadena |
floss -j malware.exe | Salida JSON |
floss --no static malware.exe | Salta cadenas estáticas simples |
floss -n 6 malware.exe | Longitud mínima de cadena 6 |
floss --help | Lista completa de opciones |
Tipos de cadena que FLOSS recupera
| Tipo | Qué es |
|---|
| Estática | Cadenas ordinarias (lo que strings encuentra) |
| Pila | Construida carácter por carácter en la pila en tiempo de ejecución |
| Ajustada | Construida en bucles ajustados, nunca completamente en memoria a la vez |
| Decodificada | Producida por una rutina de decodificación (XOR, RC4, personalizada) |
Los últimos tres son el valor agregado — son invisibles a strings porque nunca existen como bytes contiguos en el archivo.
Selección de tipos de análisis
| Bandera | Efecto |
|---|
--only static | Solo cadenas simples (rápido) |
--only stack | Solo cadenas de pila |
--only tight | Solo cadenas ajustadas |
--only decoded | Solo cadenas emuladas/decodificadas |
--no decoded | Salta la fase de emulación (lenta) |
# Clasificación rápida: salta emulación
floss --no decoded sample.exe
# Paso profundo: todo, JSON para herramientas
floss -j sample.exe > strings.json
Señales de clasificación para grep
| Patrón | Sugiere |
|---|
| URLs / IPs | Infraestructura C2 |
HKLM\, HKCU\ | Persistencia vía registro |
cmd.exe, powershell | Ejecución de comando |
CreateRemoteThread, VirtualAlloc | Inyección de proceso |
| Blobs Base64 | Cargas incrustadas |
.onion, direcciones de cartera | Ransomware/exfiltración |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
Salida e integración
| Opción | Propósito |
|---|
-j / --json | Salida legible por máquina para pipelines |
-v / -vv | Detallado / depuración |
--functions 0x401000 | Enfoca emulación en funciones específicas |
| Scripts de IDA/Ghidra | Anota cadenas recuperadas de vuelta al desensamblado |
Alimentar la salida de FLOSS de vuelta a Ghidra como comentarios hace el análisis manual posterior mucho más rápido.
Flujos de trabajo comunes
# Secuencia de clasificación de malware estándar
floss -j sample.exe > floss.json # recupera cadenas
jq -r '.strings.decoded[].string' floss.json | sort -u # enfoca en decodificadas
# → pivota a Ghidra/x64dbg en las funciones que produjeron cadenas interesantes
# Compara variantes: ¿qué cadenas cambiaron entre muestras?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
FLOSS vs herramientas relacionadas
| Herramienta | Recupera |
|---|
| FLOSS | Estática + pila + ajustada + decodificada (emulación) |
strings | Solo bytes imprimibles contiguos |
| capa | Capacidades/comportamientos, no cadenas |
| Detect It Easy | Identificación de empaquetador/compilador |
Un trío de clasificación estándar: Detect It Easy para identificar empaquetado, FLOSS para recuperar cadenas, capa para enumerar capacidades.
Recursos