Invalid Code

El invalid code inserta secuencias que los decompiladores no pueden procesar, rompiendo su salida mientras tu aplicación sigue ejecutándose con total normalidad.

  • .NET.NET
TL;DR

El invalid code inyecta secuencias de instrucciones lo bastante válidas para que el runtime las ejecute, pero malformadas desde el punto de vista de un decompilador. La aplicación se ejecuta correctamente. El decompilador produce una salida rota, incompleta o no compilable.

Definición

¿Qué es el invalid code?

El invalid code es una técnica de ofuscación que aprovecha la brecha entre lo que acepta un runtime y lo que espera un decompilador. Inserta secuencias que el runtime de .NET ejecuta sin problema pero que los decompiladores no pueden interpretar.

Los decompiladores reconstruyen código fuente legible a partir del código compilado asumiendo que sigue los patrones que produce un compilador normal. El invalid code rompe esa suposición.

La aplicación se comporta exactamente como se espera, porque el runtime maneja las secuencias correctamente. El decompilador, que espera código con forma de compilador, falla: peta, se salta métodos o produce una salida que no compila.

Mecanismo

Cómo funciona el invalid code

El invalid code ataca las debilidades de los decompiladores:

  • Secuencias malformadas. Se insertan patrones de instrucciones válidos para el runtime pero inesperados para los decompiladores.

  • Trampas específicas por decompilador. Se colocan en los métodos sensibles construcciones que se sabe que rompen los decompiladores .NET más comunes.

  • Inserción segura para el runtime. Cada secuencia se verifica para que el runtime la ejecute sin error.

El resultado es código que se ejecuta pero que resiste ser reconstruido como fuente legible.

Ejemplo

Ejemplo de invalid code

El mismo método .NET, abierto en un decompilador. El invalid code cambia lo que el decompilador puede recuperar.

Sin invalid code

Un decompilador abre tu assembly y produce código fuente limpio, legible y recompilable.

Con invalid code

El mismo decompilador choca con las secuencias inválidas y produce una salida rota, métodos incompletos o falla en ellos por completo.

Sin invalid code
public class PaymentProcessor
{
    public void Charge(decimal amount)
    {
        gateway.Submit(amount);
    }
}
Con invalid code
public class PaymentProcessor
{
    public void Charge(decimal amount)
    {
        gateway.Submit(amount);
    }
}

Casos de uso

Cuándo usar invalid code

El invalid code es especialmente útil cuando tu aplicación .NET:

  • Debe resistir los decompiladores comunes a los que un atacante echa mano primero.
  • Ya está renombrada y ofuscada, el invalid code añade otra barrera.
  • Contiene métodos lo bastante sensibles para justificar romper la decompilación directamente.

Se combina con invalid metadata y control flow obfuscation: juntos hacen que la decompilación no sea fiable y que el código recuperado sea ilegible.

Disponibilidad por plataforma

Invalid code y la plataforma .NET

  • .NET

    Exclusivo. El invalid code ataca el comportamiento específico de los decompiladores de .NET. Otras plataformas resisten la decompilación mediante distintas protecciones de Shield.

Preguntas frecuentes

¿Qué es el invalid code?
El invalid code es una técnica de ofuscación para .NET que inserta secuencias de instrucciones que el runtime ejecuta correctamente pero que los decompiladores no pueden interpretar, rompiendo la salida en la que un atacante se apoyaría.
¿El invalid code afecta a cómo se ejecuta mi aplicación?
No. Cada secuencia se verifica como segura para el runtime, así que la aplicación se comporta exactamente como se espera.
¿El invalid code detiene a todos los decompiladores?
Rompe los decompiladores comunes a los que un atacante echa mano, pero las herramientas evolucionan. El invalid code es una capa más, más fuerte combinado con ofuscación e invalid metadata.
¿El invalid code afecta al rendimiento?
El impacto es despreciable. Las secuencias insertadas son pequeñas y no añaden un coste relevante en runtime.
¿Qué plataformas soportan invalid code?
El invalid code se aplica solo a .NET, porque ataca específicamente a los decompiladores de .NET.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El invalid code es una de las más de 20 protecciones de ByteHide Shield. Aplícalo a tu aplicación .NET junto a la ofuscación para una profundidad real.

ByteHide runtime dashboard showing live threat monitoring and protection metrics