Skip to content

v2.0.0

Choose a tag to compare

@tstromberg tstromberg released this 01 Oct 18:45
· 8 commits to main since this release

Features

  • Recovers dropper-embedded PE payloads encrypted with a short repeating XOR key.
  • Decodes strings from x86 PE repeating-key XOR routines via a bounded interpreter.
  • Adds --xor-lcg for analyst-supplied LCG-XOR ranges; Mach-O LCG loaders decode automatically.
  • Extracts strings from single-byte-XOR universal Mach-O payloads hidden in __const sections.
  • ARM64: recovers XOR literals with pointer-derived keys and Rust heap-array XOR loops.
  • Decrypts macOS stealer strings sealed with a MurmurHash3-finalizer keystream.
  • Recovers Swift small strings assembled with ARM64 move-wide instructions.
  • Go: extracts Mach-O __gopclntab function names and struct tags via reflection metadata.
  • Go/Rust: recovers string headers stored into literal tables on ARM64 and x86-64.
  • Rust: detects stripped executables and recovers PIE literals via RELATIVE relocations.
  • Scripts: decodes VBScript.Encode blocks and expands cmd.exe batch variable-splicing obfuscation.
  • Decrypts legacy ColdFusion CFCRYPT (cfencode) templates back to CFML source.
  • Hex-encoded blobs are now scanned for single-byte-XOR strings hidden inside.
  • Decodes Base64 with omitted padding, and UTF-8 text behind a bogus UTF-16 BOM.
  • Flags credential stores, wallets, browser data and shell history as suspicious paths.
  • New cli feature: default-features = false builds the library without CLI dependencies.

Fixes

  • ELF Go and Rust strings now report file offsets instead of virtual addresses.
  • Go funcnametab recovery no longer drops long module paths or generic instantiations.
  • Platform-signature check reads only the embedded signature, so Developer ID malware gets scanned.
  • Rust Mach-O string tables in __DATA,__const from older linkers are now extracted.
  • Crafted Mach-O bind opcodes no longer panic extraction; only imports are lost.
  • Script decompression is capped at 10 MiB while inflating, blocking decompression bombs.
  • Hardened header-offset arithmetic; a new mutation test asserts hostile files never panic.
  • Injection detection requires whole-word commands after ;/|, cutting false ShellCmd hits.
  • Strings with @ that aren't emails now fall through to URL/path/command classification.

Optimizations

  • XOR pattern scan finds each printable run once per alignment, removing quadratic blowups.
  • Hostname expansion is bounded by DNS name length, avoiding quadratic walks on long runs.
  • CLI caps rayon at 16 threads: 15–40% faster, 4–8× less CPU on 128 cores.
  • Dropped hex and urlencoding deps; library builds skip clap, sha2, jemalloc, tracing-subscriber.
  • Published crate ships only src/, excluding ~90 MB of test data.

Breaking

  • String cache and cache sweeper removed; caching now belongs to callers like filefacts.
  • rizin/radare2 integration moved into the CLI; with_removed.
  • Section-info collectors return Vec, since names repeat across segments.