Aprende a descompilar binarios de bibliotecas de vínculos dinámicos, ejecutables y metadatos de Windows mediante ILSpy.


Si cree que su aplicación WinForms .NET es segura desde el principio y el código fuente no se puede leer, déjeme decirle que está equivocado . Cualquiera puede usar un descompilador que toma un archivo ejecutable como entrada e intenta crear un archivo fuente de alto nivel (código fuente de la aplicación). Es recomendable antes de publicar su aplicación, verificar fallas de seguridad en su código descompilando el ejecutable generado usando alguna herramienta de descompilación. Además de buscar posibles fallas de seguridad, si has heredado una aplicación sin documentación ni comentarios, ver cómo es el comportamiento del código de compilación con un descompilador podría ser bastante útil. 

Si está dispuesto a descompilar ensamblados de .NET por cualquier motivo, le recomendamos que utilice el proyecto ILSpy . ILSpy es un descompilador y funciona de la misma manera que Jadx (el descompilador de APK) , sin embargo, en lugar de descompilar Java, descompila C #. ILSpy es el explorador y descompilador de ensamblajes .NET de código abierto. Las características más conocidas de este descompilador son:

  • Navegación de ensamblajes
  • Desmontaje de IL
  • Compatible con C # 5.0 "async"
  • Descompilación a C #
    • Admite lambdas y 'rendimiento de rendimiento'
    • Muestra documentación XML
  • Descompilación a VB
  • Ahorro de recursos
  • Guarde el ensamblaje descompilado como .csproj
  • Buscar tipos / métodos / propiedades (subcadena)
  • Navegación de tipo / método / propiedad basada en hipervínculos
  • Navegación de tipos base / derivados
  • Historial de navegación
  • Descompilador de BAML a XAML
  • Guardar ensamblado como proyecto C #
  • Encontrar el uso de campo / método
  • Extensible mediante complementos (MEF)
  • Listas de ensamblado

En este artículo aprenderás lo fácil que es descargar ILSpy en tu computadora y descompilar un ejecutable generado por Visual Studio para finalmente ver su código fuente.

1. Descarga los binarios de ILSpy

No hay un instalador oficial, ILSpy es portátil. Los binarios de ILSpy se pueden obtener a través de los lanzamientos del proyecto en Github en el área Lanzamientos  o simplemente haciendo clic en el botón Descargar binarios del sitio web oficial aquí . El zip contiene hasta la fecha 11 archivos (1 ejecutable, 9 bibliotecas de vínculos dinámicos y un archivo de configuración):

ILSpy binaries in Windows

Una vez descargado, puede usar ILSpy a través del ejecutable, no es una herramienta de línea de comandos ya que incluye una GUI.

2. Descompilación de archivos ejecutables de una aplicación WinForms

No te metas con la ética, vamos a descompilar una de nuestras propias aplicaciones hechas con Visual Studio en C #. En nuestro proyecto de ejemplo, expondremos de la manera más insegura un formulario de inicio de sesión simple para un usuario único:

Form Insecure Login Example

El modelo de credenciales se almacena en variables en el código fuente, lo que obviamente es una falla de seguridad. Mediante una declaración if, verificaremos si el usuario conoce las credenciales cuando el usuario hace clic en el botón de inicio de sesión. El código fuente de nuestra aplicación es el siguiente:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        public string globalUsername = "Batman";
        public string globalPassword = "batmobil";

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            string username = textBox1.Text;
            string password = textBox2.Text;

            if(username == globalUsername && password == globalPassword)
            {
                MessageBox.Show("Inicio de sesión concedido, ¡increíble!");
            }
            else
            {
                MessageBox.Show("Inicio de sesión denegado, compruebe sus credenciales.");
            }
        }
    }
}

Ahora compilaremos (construiremos la solución) nuestro proyecto para generar los binarios del mismo en la carpeta bin/Debug del proyecto:

Build solution project Visual Studio

El proyecto de solución de compilación actualizará los binarios de depuración y puede encontrar el ejecutable de su aplicación en la carpeta bin/Debug, por ejemplo. Abra ILSpy, haga clic en Archivo en la barra de menú y seleccione Abrir. Se iniciará el explorador de archivos y te permitirá seleccionar un ensamblado, que en este ejemplo estará ubicado en la carpeta Debug de nuestro proyecto:C:\Users\me\Documents\visual studio 2017\Projects\<project-name>\bin\Debug

ILSpy select file

Una vez que seleccione el ejecutable, ILSpy iniciará el proceso de descompilación y agregará el archivo seleccionado como un elemento en la Vista de árbol. Allí podrá explorar la estructura y los recursos del archivo y el código fuente. En nuestro ejemplo, tenemos un único formulario llamado Form1 que se puede ver fácilmente a través de ILSpy:

ILSpy Read Source Code of application

¿Lo ves bien? ILSpy pudo obtener el código fuente de nuestra aplicación inicial y podemos ver el algoritmo de "inicio de sesión impresionante" de nuestro proyecto WinForms. La descompilación también funciona obviamente con versiones que no son de depuración.

Que te diviertas ❤️!


Interesado en la programación desde los 14 años, Carlos es un programador autodidacta, fundador y autor de la mayoría de los artículos de Our Code World.

Conviertete en un programador más sociable

Patrocinadores