Como ver código fuente o “Hackear” una aplicación hecha en .Net


Cuando estamos construyendo software es muy sencillo mirar nuestro propio código fuente y recordar que hemos hecho para posteriormente usarlo en un nuevo proyecto u optimizar el código ya creado, el problema viene cuando se quiere dar mantenimiento o crear una nueva aplicación con ensamblados de terceros ya que no se conoce en su totalidad el código.

Pero el verdadero problema viene cuando se desea construir una aplicación que usa ensamblados en DLL’s y no se sabe que puede contener esto, también que puede ser un riesgo para el software ya que muchos ensamblados de terceros vienen con código mal implementado o con backdoors que sus creadores no han detectado.

Cuando se trabaja en aplicaciones de C++ nativas, C, Delphi, entre otros la mejor manera de poder ver lo que sucede en una DLL o algún otro ejecutable necesario es usando un Debugger para cada lenguaje y en sí un Debug se hace para optimizar el rendimiento de una aplicación, ver estadísticos durante la ejecución, entre otro montón de maravillas; el problema es que la mayoría de debuggers no nos dejan ver lo que está sucediendo porque muestran una barra de progreso y ya, o los más avanzados muestran los resultados mostrando el código en ASM y yendo más al extremo muestran en hexadecimal, porque si bien debes saber la memoria de un aparato electrónico se representa en este sistema numérico y esto está bien si tienes conocimientos avanzados del manejo de memoria, ASM y etc etc; pero es que la mayoría no tenemos estos conocimientos!.

Para esto muchos desarrolladores se han puesto a la tarea de crear aplicaciones que hagan la vida más fácil para ir comenzando con este tema o simplemente para la finalidad de este post, ver el código fuente de una aplicación hecha en .Net, el Framework al tener la siguiente arquitectura es mucho más fácil a la hora de trabajar, ya que todo se basa sobre el CLR:

Framework .Net

Luego de dar una breve introducción ahora si al tema, existen muchísimas herramientas, una pago, otras gratis y lo que siempre buscamos son las gratis, por lo que expondré 2 herramientas que cada quien mirará para que las usa.

  1. ILSpy.
  2. Dotnet IL Editor (DILE).

Ambos cumpliendo la misma funcionalidad pero el primero más sencillo de usar que el segundo.

Cuando se descargue el ILSpy se tendrá un archivo Zip, el cual se ejecuta el archivo llamado “ILSpy.exe” y se verá algo parecido a esto:

ILSpy

Para ver algún ensamblado que no esté en la lista se puede dar CTRL + A para abrir o en el menú File>Abrir. En mi caso abriré una DLL de Coding4Fun para ver como están los métodos para la creación de los controles:

Agregando un ensamblado en ILSpy

Ahora en el menú de la izquierda aparece el ensamblado que se acabó de abrir y todos los métodos, recursos, referencias y demás. En el panel de la derecha están todos los metadatos de este ensamblado, pero más adelante se visualizará el código:

Visualizando el ensamblado

Luego expandí el espacio de nombre “Coding4Fun.Toolkit.Controls” y ahí seleccioné “ChatBubble”; en el panel de la derecha expandí el método “UpdateChatBubbleDirection” y finalmente pude ver el código que usan para actualizar la burbuja de chat.

Mirando el código en C#

Incluso se puede abrir un *.exe, en la siguiente foto abrí un ejecutable de un proyecto que hice una vez y perfectamente puedo reconocer el código que yo mismo hice:

Mirando el código fuente de un ejecutable (*.exe)

Si no eres amante de C#, este te puede traducir casi todo el código a Visual Basic (digo casi porque no conozco muy bien VB) y lo más interesante es que muestra el código en IL (Intermediate Language) que es el que entiende el Framework .Net:

Cambiando de lenguaje VB

Cambiando de lenguaje a IL

La otra opción que es un poco más compleja y a más bajo nivel es DILE, que bien si me recuerda mucho a Eclipse no está construido en Java. Aquí se tiene más opciones de configuración, se pueden crear proyectos de debugging y muchas más cosas, pero lo que nos interesa no es eso.

DILE

Aquí toca escoger en el menú Project>Add assembly y en el panel de la derecha desplegar donde dice New Project y veremos nuestro ensamblado, aquí pues se escoge lo que se necesite, en mi caso busqué el mismo método que se dijo anteriormente y podremos ver el código en IL y las líneas de código de IL  necesarias:

Viendo el código de IL

30 comentarios en “Como ver código fuente o “Hackear” una aplicación hecha en .Net

  1. Hola yo descompile código y puedo hacer que funcionen los programas perfectamente. Pero para recomponer los formularios ya que me salen muchas llamadas mal o tal???????? Algun consejo?

  2. Mira diseñamos un sistema contable; pero no recordamos donde se encuentra el codigo fuente quisiera saber como podría encontrarlo a través de este programa..

  3. Muy interesante, hace tiempo creia que era posible ver los codigos usando el ASM, pero era muy desalentador realizar algo asi, porque se que tomaria mucho tiempo. Sinceramente me sorprendieron y muchas gracias por que pude recuperar el codigo fuente de una .dll sobre matematicas que me tomo mas de 20 dias en desarrollarlo.
    Gracias por el aporte amigo.
    Thank you!.

  4. El código .NET es vulnerable a las herramientas que puedan ver el código IL. Pero siempre se puede ofuscar con herramientas eficaces, como Confusión (gratuita y muy útil).
    Aunque es como todo, no es infalible. No lo son ni las aplicaciones compiladas en código nativo, pero menos es nada!!
    Un saludo, y buen artículo.

  5. hola camilo soy jesus, tenia otra preguntica mas bien te quiero pedir un favor-cito disculpa el abuso y la molestia es que la verdad soy nuevo en el area estudio ingenieria mecatronica en Venezuela y no me familiarizo mucho con programación, si se pero prácticamente lo básico. Resulta que quiero hacer una app o aplicación la idea es que la app pueda interactuar con uno, como un bot conversacional así como por ejemplo ¨Dr. abuse¨ no se si lo conoces, hee quiero ver la programación que usaron en dicho programa, así me llevara menos trabajo solo de cambiarle algunas cosas para que sea mas original y propio, disculpa de nuevo la molestia y el abuso de mi parte, pero la verdad necesito tu ayuda. Quisiera recopilar la información interna del programa su diseño su programación con que programa lo realizaron todo, desnudar-lo por decirlo de otra manera.

    Sera de gran ayuda toda la información que me brindes, nose si de casualidad tendrás alguna app o programa que ayas realizado referente a lo que quiero hacer para familiarizarme mas hacia la programación, o que tu con tu experiencia y habilidades en esta rama ta bella me hagas el favor y desnudar el programa ¨Dr. abuse¨ y mandarme como esta configurado su programación todo por este mismo medio de nuevo me disculpo por cualquier molestia ocasionada, de verdad muchas gracias de ante mano agradeceré muchiiiiisimo cualquier ayuda que me brindes (Y) espero que sigas así con tu bloc esta muy genial de verdad

  6. Genial me encanto, pero tengo una preguntica !!! quiero modificarle algo a un programa y colocarle algunas cosas nuevas😀 se podra ???

    1. Hola Jesus, muchas gracias. Claro que puedes pero es un proceso un poco más complicado, si el compilado no está ofuscado puedes usar herramientas como esta: http://www.jetbrains.com/decompiler/ que es para .Net y permite exportar en proyectos para usarse con Visual Studio.

      Pero si el tema es más complicado y está ofuscado el código o queremos modificar el compilado como por ejemplo para cambiarle la firma digital y que los antivirus no lo reconozcan puedes usar herramientas a más bajo nivel como: http://www.ollydbg.de/ esta última es muy usada en el malware. Saludos!

      1. Ok, muchas gracias.En el tema de ingieneria inversa estoy empezando pero conocimientos generales de la ciencia lo tengo, y es que necesito mejorar una aplicacion por lo que necesito ver algunos detalles de lo que hace.Gracias nuevamente.

  7. Tu blog me parece genial y me ayudo mucho, hay personas que no entiende lo mucho que llena de animo a uno que le comenten en su blog, yo tengo unos de base de datos y se que dar las gracias alegra mucho felicitaciones por tu aporte amigo

    1. Hola Carlos, en teoría si; obviamente hay métodos para evitar esto sin embargo la mayoría de soluciones son pagas y en algunas ocasiones muy costosas. Respecto a saber si está en .NET eso muchas veces lo dice el desarrollador o la casa de software.

  8. FASCINANTE PARA LOS AMANTES DE LA PROGRAMACION, CLARO PARA MI TAMBIEN SIGUE ASI, ESPERO SUBAS OTRO POST EXPLICANDO OTRAS COSAS MAS AVANZADAS😀

    1. En ningún momento estoy criticando esto, solo que en algunas ocasiones se necesita que el código fuente no se vea y esto no es característica de Visual Studio si no del CLR y su forma en que compila el código… En otras ocasiones lo que si realmente se necesita es ver el código fuente de otras aplicaciones hechas en el Framework .NET

  9. Jojojoo esta padrisimo esto, por que pude ver mucho codigo fuente, pero si quiero proteger dicho codigo como podriamos hacerle!!, saludos. me ayudo mucho esta aplicacion para ver el codigo!

Los comentarios están cerrados.