SATURN – Software Deobfuscation Framework Based on LLVM

09/04/2019
by   Peter Garba, et al.
0

The strength of obfuscated software has increased over the recent years. Compiler based obfuscation has become the de facto standard in the industry and recent papers also show that injection of obfuscation techniques is done at the compiler level. In this paper we discuss a generic approach for deobfuscation and recompilation of obfuscated code based on the compiler framework LLVM. We show how binary code can be lifted back into the compiler intermediate language LLVM-IR and explain how we recover the control flow graph of an obfuscated binary function with an iterative control flow graph construction algorithm based on compiler optimizations and SMT solving. Our approach does not make any assumptions about the obfuscated code, but instead uses strong compiler optimizations available in LLVM and Souper Optimizer to simplify away the obfuscation. Our experimental results show that this approach can be effective to weaken or even remove the applied obfuscation techniques like constant unfolding, certain arithmetic-based opaque expressions, dead code insertions, bogus control flow or integer encoding found in public and commercial obfuscators. The recovered LLVM-IR can be further processed by custom deobfuscation passes that are now applied at the same level as the injected obfuscation techniques or recompiled with one of the available LLVM backends. The presented work is implemented in a deobfuscation tool called SATURN.

READ FULL TEXT

page 1

page 2

page 3

page 4

research
02/19/2021

A Compiler Infrastructure for Accelerator Generators

We present Calyx, a new intermediate language (IL) for compiling high-le...
research
07/05/2021

A Formal Semantics of the GraalVM Intermediate Representation

The optimization phase of a compiler is responsible for transforming an ...
research
11/08/2017

Correctness of Speculative Optimizations with Dynamic Deoptimization

High-performance dynamic language implementations make heavy use of spec...
research
11/03/2020

Fast Computation of Strong Control Dependencies

We introduce new algorithms for computing non-termination sensitive cont...
research
11/13/2017

Souper: A Synthesizing Superoptimizer

If we can automatically derive compiler optimizations, we might be able ...
research
03/23/2021

Unleashing the Hidden Power of Compiler Optimization on Binary Code Difference: An Empirical Study

Since compiler optimization is the most common source contributing to bi...
research
05/21/2018

The sufficiently smart compiler is a theorem prover

That the Haskell Compiler GHC is capable of proving non-trivial equaliti...

Please sign up or login with your details

Forgot password? Click here to reset