Ofuscação de código no Flutter (Android)

Tempo de leitura: 2 minutes

A história começa quando estávamos prestes a publicar nosso aplicativo flutter para a produção. Mas antes disso, o aplicativo foi para o processo VAPT (Vulnerability Assessment and Penetration Testing).

 

O que é ofuscação de código?

Ofuscação de código é o processo de tornar o código de um programa difícil de entender, geralmente com o objetivo de dificultar a engenharia reversa ou a modificação. Isso pode ser feito por meio de várias técnicas, como tornar nomes de variáveis e funções ilegíveis ou adicionar camadas extras de indireção ou complexidade ao código. A ofuscação é frequentemente usada para proteger a propriedade intelectual ou para impedir a adulteração maliciosa de um programa. (Graças ao ChatGPT 😉).

 

Por que há ofuscação de código?

Se você está desenvolvendo um aplicativo onde a segurança dos dados do usuário está acima de tudo, você não pode comprometê-lo. Embora a segurança à prova de idiotas seja um mito. Mas podemos maximizá-lo até certo ponto usando estes métodos:

  1. Reduza seu código (ou trepidação da árvore): ele detecta e remove com segurança classes, campos, métodos e atributos não utilizados de seu aplicativo.
  2. Minimize seu código: é o processo de simplificar os caracteres do código sem alterar ou alterar a função do código.
  3. Habilitar proguard: Use as regras do proguard para definir quais arquivos você não deseja alterar durante o processo de minificação e redução.

Vamos pular para a parte Como

Ofuscação usando o comando flutter

export version=1.0.0
flutter build apk --release --shrink --obfuscate --split-debug-info=misc/mapping/${version}

Ele criará um apk no modo de lançamento que será reduzido e ofuscado. Mas e se você estiver usando códigos nativos? Como podemos proteger isso também?

  buildTypes {
    release {
        signingConfig signingConfigs.release
        minifyEnabled true
        useProguard true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

Cole esta linha no arquivo build.gradle do nível do aplicativo na pasta android

Explicação:

  1. Ele usará suas configurações de assinatura do modo de liberação. Você terá que criar um arquivo .jks e um key.properties onde você pode mencionar suas credenciais de assinatura.
  2. Mantenha proguard-rules.pro dentro da pasta do aplicativo, para que você possa definir suas regras dentro dela. Leia aqui como definir regras proguard.
  3. Para proteger arquivos flutuantes durante a ofuscação, use estas linhas dentro do arquivo proguard-rules:
#Flutter Wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.**  { *; }
-keep class io.flutter.util.**  { *; }
-keep class io.flutter.view.**  { *; }
-keep class io.flutter.**  { *; }
-keep class io.flutter.plugins.**  { *; }

4. Para proteger arquivos do renderizador xml, use estas regras:

-keep class org.xmlpull.v1.** { *;}
 -dontwarn org.xmlpull.v1.**

5. Você pode mencionar as regras proguard para todos os seus plugins que você está usando para ofuscar também.

Agora seu aplicativo está pronto com ofuscação. Todos os recursos foram reduzidos, todos os códigos e comentários desreferenciados foram removidos e as classes foram renomeadas para algumas classes aleatórias.

 

Agora é hora de uma dica profissional

Se você chegou até aqui, aqui está um presente para você. Seu aplicativo continua travando depois de ativar o proguard?

Tente este truque para depurá-lo:

Substitua a versão para depurar e executar o aplicativo no modo de depuração.

buildTypes {
        debug {
            signingConfig signingConfigs.release
            minifyEnabled true
            useProguard true
            shrinkResources true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

Você receberá os logs. Se algo estiver travando devido ao proguard, apenas mencione a regra de manter ou não avisar para esse plug-in.

 

Isso é tudo por hoje. Obrigado por ficar até o final. Sugestões são bem vindas.