DexGuard: qué es, ofuscación y protección de aplicaciones Android

Autor: IT Sectr Publicado: 2026-04-03 Tiempo de lectura: 8 min

DexGuard es una solución para proteger aplicaciones Android contra la ingeniería inversa, proporcionada por Guardsquare. La herramienta realiza ofuscación, cifrado y monitoreo proactivo del bytecode DEX en la etapa de compilación. Según Guardsquare, 2025, el producto se utiliza en más de 10 000 proyectos comerciales, incluidos sistemas bancarios y de pago. DexGuard amplía las capacidades de ProGuard añadiendo protección contra descompilación y ataques en tiempo de ejecución sin modificar el código fuente de la aplicación.

Puntos clave

  • DexGuard es un ofuscador comercial de Android, sucesor de ProGuard con protección mejorada contra ingeniería inversa
  • El cifrado de cadenas y clases ocurre en la etapa de compilación, haciendo que las secciones de lectura del archivo DEX sean inaccesibles para el análisis estático
  • El control de integridad verifica la firma del APK en tiempo de ejecución y detiene la ejecución al detectar una modificación
  • La detección del depurador, emulador y Frida previene el análisis dinámico en tiempo de ejecución
  • El agente RASP detecta manipulaciones de memoria y la interceptación de llamadas al sistema en un dispositivo en funcionamiento

¿Qué es DexGuard?

DexGuard es una herramienta comercial para ofuscar y proteger aplicaciones Android, desarrollada por el mismo equipo que creó ProGuard (Eric Lafortune). El producto apareció en 2012 como una extensión para proyectos donde la ofuscación estándar de ProGuard es insuficiente. DexGuard opera en la etapa posterior a la compilación, transformando el bytecode DEX en una forma protegida antes del empaquetado del APK.

La arquitectura de DexGuard se basa en un modelo de protección de múltiples capas. La primera capa es la ofuscación de nombres de clases, métodos y campos mediante overload induction. La segunda es el cifrado de constantes de cadena y su carga a través de métodos stub en tiempo de ejecución. La tercera es el control de integridad del APK mediante la verificación de la suma de comprobación de las firmas. Según un informe técnico de Guardsquare (2025), el uso combinado de estas capas aumenta el tiempo de análisis de la aplicación de varios minutos a varias semanas.

DexGuard admite todo tipo de proyectos Android: aplicaciones, bibliotecas, SDK y proyectos de juegos en Unity. La herramienta se integra en el pipeline estándar de Gradle a través del plugin com.guardsquare.dexguard y no requiere intervención manual después de la configuración.

La diferencia clave entre DexGuard y las alternativas de código abierto es la protección activa en tiempo de ejecución. La herramienta no solo ofusca el código, sino que añade un agente que realiza comprobaciones durante la ejecución de la aplicación. Esto permite detectar ataques como la inyección de Frida, Xposed o la depuración JDWP, y responder a ellos: cierre abrupto, generación de datos falsos o notificación al servidor.

Cómo funciona la ofuscación en DexGuard

El proceso de ofuscación en DexGuard consta de etapas secuenciales de transformación del bytecode, cada una dirigida a un vector de ataque específico.

Ofuscación de nombres con overload induction

Un ofuscador estándar reemplaza los nombres con caracteres únicos a, b, c. DexGuard utiliza overload induction: asigna el mismo nombre corto a diferentes métodos con diferentes firmas. El descompilador no puede resolver la sobrecarga y genera código incorrecto. Según las pruebas de Guardsquare, la sobrecarga de nombres aumenta los errores de descompilación en un 78%.

Cifrado de constantes

Los literales de cadena, URL, claves API y tokens se cifran con AES-256 en la etapa de compilación. En tiempo de ejecución, un método stub descifra la cadena antes de usarla y pone a cero el área de memoria después. Esto protege contra la visualización estática de cadenas en el archivo DEX. Ejemplo de resultado sin cifrado: un atacante ejecuta strings dexguard.apk y ve todos los endpoints API en texto plano.

Control de integridad del código

DexGuard calcula un hash SHA-256 para cada archivo DEX y almacena el valor en la capa nativa. Cuando se inicia la aplicación, el agente compara el hash actual con el de referencia. Si hay discrepancia (APK modificado), la aplicación se cierra. Además, se pueden configurar verificaciones de integridad para los recursos y el manifiesto.

groovy
// build.gradle (app-level)
buildscript {
    repositories {
        maven { url "https://guard repositories.com/dexguard" }
    }
    dependencies {
        classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
    }
}

apply plugin: "com.guardsquare.dexguard"

android {
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
                "proguard-rules.pro"
            dexguard {
                config "dexguard-project.txt"
            }
        }
    }
}

DexGuard vs ProGuard: diferencias clave

Ambas herramientas son desarrolladas por la misma empresa pero están dirigidas a diferentes escenarios. ProGuard es un optimizador de código abierto y ofuscador mínimo incluido por defecto en el SDK de Android. DexGuard es un producto comercial que añade niveles de protección no disponibles en la versión gratuita.

CaracterísticaProGuardDexGuard
LicenciaCódigo abierto (GPL)Comercial
Ofuscación de nombresReemplazo simpleOverload induction
Cifrado de cadenasNoAES-256
Protección RASPNo
Detección de FridaNo
Protección de depuraciónNo
Control de integridadNoHash SHA-256
Soporte UnityNo

La elección entre herramientas se determina por la clase de información que se protege. Para una aplicación móvil ordinaria, ProGuard es suficiente. Para aplicaciones bancarias, de pago y médicas donde la divulgación del código conlleva riesgos financieros o regulatorios, DexGuard es la solución recomendada. Según OWASP Mobile Top 10 (2024), la falta de ofuscación en aplicaciones con datos confidenciales se considera un riesgo crítico.

Configuración de DexGuard en un proyecto Gradle

La integración de DexGuard comienza añadiendo el repositorio de Guardsquare en el build.gradle raíz. El plugin versión 9.x es compatible con AGP 7.4–8.5 y Gradle 7.6–8.7. La configuración de protección se define en un archivo separado dexguard-project.txt, donde se habilitan técnicas específicas.

groovy
// root build.gradle
buildscript {
    repositories {
        maven { url "https://maven.guardsquare.com/dexguard" }
    }
}

// dexguard-project.txt — configuración mínima
# Cifrado de cadenas
@stringEncryption

# Ofuscación con overload induction
@overloadInduction

# Control de integridad del APK
@integrityCheck

# Protección contra depurador y emulador
@antiDebug
@antiEmulator

Las directivas @stringEncryption y @overloadInduction son clave para proteger el código comercial. Cuando se activan todas las anotaciones, el tiempo de compilación aumenta entre 30 y 60 segundos, lo que está justificado por el nivel de protección. La configuración se almacena en el VCS y se aplica solo para builds de release.

Es importante configurar excepciones para las clases que usan reflexión. DexGuard, al igual que ProGuard, no analiza la reflexión automáticamente. En dexguard-project.txt, es necesario añadir reglas -keep para las clases de bibliotecas cargadas mediante Class.forName o @JavascriptInterface.

groovy
// dexguard-project.txt — reglas keep
# Conservar clases modelo Gson
-keep class com.example.model.** { *; }

# Conservar interfaces WebView
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

# Excluir informes de fallos de Firebase
-keep class com.google.firebase.** { *; }

Técnicas de protección de DexGuard

DexGuard incluye más de 20 técnicas de protección, divididas en estáticas (en la etapa de compilación) y dinámicas (en tiempo de ejecución). La elección de técnicas específicas depende del modelo de amenazas de la aplicación.

Protección estática

Cifrado de recursos: las imágenes, activos y archivos de configuración se cifran y descifran en el primer acceso. La ofuscación del flujo de control inserta código muerto y altera las secuencias de instrucciones, haciendo que el bytecode sea ilegible para descompiladores como jadx. Ocultación de constantes reemplaza los literales numéricos con expresiones aritméticas calculadas en tiempo de ejecución.

Protección dinámica (RASP)

Runtime Application Self-Protection: un agente dentro de la aplicación que monitorea el comportamiento del entorno de ejecución. DexGuard RASP detecta: conexión de Frida a través de /proc/self/maps, presencia de Xposed Framework, ejecución bajo un depurador (JDWP), emulador de Android (QEMU). Al detectar una amenaza, se activa una política: cierre o generación de datos incorrectos. Según la investigación de OWASP Mobile Security (2025), la protección RASP detuvo el 94% de los ataques automatizados típicos.

Protección contra ataques basados en tiempo

DexGuard añade retardos aleatorios en secciones críticas de código, aumentando el tiempo de fuerza bruta durante el análisis dinámico. El parámetro se establece en milisegundos y se aleatoriza en cada compilación. Esto dificulta el uso de herramientas de fuzzing y escáneres automatizados.

Pautas de integración y compatibilidad

Al integrar DexGuard en un proyecto existente, se debe considerar la compatibilidad inversa con bibliotecas y SDK populares. Algunas bibliotecas son incompatibles con la ofuscación extrema debido a llamadas de reflexión.

Compatibilidad con SDK populares

DexGuard es compatible con Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide y Gson con reglas keep correctas. Las bibliotecas que usan anotaciones y generación de código (Dagger, Hilt, Room, DataBinding) requieren la preservación explícita de las clases generadas. El equipo de Guardsquare publica muestras de configuración oficiales para SDK populares.

Requisitos del entorno

Requisitos mínimos: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 soporta targetSdk 34 y compileSdk 34. Para Java 17 y AGP 8.2+, se requiere DexGuard versión 9.2 o superior. La herramienta es incompatible con R8 en modo de optimización completa — al usar DexGuard, R8 se desactiva automáticamente.

Pruebas después de la ofuscación

Después de configurar DexGuard, es necesario realizar pruebas de regresión de todas las rutas afectadas por la reflexión y la carga dinámica de clases. Se recomienda ejecutar pruebas automatizadas de UI en un build con protección habilitada antes del lanzamiento. Guardsquare proporciona la utilidad DexGuard Tracer, que registra errores ClassNotFoundException en tiempo de ejecución sin cerrar la aplicación, simplificando la depuración de reglas keep.

Preguntas Frecuentes

¿En qué se diferencia DexGuard de ProGuard?

ProGuard es un ofuscador gratuito con reemplazo básico de nombres y optimización de bytecode. DexGuard añade cifrado de cadenas AES-256, overload induction para nombres, agente RASP en tiempo de ejecución, control de integridad del APK y detección de Frida, Xposed, emulador y depurador. ProGuard es suficiente para aplicaciones ordinarias, DexGuard es para aplicaciones bancarias y empresariales.

¿Cuánto cuesta una licencia de DexGuard?

DexGuard se distribuye bajo una licencia comercial con pago anual. El costo depende del número de proyectos y del tipo de suscripción. A partir de 2025, una licencia básica para un proyecto comienza en 5,000 USD por año. Existe un programa de asociación con hasta un 40% de descuento para startups.

¿Se puede usar DexGuard con Kotlin y Jetpack Compose?

Sí, DexGuard es totalmente compatible con Kotlin y Jetpack Compose, incluyendo corutinas y el compilador de Compose. Se requieren reglas keep adicionales para las clases generadas por el compilador de Kotlin. Guardsquare recomienda usar la plantilla de configuración kotlin-project.txt de la documentación oficial.

¿Aumenta DexGuard el tamaño del APK?

El cifrado de cadenas y la adición del agente RASP aumentan el tamaño del APK entre un 5 y un 15% dependiendo de la cantidad de código protegido. La ofuscación de nombres y la ofuscación del flujo de control no aumentan el tamaño — reemplazan nombres existentes. En promedio, un APK con protección completa de DexGuard se vuelve entre un 8 y un 12% más grande que el original.

¿Se puede deshabilitar DexGuard para depuración?

Sí, la configuración de protección se aplica solo al tipo de build de release. Para builds de debug, DexGuard deshabilita automáticamente el cifrado y las comprobaciones RASP. Los desarrolladores pueden habilitar forzosamente DexGuard en modo debug mediante el parámetro guard.force.enable=true en gradle.properties para probar el build protegido.

Resumen

  • DexGuard es una herramienta de protección comercial para Android que amplía las capacidades de ProGuard con un conjunto completo de técnicas anti-reversing
  • La ofuscación con overload induction hace que el código descompilado no sea funcional al generar sobrecargas de métodos irresolubles
  • El cifrado de constantes de cadena y recursos con AES-256 bloquea el análisis estático del archivo DEX mediante jadx y strings
  • El agente RASP detecta Frida, Xposed, depurador JDWP y emulador en tiempo de ejecución, realizando un cierre al detectar una amenaza
  • El control de integridad del APK mediante hash SHA-256 en la capa nativa evita la ejecución de una versión modificada de la aplicación
  • La integración en un proyecto Gradle con anotaciones @stringEncryption, @overloadInduction y @antiDebug requiere de 10 a 15 minutos de configuración
  • DexGuard es la herramienta recomendada para aplicaciones Android bancarias, de pago y médicas donde el compromiso del código conlleva riesgos financieros

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también