Published on April 14th, 2016 📆 | 4282 Views ⚑0
Simplify — Generic Android Deobfuscator
Simplify uses a virtual machine to execute an app and understand what it does. Then, it applies optimizations to create code that behaves identically but is easier for a human to understand. It is a genericdeobfuscator because it doesn’t need any special configuration or code for different types of obfuscation.
There are three parts to the project:
- smalivm: Creates a context sensitive control flow graph of a method by executing each instruction. The value of all classes and registers is recorded at every execution of every instruction. It doesn’t need to know the arguments for a method to execute it as it handles unknown values. Also, it executes every possible path. For example, if an
falsebecause it references an unknown value, it assumes both could happen and executes both paths.
- simplify: Takes the graphs from smalivm and applies optimizations such as constant propagation, dead code removal, unreflection, and specific peephole optimizations.
- demoapp: Contains simple, heavily commented examples of how to use smalivm.
Generic Android Deobfuscator: Building
Because this project contains submodules, either clone with
git clone --recursive https://github.com/CalebFenton/simplify.git
Or update submodules at any time with:
git submodule update --init --recursive
Then, to build a single jar:
The Simplify jar will be in
You can test it’s working with:
java -jar simplify/build/libs/simplify.jar -it 'org/cf' simplify/obfuscated-example
Source && Download