Invalid Metadata

Invalid metadata añade metadata malformada a tus módulos .NET, así los decompiladores fallan al intentar reconstruirlos mientras el runtime sigue ejecutando tu aplicación con normalidad.

  • .NET.NET
TL;DR

Invalid metadata aprovecha el hueco entre lo que necesita el runtime de .NET y lo que esperan los decompiladores. Añade metadata que, desde el punto de vista de un decompilador, está malformada, pero que es inofensiva para el runtime. La aplicación se ejecuta correctamente y los decompiladores no consiguen reconstruirla.

Definición

¿Qué es invalid metadata?

Todo assembly de .NET lleva metadata: información estructurada que describe sus tipos, métodos y miembros. El runtime la usa para ejecutar la aplicación, y los decompiladores la usan para reconstruir código fuente legible.

Invalid metadata es una técnica de ofuscación que añade metadata que el runtime tolera pero que los decompiladores no pueden procesar. Ataca las suposiciones que hacen los decompiladores sobre cómo está estructurada la metadata.

La aplicación se comporta exactamente como se espera, porque el runtime trata la metadata correctamente. Los decompiladores, que esperan metadata bien formada, fallan: se caen, saltan tipos o producen una salida que no se puede reconstruir.

Mecanismo

Cómo funciona invalid metadata

Invalid metadata ataca las debilidades de los decompiladores al parsear la metadata:

  • Entradas de metadata malformadas. Se añaden estructuras de metadata válidas para el runtime pero inesperadas para los decompiladores.

  • Trampas para decompiladores. Se insertan construcciones que se sabe que rompen a los decompiladores .NET más comunes al parsear la metadata.

  • Inserción segura en runtime. Cada cambio se verifica para que el runtime cargue y ejecute el assembly sin errores.

El assembly se ejecuta, pero los decompiladores no pueden reconstruirlo a partir de su metadata.

Ejemplo

Ejemplo de invalid metadata

El mismo assembly .NET, abierto en un decompilador. Invalid metadata cambia si el decompilador puede reconstruirlo siquiera.

Sin invalid metadata

Un decompilador lee la metadata del assembly y reconstruye sus tipos y métodos en código fuente limpio y legible.

Con invalid metadata

El mismo decompilador se topa con la metadata malformada y no consigue reconstruir el assembly, produciendo una salida rota o incompleta.

Sin invalid metadata
[assembly: AssemblyTitle("Acme.Vault")]

namespace Acme.Vault;

internal class SecretStore
{
    public byte[] Get(string id) { /* ... */ }
}
Con invalid metadata
[assembly: AssemblyTitle("Acme.Vault")]

namespace Acme.Vault;

internal class SecretStore
{
    public byte[] Get(string id) { /* ... */ }
}

Casos de uso

Cuándo usar invalid metadata

Invalid metadata es especialmente útil cuando tu aplicación .NET:

  • Tiene que resistir los decompiladores que un atacante usa primero.
  • Ya está renombrada y ofuscada y necesita que la decompilación se rompa directamente.
  • Contiene assemblies lo bastante sensibles como para justificar romper su reconstrucción.

Casa con invalid code y anti-ILDasm: juntas rompen el desensamblado y la decompilación a nivel de herramienta, mientras la ofuscación se ocupa de lo que un atacante aún consiga recuperar.

Disponibilidad por plataforma

Invalid metadata y la plataforma .NET

  • .NET

    Exclusiva. Invalid metadata ataca el formato de metadata de los assemblies .NET y los decompiladores construidos a su alrededor. Otras plataformas resisten la decompilación con protecciones distintas de Shield.

Preguntas frecuentes

¿Qué es invalid metadata?
Invalid metadata es una técnica de ofuscación para .NET que añade metadata malformada a un assembly. El runtime la tolera, pero los decompiladores no pueden procesarla y fallan al reconstruir el assembly.
¿Invalid metadata afecta a cómo se ejecuta mi aplicación?
No. Cada cambio se verifica para que sea seguro en runtime, así la aplicación carga y se ejecuta exactamente como se espera.
¿Invalid metadata para a todos los decompiladores?
Rompe los decompiladores comunes que usan los atacantes, pero las herramientas evolucionan. Es una capa, más fuerte combinada con invalid code y con ofuscación.
¿En qué se diferencia invalid metadata de invalid code?
Invalid code ataca las secuencias de instrucciones. Invalid metadata ataca la metadata que describe el assembly. Rompen a los decompiladores en dos etapas distintas.
¿Qué plataformas soportan invalid metadata?
Invalid metadata se aplica solo a .NET, porque ataca el formato de metadata de .NET.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

Invalid metadata 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 conseguir profundidad real.

ByteHide runtime dashboard showing live threat monitoring and protection metrics