Obfuscation vs the Optimizer: An LLVM Middle-End Arms Race
Introduction Obfuscation is security through obscurity; its purpose is to transform a piece of code into a much more complex representation, whilst preserving the original semantics of the code. A compiler's job is to transform source code into binary code and produce the simplest and most optimized representation it can for a given architecture. These are contrary goals, yet this contradiction is where obfuscators find their greatest leverage. In this blog post, we will explore the relationship...
Read full article →