Several methods have been proposed to alleviate this situation. The highest level of protection is achieved with cryptographic solutions, but, unfortunately, this requires dedicated hardware with integrated decryption and execution units.
A more modest level of protection is achieved through obfuscation. An obfuscator is a tool which -- through the application of code transformations -- converts a program into an equivalent one that is more difficult to reverse engineer. The advantage of this method is that it runs on standard hardware and without any changes to virtual machines or available interpreters.
In a previous paper we have described the design of a tool that obfuscates the control flow of Java programs. In this paper we extend the design with transformations that obfuscate data structures and abstractions. In particular, we show how to obfuscate classes, arrays, procedural abstractions and built-in data types like strings, integers, and booleans.
See also the technical report A Taxonomy of Obfuscating Transformations.
| Gzipped Postscript |
|||
|---|---|---|---|
| Article | A4 | LETTER | (77k) |
| Postscript |
|||
| Article | A4 | LETTER | (276k) |
| Gifs |
|||
| Article | [p1] [p2] [p3] [p4] [p5] | (5*10k) | |
| [p6] [p7] [p8] [p9] [p10] [p11] | (6*10k) | ||
| Tar'ed Gifs |
|||
| Article | A4.tar | (163k) | |
| ASCII Text |
|||
| The BibTeX entry | BibTeX.bib | (2k) | The Abstract | Abstract.txt | (2k) |