Cómo proteger tus ejecutables de .NET Framework de descompiladores o de ingeniería inversa

Cómo proteger tus ejecutables de .NET Framework de descompiladores o de ingeniería inversa

Aunque la mayoría de los desarrolladores publican nuevos proyectos públicamente (el producto, una aplicación, lo que sea), a veces quieren conservar su código fuente para ellos mismos (código cerrado) y eso está totalmente bien. El problema surge cuando alguien que tiene acceso al producto, intenta descompilarlo para obtener parte/todo el código que le da vida al producto, para encontrar información sensible que fue almacenada irresponsablemente en una variable de texto en el proyecto (duh). Este es un problema constante en el entorno empresarial y, por lo tanto, existen muchas soluciones posibles al igual que los productos pagos que prometen proteger tus ejecutables. Si estás buscando una solución de código abierto para este problema, has llegado al lugar correcto.

¿Cuál es el problema con los descompiladores?

Como escribimos en un artículo anterior sobre cómo descompilar un ejecutable compilado con C # usando ILSpy , haremos lo mismo en este artículo para entender qué está pasando aquí.

Crea una aplicación de ejemplo

En caso de que no tengas un ejecutable creado con C# para probar la herramienta, debes crear uno. En nuestro caso, usaremos una aplicación muy básica de un botón que lanza una alerta cuando se hace clic. El código de esta aplicación es el siguiente en caso de que necesites una para probar:

using System;
using System.Windows.Forms;

namespace Sandbox
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(
                "Hello There",
                "Salutations",
                MessageBoxButtons.OK,
                MessageBoxIcon.Information
            );
        } 
    }
}

Compila el proyecto y genera un ejecutable. Podemos usar el binario de depuración (C:\Users\username\source\repos\ProjectName\bin\Debug\Project.exe). Ahora que tienes un ejecutable para probar, puedes continuar con el resto del tutorial.

Descompilar usando ILSpy

Si usamos la utilidad ILSpy para descompilar la compilación ejecutable al ejecutar el proyecto, encontrará el código fuente de su proyecto (verifica el evento button1_Click):

ILSpy Decompiled Binary

Es muy probable que reconozcas parte del código que escribimos originalmente en el proyecto en los archivos descompilados que generó ILSpy. Eso es exactamente lo que vamos a evitar que suceda en este tutorial.

Protegiendo tus binarios de la descompilación 

Para proteger los binarios generados del proyecto C# creado con .NET, usaremos la herramienta ConfuserEx. ConfuserEx es un protector de código abierto para aplicaciones .NET. Es el sucesor del proyecto Confuser. Sin embargo, el proyecto ConfuserEx tampoco se mantuvo oficialmente y ahora hay un fork que se está manteniendo . Este proyecto incluye:

  • Soporta .NET Framework 2.0 / 3.0 / 3.5 / 4.0 / 4.5 / 4.6 / 4.7
  • Cambio de nombre de símbolo (compatible con WPF / BAML)
  • Protección contra depuradores / perfiladores
  • Protección contra el volcado de memoria
  • Protección contra manipulación (método de cifrado)
  • Control de la ofuscación del flujo
  • Cifrado constante / de recursos
  • Proxies de ocultación de referencias
  • Deshabilitar descompiladores
  • Incorporación de la dependencia
  • Compresión de salida
  • API de complemento extensible
  • ¡Vienen muchos más!

Básicamente, lo que vamos a hacer es proteger el código fuente a través de la ofuscación (así es, un ofuscador de C # como este ofuscador de JavaScript ).

Para obtener más información sobre ConfuserEx, visita el repositorio oficial en Github aquí .

1. Descarga ConfuserEx

Como primer paso, debes descargar la última versión disponible de ConfuserEx. Puedes encontrar las versiones del proyecto en esta página. Asegúrate de descargar la versión con una interfaz gráfica de usuario, ya que esa es la que explicaremos en este tutorial. Ejecuta ConfuserEx.exe y continúa con el tutorial.

2. Ofuscar ejecutable

Ahora necesitas un ejecutable .NET, como mencionamos, puedes crear un nuevo proyecto con el código provisto al principio del artículo para probar o puede proceder inmediatamente con su propio proyecto ejecutable. Después de iniciar ConfuserEx, simplemente puedes arrastrar y soltar el binario que deseas proteger o hacer clic en el símbolo más en el lado derecho de la aplicación y seleccionar tu .exe:

ConfuserEx Executable Protection .NET

En nuestro caso, usaremos el binario Sandbox.exe del directorio de depuración del proyecto. Es probable que uses la versión de producción del binario, esto es solo un ejemplo. Después de seleccionar el archivo, aparecerá en la pestaña del proyecto. Ahora debes ir a la pestaña Configuración, encontrarás allí otra lista de módulos (sus ejecutables), donde puedes aplicar nuevas reglas de protección, ya sea globalmente o para un binario específico. En nuestro caso, aplicaremos las reglas de protección globalmente a cualquier binario que podamos incluir en ConfuserEx.

Selecciona el módulo, luego haz clic en el ícono más en el lado derecho de la aplicación. Esto agregará el nuevo elemento de reglas que aparecerá como un único elemento \true. Luego, selecciona el elemento true y haz clic en el botón editar en el lado derecho de la aplicación:

ConfuserEx Obfuscation Rules

Luego, aparecerá un nuevo diálogo. En este cuadro de diálogo, podrás agregar reglas de ofuscación. Puedes agregar una nueva regla haciendo clic en el icono más en el lado derecho del cuadro de diálogo, para cada elemento nuevo en el área de protecciones puedes seleccionar el nombre de la regla que deseas aplicar, en nuestro ejemplo aplicaremos todos los elementos posibles:

Obfuscation Rules ConfuserEx

Haga clic en Listo y ya. Finalmente, ve a la pestaña de configuración y haz clic en proteger:

Protect Executable through ConfuserEx

Encontrarás el nuevo ejecutable que tiene la protección en el directorio /Confused (parámetro Output Directory que puede encontrar en la pestaña Proyecto). El binario de salida está protegido ahora, por lo que puedes intentar ejecutar ILSpy o cualquier otro descompilador en él y encontrará que la información extraída está ofuscada.

Que te diviertas ❤️!

Esto podria interesarte

Conviertete en un programador más sociable