Search papers, labs, and topics across Lattice.
This paper investigates obfuscation techniques for Erlang programs across source code, AST, BEAM assembly, and bytecode levels, focusing on hindering reverse engineering. It categorizes obfuscation strategies including opcode-level dependency tricks, receive-based loop encodings, and self-modifying code. The key finding is that effective BEAM obfuscation exploits semantic gaps between high-level Erlang and the lower-level BEAM execution model.
Erlang's unique execution model allows for obfuscation tricks that go beyond simple corruption, creating a playground for novel security vulnerabilities.
This paper studies obfuscation techniques for Erlang programs at the source, abstract syntax tree, BEAM assembly, and BEAM bytecode levels. We focus on transformations that complicate reverse engineering, decompilation, and recompilation while remaining grounded in the actual behavior of the Erlang compiler, validator, loader, and virtual machine. The paper categorizes opcode-level dependency tricks, receive-based loop encodings, irregular control-flow constructions, mutability-oriented performance obfuscation, and self-modifying code enabled by dynamic module loading. A recurring theme is that effective obfuscation in BEAM often arises not from arbitrary corruption, but from exploiting representational gaps between high-level Erlang semantics and the lower-level execution model accepted by the toolchain and runtime.