Desensamblar una DLL compilada en .NET
Para mirar dentro de una DLL que haya sido creada en .NET, podemos utilizar una serie de herramientas que nos ofrece Microsoft. Al estar hecha en .NET, realmente el código que hay dentro de la librería no está compilado por lo tanto podemos mirar dentro de ésta con facilidad y consultar su código. Si no está hecha con .NET realmente el código estará compilado y no podremos consultar sus métodos directamente. Aún pudiendo observarlos, tampoco tendremos información de sus parámetros e iremos un poco a ciegas. Cuándo se compila el código en .NET éste se traduce a MSIL (Microsoft Intermediate Language). Se produce el mismo MSIL independientemente de lenguaje con el que hayamos programado. Luego el MSIL es procesado por el CLR (Common Language Runtime) durante la ejecución.
Una vez generado todo el conjunto de clases se compila en una única DLL el cuál se referencia a un fichero de ensamblado. El ensamblado incluye el MSIL y los metadatos. A partir del ensamblado del MSIL podemos revertirlo a .NET. Para realizar esto, utilizaremos ILDASM, una herramienta que permite extraer el MSIL del fichero ensamblado. Luego el MSIL lo podemos convertir a nuestro código en .NET.
Una de las herramientas que nos permitirá hacer ésto, es Reflector.
- Reflector:
Reflector soporta C#, VB, IL (Intermediate Language), Delphi, C++ y Chrome. Una vez descompilado un assembly podemos ver el código fuente en uno de éstos lenguajes. Otra de las cosas interesantes de Reflector, es su extensibilidad para crear Add-ons. CodePlex dispone de una excelente lista de .NET Reflector Add-ins, y CodeSearch que nos permite buscar código a partir del texto obtenido al desensamblar código.
En los siguientes post os mostraré herramientas aún más interesantes para poder descompilar una aplicación o para visualizar los recursos que dispone.
Que pasa si reflector no lo puede abrir, es decir la etiqueta de inicio a sido retirada y no permite mas que su ejecucion.
ReplyDeleteHas probado las alternativas sugeridas en Stackoverflow?
ReplyDeleteOpen Source Alternatives to Reflector
Muy interesante la explicacion, mas me faltan los costos.
ReplyDeleteGracias