FLOSS (FLARE Obfuscated String Solver, por Mandiant) automaticamente extrai strings ofuscadas de malware. Autores rotineiramente escondem URLs, chaves de registro e comandos para que o utilitário strings clássico não encontre nada útil. FLOSS vai além: ele identifica rotinas de decodificação dentro do binário, emula elas e recupera o texto plano — superficiando strings de stack, strings tight e strings decodificadas que extração estática perde. É uma ferramenta de triagem de primeiro passo para qualquer amostra de malware Windows.
Analise malware apenas em uma VM/sandbox isolada. FLOSS emula código da amostra.
Instalação
| Método | Comando |
|---|
| Binário autossuficiente | Baixar de GitHub Releases (Windows/Linux/macOS) |
| pip | pip install flare-floss |
| Verificar | floss --version |
Uso Básico
| Comando | Descrição |
|---|
floss malware.exe | Extrair todos os tipos de string |
floss -j malware.exe | Saída JSON |
floss --no static malware.exe | Pular strings estáticas simples |
floss -n 6 malware.exe | Comprimento mínimo de string 6 |
floss --help | Lista de opções completa |
Tipos de String Que FLOSS Recupera
| Tipo | O que é |
|---|
| Estática | Strings comuns (o que strings encontra) |
| Stack | Construído caractere-por-caractere na stack em tempo de execução |
| Tight | Construído em loops tight, nunca totalmente na memória de uma vez |
| Decodificada | Produzido por uma rotina de decodificação (XOR, RC4, customizada) |
Os três últimos são o valor adicional — eles são invisíveis a strings porque nunca existem como bytes contíguos no arquivo.
Selecionando Tipos de Análise
| Flag | Efeito |
|---|
--only static | Apenas strings simples (rápido) |
--only stack | Apenas strings de stack |
--only tight | Apenas strings tight |
--only decoded | Apenas strings emuladas/decodificadas |
--no decoded | Pular a fase de emulação (lenta) |
# Triagem rápida: pular emulação
floss --no decoded sample.exe
# Passe profundo: tudo, JSON para ferramentas
floss -j sample.exe > strings.json
Sinais de Triagem para Grep
| Padrão | Sugere |
|---|
| URLs / IPs | Infraestrutura C2 |
HKLM\, HKCU\ | Persistência via registro |
cmd.exe, powershell | Execução de comando |
CreateRemoteThread, VirtualAlloc | Injeção de processo |
| Blobs Base64 | Payloads incorporados |
.onion, endereços de carteira | Ransomware/exfiltração |
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"
Saída & Integração
| Opção | Propósito |
|---|
-j / --json | Saída legível por máquina para pipelines |
-v / -vv | Verbose / debug |
--functions 0x401000 | Focar emulação em funções específicas |
| Scripts IDA/Ghidra | Anotar strings recuperadas de volta na desmonagem |
Alimentar saída FLOSS de volta ao Ghidra como comentários torna análise manual subsequente muito mais rápida.
Fluxos de Trabalho Comuns
# Sequência de triagem de malware padrão
floss -j sample.exe > floss.json # recuperar strings
jq -r '.strings.decoded[].string' floss.json | sort -u # focar em decodificadas
# → girar para Ghidra/x64dbg nas funções que produziram strings interessantes
# Comparar variantes: quais strings mudaram entre amostras?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
FLOSS vs Ferramentas Relacionadas
| Ferramenta | Recupera |
|---|
| FLOSS | Estática + stack + tight + decodificada (emulação) |
strings | Apenas bytes imprimíveis contíguos |
| capa | Capacidades/comportamentos, não strings |
| Detect It Easy | Identificação de packer/compilador |
Uma triagem padrão: Detect It Easy para identificar packing, FLOSS para recuperar strings, capa para enumerar capacidades.
Recursos