@MISC{CollbergThomborsonLow97d,
   AUTHOR    = "Christian Collberg and Clark Thomborson and Douglas Low",
   TITLE     = "Breaking Abstractions and Unstructuring Data Structures",
   MONTH     = oct,
   YEAR      = 1997,
   NOTE      = "http://www.cs.auckland.ac.nz/$\sim$collberg/Research/Publications/CollbergThomborsonLow97d/index.html",
   URL       = {<a href="http://www.cs.auckland.ac.nz/collberg/Research/Publications/CollbergThomborsonLow97a/index.html"> CollbergThomborsonLow97d </a>},
   ABSTRACT  = "
To ensure platform independence, mobile programs are
distributed in forms that are isomorphic to the original 
source code. Such codes are easy to decompile, and hence
they increase the risk of malicious reverse engineering attacks.

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 
{\em obfuscation}. An {\em 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~\cite{CollbergThomborsonLow98a} 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."
      }

