wolfm / extended-gdop

LLVM passes implementing generalized dynamic opaque predicates and extensions of the idea.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Extended-GDOP

LLVM passes implementing generalized dynamic opaque predicates and extensions of the idea.

Final project for EECS 583 - Advanced Compilers at the University of Michigan.

Authors

Gabriel Garfinkel, Marshall Rhea, and Michael Wolf

Using this Repository

Building the pass modules

Run scripts/build. This will cmake and make to build each pass and the utils library in your build directory.

Compiling a program to LLVM bitcode

Before we obfuscate a program, we must compile it to LLVM bitcode. Run scripts/compile <.c file to compile> (output directory) to accomplish this. Due to limitations of obfuscator-llvm, we only support optimization of c files.

Alternatively, you can manually compile to LLVM bticode using the command

clang-12 -emit-llvm <input_file.c> -c -o  <output_name.bc>

We provide a number of test C programs in the tests/ directory, and we include the gnu coreutils project as a submodule to use for benchmarking.

Running Obfuscation Passes

Run the script scripts/opt (-h) <.bc file to obfuscate> <pass>. The passes provided in our project are:

  • boguscf : Obfuscation pass to insert opque predicates into straight-line code, generating junk code for the not-taken path. Adapted from - obfuscator-llvm.
  • DopSeq : Obfuscation pass to insert dynamic opaque predicates into straight line code. Adapted from gdop.

Resources

  • obfuscator-llvm An extension of llvm version 4.0 containing obfuscation passes. One of these passes inserts opaque predicates.
  • gdop, related paper download: A research project implementing a "generalized dynamic opaque predicate" that is more complex than previous dynamic opaque predicates. Based on obfuscator-llvm.
  • LOOP: Logic-Oriented Opaque Predicate Detection in Obfuscated Binary Code. A tool that uses symbolic execution to detect opaque predicates. This is the detection tool that generalized dynamic opaque predicates are designed to beat.

About

LLVM passes implementing generalized dynamic opaque predicates and extensions of the idea.


Languages

Language:C++ 88.0%Language:C 10.4%Language:Shell 0.9%Language:CMake 0.7%