Encryption, software guards, program fragmentation and obfuscation are all techniques that can be used to protect software. Obfuscation is the process of making software more difficult to understand and as a result harder to reverse engineer or tamper. In reality, a good obfuscation transformation, should extend the time required to understand the underlying functionality of the software and make it substantially harder in resources and time for the software to be reverse engineered.
Our work in obfuscation began with the obfuscation of Java Programs utilizing three techniques called Class Coalescing, Class Splitting and Type Hiding. The class coalescing obfuscation replaces several classes with a single The class splitting obfuscation replaces a single class with multiple classes, each responsible for a part of the functionality of the original class. The type hiding obfuscation uses the mechanism of interfaces in Java to obscure the types of objects manipulated by the program. We then proceeded to enhance the above obfuscations by describing techniques to remove other key components of object oriented languages like inheritance and polymorphism. Currently our research is focusing on determining the key basic elements of any language that are required to reverse engineer a program and developing obfuscation techniques that would allow us to hide these elements (or prove if this is even feasible). We are currently also attempting to prevent the reverse engineering of programs in order to bypass license checks by using obfuscation. Finally, we are also working on better ways to evaluate and measure the effectiveness of current and future obfuscations as the techniques currently provided are not good indicators into the quality of the obfuscations.
Participants:Anandabrata "Pasha" Pal