Debug Info Removal

El debug info removal elimina la metadata de debug de tu bytecode Android, quitando los nombres de fuente y la información de líneas en los que se apoyan los atacantes.

  • AndroidAndroid
TL;DR

El bytecode compilado de Android suele seguir llevando metadata de debug: nombres de archivos fuente, números de línea y nombres de variables locales. El debug info removal lo elimina. La aplicación se ejecuta igual, pero el código decompilado pierde la información de debug legible que lo hace fácil de seguir.

Definición

¿Qué es el debug info removal?

La información de debug es metadata que un compilador añade para ayudar a depurar: los nombres originales de los archivos fuente, los números de línea y los nombres de las variables locales. Es útil durante el desarrollo e innecesaria en una aplicación que se publica.

Cuando esa información se queda en una build de release, se convierte en un recurso para los atacantes. El bytecode decompilado con metadata de debug se lee casi como código fuente, con los nombres originales y las referencias a líneas intactos.

El debug info removal elimina esa metadata del bytecode. La aplicación se comporta exactamente igual, pero la salida decompilada pierde los nombres de debug y la información de líneas, y se vuelve bastante más difícil de leer.

Mecanismo

Cómo funciona el debug info removal

El debug info removal limpia el bytecode compilado:

  • Eliminación de nombres de fuente. Los nombres originales de los archivos fuente embebidos en el bytecode se eliminan.

  • Eliminación de números de línea. Las tablas de números de línea que mapean el bytecode con el código fuente se eliminan.

  • Eliminación de nombres de variables locales. Los nombres de variables locales que solo sirven para debug se eliminan.

El bytecode conserva todo lo que necesita para ejecutarse y pierde todo lo que solo ayudaba a depurar.

Ejemplo

Ejemplo de debug info removal

El mismo método decompilado de Android, antes y después del debug info removal. Mismo comportamiento. Otra legibilidad.

Original

El bytecode decompilado muestra los nombres originales de los archivos fuente, los números de línea y los nombres de variables locales, y se lee casi como el código original.

Stripped

El mismo bytecode tiene eliminada su metadata de debug. La lógica se ejecuta igual, pero las pistas de debug legibles han desaparecido.

Original
// SourceFile: Wallet.java
public boolean transfer(String recipient, BigDecimal amount) {
    // line 42
    Account from = currentAccount();
    return from.debit(amount, recipient);
}
Stripped
public boolean transfer(String p1, BigDecimal p2) {
    Object v0 = currentAccount();
    return v0.debit(p2, p1);
}

Casos de uso

Cuándo usar debug info removal

El debug info removal merece la pena aplicarlo prácticamente en cualquier build de release de Android. Importa especialmente cuando tu app:

  • Se ha compilado con metadata de debug que no debería llegar a producción.
  • Tiene nombres de fuente y variables que revelan cómo funciona el código.
  • Necesita que la salida decompilada sea lo más ilegible posible.

Se combina con el name obfuscation: la eliminación quita los nombres de debug y el name obfuscation renombra lo que queda.

Disponibilidad por plataforma

Debug info removal y la plataforma Android

  • Android

    Eliminación de la metadata de debug del bytecode. En iOS el equivalente forma parte del Swift metadata stripping y, en .NET, los símbolos de debug se gestionan a través del proceso de build y de obfuscation.

Preguntas frecuentes

¿Qué es el debug info removal?
El debug info removal es una protección para Android que elimina la metadata de debug, incluidos los nombres de archivos fuente, los números de línea y los nombres de variables locales, del bytecode compilado para que no ayude a un atacante a leer el código.
¿El debug info removal afecta al rendimiento?
No. La metadata de debug no se usa en runtime, así que eliminarla no tiene coste de rendimiento y además produce una build más pequeña.
¿El debug info removal rompe mi aplicación?
No. Solo se elimina la metadata que es exclusivamente de debug. Todo lo que la aplicación necesita para ejecutarse se mantiene.
¿Debería dejarse la info de debug en una build de release?
En general, no. La metadata de debug es una ayuda para desarrollo. Dejarla en una build de release le regala a quien hace ingeniería inversa nombres legibles y referencias a líneas.
¿Qué plataformas soportan el debug info removal?
El debug info removal aplica a Android. iOS gestiona la información equivalente a través del Swift metadata stripping.
+10.000 desarrolladores y empresas protegen sus aplicaciones con ByteHide

Protege tu aplicación con
ByteHide Shield

El debug info removal es una de las más de 20 protecciones de ByteHide Shield. Aplícalo a tu aplicación Android.

ByteHide runtime dashboard showing live threat monitoring and protection metrics