androidManual Android CLI

O MAD (Mobile Application Defense) é uma ferramenta para proteger aplicativos Android (Cordova, React Native, Flutter ou nativos Java/Kotlin) com camadas adicionais de segurança.

Preparação do ambiente

Primeiro Passo: Baixe o arquivo comprimido enviado pela equipe técnica do MAD (geralmente nomeado como “mad_cli_android.zip”. Este arquivo contém os binários da ferramenta e as bibliotecas de dependência necessárias.

Segundo Passo: Extraia o conteúdo do arquivo em um diretório seguro no seu sistema de build, exemplo: “~/Projetos/mad_cli_android/“. Certifique-se de que o usuário que executará o build tenha permissões de leitura e escrita neste diretório.

Terceiro Passo: Abra o Terminal do sistema operacional e navegue até a pasta onde o arquivo foi extraído: “cd ~/Projetos/mad_cli_android”

Criação do Arquivo de Configuração

O MAD utiliza um arquivo no formato .xml para definir as proteções que serão incorporadas ao aplicativo alvo durante o processo de integração.

Estrutura do Arquivo

<?xml version="2.0" encoding="UTF-8" standalone="no"?>
<!--
 Mobile Application Defense  LTDA CONFIDENTIAL
 Copyright 2014-2026  Mobile Application Defense  
 All Rights Reserved.
 NOTICE:  All information contained here is, and remains
 the property of Mobile Application Defense   and its suppliers,
 if any.  The intellectual and technical concepts contained
 herein are proprietary to  Mobile Application Defense  
 and its suppliers and may be covered by U.S. and Foreign Patents,
 patents in process, and are protected by trade secret or copyright law.
 Dissemination of this information or reproduction of this material
 is strictly forbidden unless prior written permission is obtained
 from 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 segurança</title>
       <message>
            Um problema de segurança foi encontrado no seu dispositivo.
            Para sua proteção, o aplicativo será encerrado agora.
       </message>
    </alertMessage>
</madConfiguration>

O documento deve iniciar com a tag <madConfiguration> e ser finalizado com </madConfiguration>. Qualquer inconsistência estrutural poderá comprometer o processo de validação e integração.

Seção <general>

A tag <general> concentra as informações essenciais para identificação do aplicativo e comunicação segura com o Command Center. O preenchimento correto desses campos é obrigatório.

Campos obrigatórios

  • <apiToken> Token fornecido pela equipe do MAD. É utilizado para autenticação e comunicação segura com o Command Center.

  • <bundleName> Identificador único do aplicativo. Deve seguir o padrão de nomenclatura reversa de domínio, por exemplo: com.seu.aplicativo

  • <stack> Define a principal tecnologia utilizada no desenvolvimento do aplicativo. Exemplos:

    • java

    • cordova

    • react

    • react-native

    • flutter

Utilização de Variáveis de Ambiente

Para ambientes com múltiplos aplicativos ou integração via pipelines de CI/CD, recomenda-se o uso de variáveis de ambiente. Essa abordagem reduz exposição de informações sensíveis e facilita a reutilização de configurações.

Variáveis suportadas

  • $MAD_API_TOKEN

  • $MAD_BUNDLE_NAME

  • $MAD_APP_STACK

Exemplo de configuração utilizando variáveis

as variáveis devem estar devidamente exportadas no ambiente para que sejam resolvidas corretamente.

Comando principal

O processo de proteção é realizado por meio de um comando único, que recebe o APK ou AAB original e gera uma nova versão do aplicativo devidamente protegida e assinada. A reassinatura é necessária porque as etapas de injeção de código e ofuscação modificam o binário da aplicação, alterando seu hash e, consequentemente, invalidando a assinatura digital original do desenvolvedor.

O comando base para proteger seu aplicativo é o seguinte:

Atualizado