androidManual Android CLI

El MAD (Mobile Application Defense) es una herramienta para proteger aplicaciones Android (Cordova, React Native, Flutter o nativas Java/Kotlin) con capas adicionales de seguridad.

Preparación del entorno

Primer Paso: Descargue el archivo comprimido enviado por el equipo técnico de MAD (generalmente nombrado como “mad_cli_android.zip”. Este archivo contiene los binarios de la herramienta y las bibliotecas de dependencia necesarias.

Segundo Paso: Extraiga el contenido del archivo en un directorio seguro en su sistema de compilación, ejemplo: “~/Proyectos/mad_cli_android/“. Asegúrese de que el usuario que ejecutará la compilación tenga permisos de lectura y escritura en este directorio.

Tercer Paso: Abra la Terminal del sistema operativo y navegue hasta la carpeta donde se extrajo el archivo: “cd ~/Proyectos/mad_cli_android”

Creación del Archivo de Configuración

MAD utiliza un archivo en el formato .xml para definir las protecciones que se incorporarán a la aplicación objetivo durante el proceso de integración.

Estructura del Archivo

<?xml version="2.0" encoding="UTF-8" standalone="no"?>
<!--
 Mobile Application Defense  LTDA CONFIDENTIAL
 Copyright 2014-2026  Mobile Application Defense  
 Todos los Derechos Reservados.
 AVISO: Toda la información contenida aquí es, y sigue siendo
 propiedad de Mobile Application Defense   y sus proveedores,
 si los hubiere. Los conceptos intelectuales y técnicos contenidos
 aquí son de propiedad de Mobile Application Defense  
 y sus proveedores y pueden estar cubiertos por Patentes de EE. UU. y Extranjeras,
 patentes en proceso, y están protegidos por secreto comercial o derecho de autor.
 La difusión de esta información o la reproducción de este material
 está estrictamente prohibida a menos que se obtenga permiso previo por escrito
 de Mobile Application Defense  .
-->
<madConfiguration>
    <general>
        <apiToken>api-token-command-center</apiToken>
        <bundleName>bundle-name-app</bundleName>
        <mode>default</mode> <!-- default | monitor -->
        <stack>react-native</stack> <!-- cordova | flutter | java -->
    </general>
    <bundleObfuscation>
        <obfuscateDex>true</obfuscateDex>
        <obfuscateAssets>true</obfuscateAssets>
    </bundleObfuscation>
    <certificatePinning>
        <enabled>true</enabled>
        <host domain="*.example.com">
            <pin type="publicKey">1abc23de-456f-789g-hij0-k1234546klm=</pin>
        </host>
        <host domain="example2.com">
            <pin type="certificate">1abc23de-456f-789g-hij0-k1234546klm=</pin>
            <pin type="certificate">1abc23de-456f-789g-hij0-k1234546klm=</pin>
        </host>
    </certificatePinning>
    <antiDebugging>
        <enabled>true</enabled>
    </antiDebugging>
    <xposedDetection>
        <enabled>true</enabled>
        <modules>true</modules>
    </xposedDetection>
    <antiTampering>
        <enabled>true</enabled>
        <checkIntegrity>true</checkIntegrity>
        <verifyHashSections>true</verifyHashSections>
    </antiTampering>
    <rootDetection>
        <enabled>true</enabled>
        <selinux>true</selinux>
        <unlockedBootloader>true</unlockedBootloader>
    </rootDetection>
    <emulatorDetection>
        <enabled>true</enabled>
    </emulatorDetection>
    <memoryProtection>
        <enabled>true</enabled>
    </memoryProtection>
    <proxyDetection>
        <enabled>true</enabled>
    </proxyDetection>
    <vishingProtection>
        <enabled>true</enabled>
    </vishingProtection>
    <vcamDetection>
        <enabled>true</enabled>
    </vcamDetection>
    <screenProtection>
        <enabled>true</enabled>
    </screenProtection>
    <appCloneDetection>
        <enabled>true</enabled>
    </appCloneDetection>
    <overlayDetection>
        <enabled>true</enabled>
    </overlayDetection>
    <alertMessage>
      <enabled>true</enabled>
      <title>Alerta de seguridad</title>
       <message>
            Se ha encontrado un problema de seguridad en su dispositivo.
            Para su protección, la aplicación se cerrará ahora.
       </message>
    </alertMessage>
</madConfiguration>

El documento debe iniciarse con la etiqueta <madConfiguration> y finalizar con </madConfiguration>. Cualquier inconsistencia estructural podrá comprometer el proceso de validación e integración.

Sección <general>

La etiqueta <general> concentra la información esencial para la identificación de la aplicación y la comunicación segura con el Command Center. El llenado correcto de estos campos es obligatorio.

Campos obligatorios

  • <apiToken> Token proporcionado por el equipo de MAD. Se utiliza para autenticación y comunicación segura con el Command Center.

  • <bundleName> Identificador único de la aplicación. Debe seguir el patrón de nomenclatura inversa de dominio, por ejemplo: com.su.aplicacion

  • <stack> Define la principal tecnología utilizada en el desarrollo de la aplicación. Ejemplos:

    • java

    • cordova

    • react

    • react-native

    • flutter

Uso de Variables de Entorno

Para entornos con múltiples aplicaciones o integración vía pipelines de CI/CD, se recomienda el uso de variables de entorno. Este enfoque reduce la exposición de información sensible y facilita la reutilización de configuraciones.

Variables soportadas

  • $MAD_API_TOKEN

  • $MAD_BUNDLE_NAME

  • $MAD_APP_STACK

Ejemplo de configuración usando variables

las variables deben estar debidamente exportadas en el entorno para que se resuelvan correctamente.

Comando principal

El proceso de protección se realiza mediante un único comando, que recibe el APK o AAB original y genera una nueva versión de la aplicación debidamente protegida y firmada. La refirmación es necesaria porque las etapas de inyección de código y ofuscación modifican el binario de la aplicación, alterando su hash y, en consecuencia, invalidando la firma digital original del desarrollador.

El comando base para proteger su aplicación es el siguiente:

Última actualización