In Spanish
La plataforma .NET de Microsoft se basa en una filosofía de just-in-time compilation (compilación bajo demanda al momento de la ejecución). Los programas desarrollados de esta manera se ejecutan en un entorno o framework independiente de la plataforma, basado en objetos y, en algunos casos, permitiendo que interactúen componentes desarrollados en distintos lenguajes de programación.
La clave de esta flexibilidad se da en que, tanto en JAVA como en las plataformas .NET, la compilación resulta en un código intermedio, independiente de la plataforma (bytecode y MSIL respectivamente). Sin embargo, dicha flexibilidad tiene un costo. Hoy en día, y utilizando herramientas gratuitas que pueden descargarse desde Internet, es sumamente fácil aplicar tecnologías de ingeniería inversa a las dos plataformas de desarrollo más populares:
JAVA y .NET.
De todas las técnicas que los desarrolladores pueden utilizar para proteger su propiedad intelectual, la ofuscación es la técnica más aceptada y de hecho, es la única utilizada comercialmente.
En este trabajo, proponemos el uso de los mecanismos de excepción (bloques try-catch) que brinda la plataforma .NET como una manera de mejorar la calidad de uno de los bloques básicos de la ofuscación, los predicados opacos.
In English
Microsoft’s .NET Framework, and JAVA platforms, are based in a just-in-time compilation philosophy. Software developed using these technologies are executed in a hardware independent framework, which provides a full object-oriented environment, and in some cases allows the interaction of several components written in different programming languages.
This flexibility is achieved by compiling into an intermediate code which is platform independent. Java is compiled into ByteCode, and Microsoft .NET programs are compiled into MSIL (Microsoft Intermediate Code). However, this flexibility comes with a price. It is really easy, with tools available for free in the web, to decompile this intermediate code and obtain a working, readable version of the original source code.
Of all techniques developers can use to protect their intellectual property, obfuscation is the most accepted and commercially available one.
In the present work, we propose the use of try-catch mechanisms available in .NET as a way to improve the quality of one of the building blocks of obfuscation: opaques predicates.