Obfuscation by Interpretation
Résumé
High-level languages such as Java, .NET and Javascript are usually considered less complex to reverse engineer than low-level languages such as assembly, using a subjective notion of complexity. Indeed, obfuscation of low-level code using entry-point obuscuring, code and data mixing and code encryption can lead to difficult to disassemble binaries. This presentation will show that all these low-level obfuscations are possible in high-level languages and therefore analysing high-level programs is no easier. Javascript obfuscations will be provided as examples using a pseudo-assembly language and a processor emulator, but the result holds for every acceptable language.