Ofusca tu código en C#

Saad Aslam 12 octubre 2023
  1. Qué significa ofuscación de código en C#
  2. Ofuscación de código en C#
  3. Enfoques para implementar la ofuscación en C# usando estas herramientas
  4. Renombrar Ofuscación en C#
  5. Cifrado de cadenas en C#
  6. Anti-Depuración de Código en C#
  7. Anti-Tamper de Código en C#
  8. Inserción de código ficticio en C#
  9. Vinculación binaria/fusión en C#
Ofusca tu código en C#

Este artículo le presentará cómo puede ofuscar su código en C#. Usando una variedad de formas y algunas herramientas que pueden ayudar en el proceso.

La mayoría de los compiladores que no son .Net emiten programas binarios que contienen instrucciones de CPU nativas. Que son muy difíciles de desmontar, descompilar y realizar ingeniería inversa.

Sin embargo, todos los compiladores .Net como C# y Managed C++ entregan programas compilados en MSIL (Microsoft Intermediate Language Format).

Este formato retiene una gran cantidad de información de alto nivel en su software, como nombres de clases, campos, métodos, propiedades y configuraciones, así como incluso el código real en una estructura rica.

Como resultado, se han creado diferentes descompiladores y desensambladores para extraer esta información de un ensamblado .Net.

Qué significa ofuscación de código en C#

La técnica de modificar un ejecutable para que ya no sea útil para un pirata informático pero siga siendo completamente funcional se conoce como ofuscación de código.

Aunque el procedimiento puede modificar declaraciones de métodos o metadatos, no afecta la salida del programa.

Ofuscación de código en C#

Code Ofuscation comprende varios enfoques diversos que trabajan juntos para proporcionar una defensa en capas. Es especialmente útil para lenguajes como C# que emiten instrucciones de nivel intermedio.

Hay varias herramientas de ofuscador disponibles que pueden ayudarlo a hacer que su código C# sea difícil de interpretar para los piratas informáticos.

  • Reactor .NET
  • Eazfuscator.NET
  • Babel
  • ConfusorEx

Enfoques para implementar la ofuscación en C# usando estas herramientas

Existen varios enfoques para hacer que su código no sea comprensible para nadie. Un par de ellos se discuten en los siguientes párrafos.

Renombrar Ofuscación en C#

Esta técnica modifica los nombres de métodos y variables. Hace que la fuente descompilada sea difícil de comprender para los humanos, pero no afecta la ejecución del programa.

Los nuevos nombres pueden emplear varios esquemas, como alfabetos, dígitos y letras no imprimibles o invisibles.

Siempre que los alcances de los nombres difieran, se pueden sobrecargar. La mayoría de los ofuscadores de C# emplean el nombre de ofuscación como una transformación fundamental.

Código fuente original antes de cambiar el nombre de ofuscación:

public class Data {
  public int age;
  public Data(int age) {
    this.age = age;
  }
}

Código fuente con ofuscación de cambio de nombre implementada.

public class a {
  public int b;
  public a(int b) {
    this.b = b;
  }
}

Cifrado de cadenas en C#

Las cadenas se identifican inmediatamente como parte de un código bien administrado y bien ejecutado.

Incluso si se cambia el nombre de los métodos y las variables, las referencias de cadenas pueden encontrar áreas de código importantes comprobando las referencias de cadenas dentro del binario.

Contiene todos los mensajes que el usuario puede ver. Proporcionará una barrera contra esta forma de ataque.

El cifrado de cadenas cifra las cadenas en el ejecutable, pero solo devuelve su valor real cuando es necesario.

Código fuente original antes del cifrado de cadenas:

Console.WriteLine("Encrypt this");

Código fuente con cifrado de cadenas implementado.

Console.WriteLine("x%$&#@");

Anti-Depuración de Código en C#

Cuando un atacante intenta cambiar sus datos o robar la funcionalidad de un componente crítico, probablemente comenzará con la ingeniería inversa y la depuración.

Los profesionales y los piratas informáticos utilizan herramientas para analizar el código línea por línea. Un ofuscador puede identificarlo a través de la autoprotección de la aplicación.

Cuando se usa un depurador, puede destruir datos cruciales, provocar bloqueos aleatorios o realizar cualquier acción en particular.

Los profesionales de la seguridad de TI pueden utilizar las herramientas antidepuración para detectar si un hacker utiliza una aplicación de depuración como parte de un ataque.

Los piratas informáticos pueden utilizar herramientas antidepuración para identificar cuándo se utiliza una herramienta de depuración para determinar los cambios que están aplicando al código.

Anti-Tamper de Código en C#

Un ofuscador puede inyectarle autoprotección de la aplicación. Si se descubre una manipulación, se puede cerrar el programa, limitar su funcionalidad, bloqueos aleatorios (para ocultar la causa del bloqueo) o tomar cualquier otra acción específica.

También puede enviar un mensaje a un servicio informándole de la manipulación descubierta.

Inserción de código ficticio en C#

Inserte código en un ejecutable que no tenga influencia en la lógica del programa pero rompa los descompiladores o haga que el código de ingeniería inversa sea mucho más difícil de entender.

Vinculación binaria/fusión en C#

Esta transformación combina varias bibliotecas/ejecutables de entrada en uno o más archivos binarios de salida.

La vinculación puede ayudarlo a minimizar el tamaño de su aplicación, especialmente cuando se combina con el cambio de nombre y el recorte.

También puede facilitar la implementación y minimizar la cantidad de información a la que tienen acceso los piratas informáticos.

Autor: Saad Aslam
Saad Aslam avatar Saad Aslam avatar

I'm a Flutter application developer with 1 year of professional experience in the field. I've created applications for both, android and iOS using AWS and Firebase, as the backend. I've written articles relating to the theoretical and problem-solving aspects of C, C++, and C#. I'm currently enrolled in an undergraduate program for Information Technology.

LinkedIn