domingo, 9 de marzo de 2008

Reflector, un decompilador de .Net

Una de las cosas que siempre me han intrigado a la hora de programar es el tema de la decompilación. Es decir, tu tienes un código fuente, lo compilas, pero luego ¿existe alguna forma sencilla de tener de nuevo el código fuente completo de tu aplicación en el mismo lenguaje?.

El otro día, haciendo alguna prueba con Visual Basic .Net me encontré con Reflector. Y lo siguiente que hice fue probarlo. Lo primero es hacer un pequeño código fuente ridículo que sirva para nuestros propósitos:



Lo siguiente es abrir Reflector y cargar el exe que acabamos de generar:



Ahora, basta con pinchar en "Dissasembler" y obtener el código fuente. Increible.



La explicación es sencilla. Todos los lenguajes de la plataforma .Net se compilan a un pseudolenguaje intermedio llamado MSIL (Microsoft Intermedate Lenguaje). Es decir, cuando en Visual Basic hemos pinchado en construir el proyecto, no se compila directamente a código máquina, sino que se deja en algo intermedio que será compilado posteriormente por el JIT (el just in time compiler) cuando se ejecute por primera vez el programa (o en la instalación). A todos los que programeis en Java os sonará bastante esto que estoy comentando (es parecido a los bytecodes). De hecho, es posible hasta escribir código directamente en lenguaje MSIL.

A si que, y debido a esta nueva forma de funcionar de los lenguajes .Net es muy recomendable ofuscar (con el Dotofuscator por ejemplo) todos los exe que hagamos ya que estarán en este MSIL y serán accesibles por todo el mundo.

Por supuesto, el decompilador no sólo sirve para obtener el código fuente y "piratear" algo que no es nuestro. También puede ser muy útil cuando queramos obtener cierta información sobre que hace cierta parte del programa, porque da errores o que librerias, clases o dependencias tenemos. Como en casi todos estos tipos de programa, todo depende del uso que le des ;-)

Enlaces:
- Reflector

Además, existen por la red otros decompiladores que también pueden ser útiles:

- Salamander .Net Decompiler
- Xenocode Fox 2007
- Dis# .Net Decompiler
- Decompiler para .Net (Jungle Creatures Inc.)

No hay comentarios: