Name Obfuscation

El name obfuscation renombra las clases, métodos, campos y variables de tu código a símbolos cortos y sin significado, de modo que la salida decompilada no revele nada sobre lo que hace el código.

  • .NET.NET
  • JavaScriptJavaScript
  • AndroidAndroid
  • AppleiOS
TL;DR

El name obfuscation, también llamado renombrado, sustituye cada identificador con significado de tu código por uno corto sin significado. Un método llamado ValidateLicenseKey pasa a llamarse a. El programa se ejecuta igual, pero un decompilador produce código sin nombres legibles, eliminando la pista más importante que usa un atacante para entenderlo.

Definición

¿Qué es el name obfuscation?

Cuando escribes código, das nombres a las cosas para que queden claras: ValidateLicenseKey, decryptUserData, isPremiumAccount. Esos nombres son documentación. Cuando tu aplicación se decompila, esa documentación se le entrega directamente al atacante.

El name obfuscation la elimina. Renombra cada clase, método, campo, parámetro y variable a un símbolo corto sin significado. Al compilador no le importa cómo se llamen las cosas, así que el programa se comporta exactamente igual.

Lo que cambia es el resultado decompilado. En lugar de un método legible llamado ValidateLicenseKey, un atacante ve un método llamado a que llama a otro método llamado b. La lógica está intacta, pero cualquier pista sobre lo que significa ha desaparecido.

Mecanismo

Cómo funciona el name obfuscation

El name obfuscation aplica un esquema de renombrado a lo largo de tu código:

  • Renombrado de identificadores. Las clases, métodos, campos, parámetros y variables locales se renombran a símbolos cortos.

  • Renombrado de propiedades. Las propiedades de los objetos se renombran a lo largo del código, allí donde la plataforma lo permite.

  • Preservación de referencias. Los nombres que deben mantenerse intactos, APIs públicas, objetivos de reflection, miembros de serialización, se detectan y se excluyen del renombrado para que la aplicación siga funcionando.

  • Esquemas de renombrado. Los símbolos pueden renombrarse a secuencias cortas, caracteres no imprimibles u otros esquemas que dificultan aún más el análisis.

El resultado es código funcionalmente idéntico sin identificadores legibles.

Ejemplo

Ejemplo de name obfuscation

La misma clase, antes y después del name obfuscation. El comportamiento es idéntico. Los nombres decompilados han desaparecido.

Original

Una clase UserAuthentication con un método ValidateCredentials que llama a CheckPasswordHash. Un decompilador la reproduce con cada nombre intacto. Un atacante lee la intención al instante.

Ofuscado

La misma clase, ahora llamada a, con un método b que llama a c. La salida del decompilador es correcta y se ejecuta, pero no le dice nada al atacante.

Original
public class UserAuthentication
{
    public bool ValidateCredentials(string user, string password)
    {
        return CheckPasswordHash(user, password);
    }

    private bool CheckPasswordHash(string u, string p) { /* ... */ }
}
Ofuscado
public class a
{
    public bool b(string c, string d)
    {
        return e(c, d);
    }

    private bool e(string f, string g) { /* ... */ }
}

Casos de uso

Cuándo usar name obfuscation

El name obfuscation es la base de la protección de código y merece la pena aplicarlo a prácticamente cualquier aplicación. Importa especialmente cuando tu código:

  • Contiene lógica propietaria, algoritmos o reglas de negocio.
  • Se distribuye en entornos que no controlas.
  • Va a ser decompilado si alguien tiene la curiosidad suficiente, que es el caso de cualquier aplicación distribuida.

Es la primera capa. El name obfuscation elimina los nombres legibles, el control flow obfuscation enmaraña la lógica y el string encryption oculta los literales. El name obfuscation va primero porque cualquier otra capa resulta más efectiva sobre código que ya está sin nombres.

Disponibilidad por plataforma

Name obfuscation según la plataforma

  • .NET

    Renombrado de clases, métodos, campos y propiedades.

  • JavaScript

    Renombrado de identificadores y propiedades para variables, funciones y parámetros.

  • Android

    Name obfuscation de clases, métodos y campos en el bytecode.

  • iOS

    Renombrado de símbolos a lo largo del binario compilado.

Preguntas frecuentes

¿Qué es el name obfuscation?
El name obfuscation es una técnica que renombra las clases, métodos, campos y variables de tu código a símbolos cortos sin significado. El programa se comporta igual, pero el código decompilado pierde los nombres legibles que revelan lo que hace.
¿El name obfuscation rompe el reflection o las APIs públicas?
No, si se aplica correctamente. El name obfuscation detecta los identificadores que deben mantenerse intactos, como los miembros de APIs públicas y los objetivos de reflection, y los excluye del renombrado para que la aplicación siga funcionando.
¿El name obfuscation afecta al rendimiento?
No. El renombrado se hace en tiempo de compilación y el código renombrado se ejecuta exactamente igual de rápido que el original.
¿Es suficiente el name obfuscation por sí solo?
Es la primera capa imprescindible, pero no una defensa completa. Los nombres quedan ocultos, pero la lógica y los literales de strings siguen ahí. Combínalo con control flow obfuscation y string encryption para conseguir profundidad real.
¿Qué plataformas soportan el name obfuscation?
ByteHide Shield ofrece name obfuscation para .NET, JavaScript, Android e iOS.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El name obfuscation es una de las más de 20 protecciones de ByteHide Shield. Aplícalo a tu aplicación .NET, JavaScript, Android o iOS.

ByteHide runtime dashboard showing live threat monitoring and protection metrics