Android Protéger votre code contre les pirates


Exemple

L'obscurcissement est souvent considéré comme une solution magique pour la protection du code, en rendant votre code plus difficile à comprendre s'il est compilé par des pirates.

Mais si vous pensez que la suppression de Log.x(..) supprime réellement les informations dont les pirates ont besoin, vous aurez une mauvaise surprise.

Supprimer tous vos appels de journal avec:

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    ...etc
}

va effectivement supprimer l'appel de journal lui-même, mais généralement pas les chaînes que vous y mettez.

Si, par exemple, dans votre journal, vous tapez un message de journal commun tel que: Log.d(MyTag,"Score="+score); , le compilateur convertit le + en 'new StringBuilder ()' en dehors de l'appel du journal. ProGuard ne change pas ce nouvel objet.

Votre code décompilé aura toujours un StringBuilder pour "Score=" , ajouté à la version obscurcie de la variable score (supposons qu'il ait été converti en b ).
Maintenant, le pirate sait ce qu'est le b et donne un sens à votre code.

Une bonne pratique pour supprimer réellement ces résidus de votre code est de ne pas les y placer en premier lieu (utilisez plutôt le formateur de chaînes avec des règles proguard pour les supprimer), ou envelopper vos appels de Log avec:

    if (BuildConfig.DEBUG) {
        Log.d(TAG,".."+var);
    }

Pointe:

Testez la protection de votre code obscur en la décompilant vous-même!

  1. dex2jar - convertit l'apk en jar
  2. jd - décompile le fichier jar et l'ouvre dans un éditeur graphique