Constant Mutation

La constant mutation sustituye las constantes numéricas de tu app Android por expresiones aritméticas, así los valores originales nunca aparecen en el bytecode.

  • AndroidAndroid
TL;DR

La constant mutation sustituye los números literales de tu aplicación Android por expresiones aritméticas que evalúan al mismo valor. La constante se calcula en runtime en lugar de almacenarse, así que un atacante que decompile el bytecode no puede leerla directamente.

Definición

¿Qué es la constant mutation?

La constant mutation es una técnica de ofuscación que elimina los valores numéricos literales del bytecode de Android sustituyendo cada uno por una expresión aritmética que lo produce.

Las constantes de una app a menudo revelan su intención. Tamaños, umbrales, identificadores y números mágicos son pistas sobre cómo funciona el código, y son fáciles de detectar en el bytecode decompilado.

La constant mutation sustituye cada literal por una expresión que evalúa al mismo número en runtime. El valor se calcula, no se almacena, así que no puede leerse directamente desde el código decompilado.

Mecanismo

Cómo funciona la constant mutation

La constant mutation transforma los literales numéricos en el bytecode:

  • Sustitución por expresión. Cada constante se sustituye por una expresión aritmética que la calcula.

  • Evaluación en runtime. El valor se produce cuando el código se ejecuta, no aparece embebido como literal.

  • Garantía de equivalencia. Cada expresión se verifica para que devuelva exactamente el valor original.

El bytecode decompilado muestra expresiones, no los números con significado que hay detrás.

Ejemplo

Ejemplo de constant mutation

Las mismas constantes de Android, antes y después de la mutación. Los valores en runtime son idénticos.

Original

Una constante con significado aparece en el bytecode decompilado como un número plano. Un atacante la lee y entiende para qué sirve.

Mutada

La misma constante ahora es una expresión aritmética que se evalúa en runtime. El número ha desaparecido del bytecode.

Original
object Config {
    const val SESSION_TIMEOUT = 3600
    const val MAX_RETRIES = 5
}
Mutada
object Config {
    val SESSION_TIMEOUT = (60 shl 6) - 96
    val MAX_RETRIES = (1 shl 2) + 1
}

Casos de uso

Cuándo usar la constant mutation

La constant mutation es especialmente útil cuando tu aplicación Android:

  • Usa constantes numéricas que revelan cómo funciona la lógica.
  • Contiene umbrales, identificadores o valores mágicos que conviene ocultar.
  • Ya está renombrada y con strings cifrados y también necesita proteger los datos numéricos.

Combina con string encryption y name obfuscation para ocultar a la vez nombres, texto y números.

Disponibilidad por plataforma

La constant mutation y la plataforma Android

  • Android

    Mutación de constantes numéricas en expresiones aritméticas. En .NET la protección equivalente es la constants disintegration, y en JavaScript e iOS la arithmetic obfuscation.

Preguntas frecuentes

¿Qué es la constant mutation?
La constant mutation es una técnica de ofuscación para Android que sustituye las constantes numéricas por expresiones aritméticas evaluadas en runtime, así los valores originales no aparecen en el bytecode decompilado.
¿La constant mutation afecta al rendimiento?
El sobrecoste es pequeño, ya que las constantes se calculan en lugar de leerse. El nivel es configurable.
¿La constant mutation cambia los resultados?
No. Cada expresión se verifica para que calcule exactamente el valor original.
¿En qué se diferencia la constant mutation de la constants disintegration?
Cumplen el mismo objetivo en plataformas distintas. La constant mutation es la protección para Android. La constants disintegration es el equivalente en .NET.
¿Qué plataformas soportan la constant mutation?
La constant mutation se aplica en Android. .NET usa la constants disintegration, y JavaScript e iOS usan la arithmetic obfuscation.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

La constant mutation es una de las más de 20 protecciones de ByteHide Shield. Aplícala a tu aplicación Android.

ByteHide runtime dashboard showing live threat monitoring and protection metrics