Skip to content

FLOSS - Obfuscated String Extraction for Malware Cheatsheet

FLOSS - Obfuscated String Extraction for Malware Cheatsheet

FLOSS (FLARE Obfuscated String Solver, by Mandiant) automatically extracts obfuscated strings from malware. Authors routinely hide URLs, registry keys, and commands so that the classic strings utility finds nothing useful. FLOSS goes further: it identifies decoding routines inside the binary, emulates them, and recovers the plaintext — surfacing stack strings, tight strings, and decoded strings that static extraction misses. It is a first-step triage tool for any Windows malware sample.

Analyze malware only in an isolated VM/sandbox. FLOSS emulates code from the sample.

Installation

MethodCommand
Standalone binaryDownload from GitHub Releases (Windows/Linux/macOS)
pippip install flare-floss
Verifyfloss --version

Basic Usage

CommandDescription
floss malware.exeExtract all string types
floss -j malware.exeJSON output
floss --no static malware.exeSkip plain static strings
floss -n 6 malware.exeMinimum string length 6
floss --helpFull option list

String Types FLOSS Recovers

TypeWhat it is
StaticOrdinary strings (what strings finds)
StackBuilt character-by-character on the stack at runtime
TightConstructed in tight loops, never fully in memory at once
DecodedProduced by a decoding routine (XOR, RC4, custom)

The last three are the value-add — they are invisible to strings because they never exist as contiguous bytes in the file.

Selecting Analysis Types

FlagEffect
--only staticOnly plain strings (fast)
--only stackOnly stack strings
--only tightOnly tight strings
--only decodedOnly emulated/decoded strings
--no decodedSkip the (slow) emulation phase
# Fast triage: skip emulation
floss --no decoded sample.exe

# Deep pass: everything, JSON for tooling
floss -j sample.exe > strings.json

Triage Signals to Grep For

PatternSuggests
URLs / IPsC2 infrastructure
HKLM\, HKCU\Persistence via registry
cmd.exe, powershellCommand execution
CreateRemoteThread, VirtualAllocProcess injection
Base64 blobsEmbedded payloads
.onion, wallet addressesRansomware/exfil
floss sample.exe | grep -iE "http|\.exe|HKLM|powershell|AppData"

Output & Integration

OptionPurpose
-j / --jsonMachine-readable output for pipelines
-v / -vvVerbose / debug
--functions 0x401000Focus emulation on specific functions
IDA/Ghidra scriptsAnnotate recovered strings back into the disassembly

Feeding FLOSS output back into Ghidra as comments makes subsequent manual analysis far faster.

Common Workflows

# Standard malware triage sequence
floss -j sample.exe > floss.json          # recover strings
jq -r '.strings.decoded[].string' floss.json | sort -u   # focus on decoded
# → pivot to Ghidra/x64dbg on the functions that produced interesting strings

# Compare variants: which strings changed between samples?
floss --no decoded a.exe > a.txt; floss --no decoded b.exe > b.txt
diff a.txt b.txt
ToolRecovers
FLOSSStatic + stack + tight + decoded (emulation)
stringsContiguous printable bytes only
capaCapabilities/behaviors, not strings
Detect It EasyPacker/compiler identification

A standard triage trio: Detect It Easy to identify packing, FLOSS to recover strings, capa to enumerate capabilities.

Resources