Anti-ILDasm

Anti-ILDasm marca tus ensamblados .NET para que no puedan abrirse con ILDasm, el desensamblador de IL que viene con el SDK de .NET.

  • .NET.NET
TL;DR

Anti-ILDasm añade un atributo a tu módulo .NET que indica a ILDasm, el desensamblador de IL de Microsoft, que se niegue a abrirlo. Es una primera barrera ligera contra la inspección casual de tus ensamblados, y es más eficaz como una capa más dentro de protecciones más fuertes como control flow obfuscation.

Definición

¿Qué es anti-ILDasm?

ILDasm es el desensamblador de IL que se distribuye con el SDK de .NET. Coge cualquier ensamblado .NET y produce un listado legible de su lenguaje intermedio, las instrucciones que ejecuta el runtime. Cualquiera con el SDK puede apuntar ILDasm a tu .dll y empezar a leer.

Anti-ILDasm es una protección que lo bloquea. Aplica el SuppressIldasmAttribute a tu módulo, un atributo que el propio ILDasm respeta negándose a abrir el ensamblado.

Es importante ser preciso con lo que hace. Anti-ILDasm detiene a ILDasm en concreto. Es una primera barrera contra la inspección casual, no una defensa completa, y siempre debe combinarse con ofuscación de verdad.

Mecanismo

Cómo funciona anti-ILDasm

Anti-ILDasm funciona añadiendo el SuppressIldasmAttribute al módulo compilado. Cuando ILDasm abre un ensamblado, comprueba si está este atributo y, cuando lo encuentra, se niega a desensamblar el módulo.

  • Atributo SuppressIldasm. El atributo se añade en tiempo de build a los metadatos de tu ensamblado compilado.

  • ILDasm lo respeta. El ILDasm de Microsoft comprueba el atributo al abrir el archivo y rechaza la petición de desensamblado.

  • dnSpy e ILSpy lo ignoran. Los decompiladores avanzados no respetan el atributo, por lo que anti-ILDasm debe combinarse con ofuscación real.

  • Coste en runtime cero. El atributo son metadatos. No afecta a la ejecución de ninguna manera.

Por eso anti-ILDasm es una capa base. Por sí solo disuade de la inspección oportunista. Combinado con name obfuscation, control flow obfuscation y anti-debugging, forma parte de una defensa que aguanta frente a herramientas serias.

Ejemplo

Ejemplo de anti-ILDasm

El mismo ensamblado .NET, abierto con ILDasm. Anti-ILDasm cambia si ILDasm llega siquiera a leerlo.

Sin anti-ILDasm

Cualquiera con el SDK de .NET abre tu ensamblado en ILDasm y lee el listado completo de IL, método a método.

Con anti-ILDasm

ILDasm detecta el SuppressIldasmAttribute en el módulo y se niega a abrirlo.

Sin anti-ILDasm
[assembly: AssemblyTitle("Acme.Payments")]

namespace Acme.Payments;

internal class PaymentProcessor
{
    public void Charge(decimal amount) { /* ... */ }
}
Con anti-ILDasm
[assembly: AssemblyTitle("Acme.Payments")]

namespace Acme.Payments;

internal class PaymentProcessor
{
    public void Charge(decimal amount) { /* ... */ }
}

Casos de uso

Cuándo usar anti-ILDasm

Anti-ILDasm merece la pena aplicarlo prácticamente a cualquier aplicación .NET como capa base, porque no cuesta nada y elimina el camino de inspección más fácil. Úsalo cuando tu aplicación:

  • Es un ensamblado .NET que se distribuye a entornos que no controlas.
  • No debería poder ser desensamblada de forma casual con herramientas por defecto.
  • Ya está protegida con ofuscación; anti-ILDasm completa la capa base.

No debería ser nunca tu única protección. Combínalo con name obfuscation y control flow obfuscation para tener profundidad real.

Disponibilidad por plataforma

Anti-ILDasm y la plataforma .NET

  • .NET

    Exclusivo. ILDasm forma parte del ecosistema .NET, así que anti-ILDasm aplica solo a ensamblados .NET. En otras plataformas, el objetivo equivalente, resistir el desensamblado, lo cubren protecciones distintas.

Preguntas frecuentes

¿Qué es anti-ILDasm?
Anti-ILDasm es una protección de .NET que añade el SuppressIldasmAttribute a un ensamblado, indicando al desensamblador ILDasm de Microsoft que se niegue a abrirlo. Bloquea la inspección casual de tu lenguaje intermedio.
¿Anti-ILDasm detiene a dnSpy o ILSpy?
No. Anti-ILDasm detiene a ILDasm en concreto. Decompiladores avanzados como dnSpy o ILSpy ignoran el atributo. Por eso anti-ILDasm es una capa base que siempre se combina con ofuscación que sí resista a esas herramientas.
¿Anti-ILDasm afecta al rendimiento?
No. Añade un único atributo al módulo y tiene coste cero en runtime.
¿Anti-ILDasm es suficiente para proteger mi app .NET?
No. Por sí solo solo disuade al desensamblador por defecto. La protección real viene de combinarlo con name obfuscation, control flow obfuscation y anti-debugging.
¿Qué plataformas soportan anti-ILDasm?
Anti-ILDasm aplica solo a .NET, porque ILDasm es una herramienta de .NET. Otras plataformas resisten el desensamblado con protecciones distintas de Shield.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

Anti-ILDasm es una de las más de 20 protecciones de ByteHide Shield. Aplícala a tu aplicación .NET junto con la ofuscación para tener profundidad real.

ByteHide runtime dashboard showing live threat monitoring and protection metrics