LoginSignup
2
3

More than 3 years have passed since last update.

難読化されたメソッド名を特定する

Last updated at Posted at 2020-10-10

Androidアプリを難読化して動かすと、例外が発生することがあります。
スタックトレースを見ても難読化により、どのメソッドで例外が発生したのかわかりません。
そんなとき、例外発生したメソッドを特定する方法です。

難読化

Androidでは、セキュリティやサイズ縮小を目的に以下の設定を行うことがあります。

build.gradle
minifyEnabled true
shrinkResources true

この設定で動かしてみると、例外が発生することがあります。

難読化で例外発生して困ること

以下の実装があるとします。

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);
    }
}

これを実行すると、ゼロ除算で例外が発生します。

スタックトレース
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)

難読化により、例外発生したメソッド名がb.a.a.a.aとなり、どこで例外発生したかわかりません。

難読化された文字列からメソッドを特定する

難読化前後のマッピングを見れるファイルがあります。
Androidのプロジェクトフォルダに移動し、検索欄で「mapping」と検索してみてください。
検索結果に「mapping.txt」が表示されます。このファイルを開きます。
1.png

例外発生したメソッド名b.a.a.a.aは、パッケージ名.クラス名.メソッド名で表現されています。
パッケージ名とクラス名(b.a.a.a)でmapping.txtを検索します。以下該当箇所がヒットします。

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

マッピングを見ると、例外発生したメソッド名(a)がdivideであることがわかります。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3