Skip to content

v0.7.0

Choose a tag to compare

@github-actions github-actions released this 22 Jul 12:40
· 67 commits to main since this release

xollvm — v0.7.0

Platforms

Artifact OS
xollvm-linux-Release.tar.zst Linux x86_64 (ubuntu-24.04)
xollvm-windows-Release.7z Windows x64 (MSVC 2022)
Obfuscator-linux-x64.so Linux x86_64 — loadable -fpass-plugin

Cross-compilation targets

Built with -DLLVM_TARGETS_TO_BUILD="X86;AArch64;ARM;RISCV" — the following backends are included:

  • X86 — x86 / x86_64
  • AArch64 — ARM 64-bit (Apple Silicon, Linux ARM64)
  • ARM — ARM 32-bit
  • RISCV — RISC-V 32/64-bit

Highlights

New module-only obfuscation pass, fmerge, collapses several annotated functions into a
single super-function whose hidden selector parameter picks which original body runs. This
is not LLVM's MergeFunctions (identical-function folding for size) — fmerge deliberately
merges dissimilar functions to destroy call-graph boundaries, running before the function
pipeline so flattening / bcf / mba / vm all operate on the merged result. Opt-in,
annotation-driven, consistent with every other xollvm pass.

Added

  • fmerge function-merging pass — per-function opt-in via
    __attribute__((annotate("obf: fmerge(group=...)"))); functions sharing a group= label
    merge into one super-function, all direct call sites rewritten to the merged callee with
    the appropriate selector.
  • Selector laundering (launderSel=1) — call-site selectors are read from a mutable
    per-group global (@__obf_fmsel_<label>) via a volatile load instead of an inline constant,
    so constant-propagation / symbolic devirtualization can't recover which behavior a call
    runs. Cross-group merged→merged calls already rewrite correctly.

Changed

  • docs/obf_annotations.h cheat-sheet extended with constenc and fmerge annotation
    examples; corrected the sample path referenced from README.md.

Tests

  • New fmerge case/gate pairs (utils/cases/fmerge.py, utils/gates/fmerge.py) plus
    three template programs (basic, combo, thunk) exercising group merging and selector
    rewriting.

Full diff: e3ced21…7457f2d (main) — 19 files, +1899 / −11.