[JAVA] Identifier les noms de méthode obscurcis

Obfusquer et exécuter des applications Android peut entraîner des exceptions. Même si vous regardez la trace de la pile, vous ne pouvez pas dire quelle méthode a provoqué l'exception en raison de l'obscurcissement. Dans un tel cas, il s'agit d'une méthode pour identifier la méthode dans laquelle l'exception s'est produite.

Obfuscation

Sur Android, les paramètres suivants peuvent être définis pour la sécurité et la réduction de la taille.

build.gradle


minifyEnabled true
shrinkResources true

Si vous essayez de l'exécuter avec ce paramètre, vous pouvez obtenir une exception.

L'obfuscation provoque des exceptions

Supposons que vous ayez l'implémentation suivante:

Calc.java


package com.example.myapplication;

public class Calc {
    public int divide(int param1, int param2) {
        return param1 / param2;
    }
}

MainActivity.java


package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Calc calc = new Calc();
        int result = calc.divide(10, 0);
        System.out.println(result);
    }
}

Si vous faites cela, vous obtiendrez une exception sans division.

Trace de la pile


Caused by: java.lang.ArithmeticException: divide by zero
    at b.a.a.a.a(:5)
    at com.example.myapplication.MainActivity.onCreate(:13)
    at android.app.Activity.performCreate(Activity.java:7009)
    at android.app.Activity.performCreate(Activity.java:7000)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)

En raison de l'obfuscation, le nom de la méthode dans laquelle l'exception s'est produite devient b.a.a.a.a </ code>, et je ne sais pas où l'exception s'est produite.

Identifier les méthodes à partir de chaînes obscurcies

Il existe un fichier dans lequel vous pouvez voir le mappage avant et après l'obscurcissement. Accédez au dossier de votre projet Android et recherchez «mapping» dans le champ de recherche. "Mapping.txt" s'affiche dans les résultats de la recherche. Ouvrez ce fichier. 1.png

Le nom de la méthode b.a.a.a.a </ code> où l'exception s'est produite est représenté par le nom du package, le nom de la classe et le nom de la méthode. Recherchez mapping.txt par nom de package et nom de classe ( b.a.a.a </ code>). La partie correspondante sera frappée ci-dessous.

mapping.txt


com.example.myapplication.Calc -> b.a.a.a:
    3:3:void <init>() -> <init>
    5:5:int divide(int,int) -> a

Si vous regardez le mappage, vous pouvez voir que le nom de la méthode ( a </ code>) où l'exception s'est produite est divide </ code>.