web-dev-qa-db-ja.com

Android-Proguardの難読化が機能しているかどうかを確認する方法は?

APKを難読化しましたが、ファイルサイズは12MBから10.5MBにしか縮小されていません。

比較的小さな削減​​にすぎない理由は、アプリがいくつかの大きなライブラリを使用しているためかもしれませんが、実行された難読化のレベルを確認する方法はありますか?

念のため、これは私のproguard-project.txtファイルです...

# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-Android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
#   http://developer.Android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

-dontwarn Twitter4j.**

...そして私が使用しているライブラリはAndroid-support-v4.jaracra-4.5.0.jarおよびTwitter4j-core-4.0.2.jar

31

プロジェクトディレクトリにProguardフォルダーがあり、そこに4つのテキストファイルがあります。

dump.txt

.apkファイル内のすべてのクラスファイルの内部構造を記述します

mapping.txt

元のクラスとメソッド、および難読化されたクラス、メソッド、およびフィールド名の間のマッピングをリストします。このファイルは、難読化されたスタックトレースを元のクラス、メソッド、およびメンバー名に変換するため、リリースビルドからバグレポートを受信する場合に重要です。詳細については、難読化されたスタックトレースのデコードを参照してください。

seeds.txt

難読化されていないクラスとメンバーをリストします

usage.txt

.apkから削除されたコードをリストします

ソース:Proguard

お役に立てれば!

37
Elltz

これはおそらく、より視覚的な確認方法です。 Android Studioの新しいリリースでは、APKファイルの内容をユーザーが確認できるAPKアナライザーが付属しており、クラスが難読化されているかどうかを確認するのに便利です。

以下の画像は、パッケージ名とメソッド名の両方が難読化されていることを示しています

You can see the package name and method name is obfuscated

37
WenChao

ProGuardがAndroidアプリを処理するとき、各ステップで何が起こったかを示すいくつかの出力ファイルを生成します。これらのファイルはビルドディレクトリにあります

<module_name>/build/outputs/mapping/<buildType>/

そこで見つけることができます:

  • seeds.txt-ProGuardはクラスプールを調べ、seeds.txtのいずれかに一致するすべてのクラスとメンバーのリストをkeep rulesに出力します。これは、作成した保持ルールが保持しようとしているクラスと実際に一致する場合のデバッグに役立ちます。
  • usage.txt-これは縮小段階で、ProGuardはアプリから未使用のコードを取り除きます。これを行うと、削除されるコードであるunused codeusage.txtに出力されます。これは、実行時にクラスが存在しない理由を把握しようとしている場合に便利です。
  • mapping.txt-ProGuardが次に行う必要があるのは、できるだけ多くのコードを難読化することです。つまり、クラスとメンバーの名前を「a」、「b」などの意味のない名前に変更します。 ProGuardは、すべてのクラスとメンバーの古い名前と新しい名前をmapping.txtに出力します。すべてのコードの名前が変更されるわけではありませんが、すべてのコードはmapping.txtにリストされています。これは、スタックトレースの難読化を解除する場合に必要なファイルです。これにより、難読化された名前から元のコード名までさかのぼることができます。
  • dump.txt-処理後のすべてのコードの完全なリスト。つまり、クラスファイルに残っているものはすべて最適化されていない形式なので、巨大なファイルになります。ただし、クラスファイルの内容を確認したいが、.classファイルまたは.dexファイルを逆コンパイルしたくない場合、これは非常に便利です。

これは、ステップの非常に高度な概要で作成した図です

enter image description here

続きを読む こちら

4
yoAlex5

実行された難読化のレベルを確認する方法はありますか?

フラグ-optimizationpasses Nを使用できる場合があります。

実行する最適化パスの数を指定します。デフォルトでは、単一のパスが実行されます。複数のパスにより、さらに改善される場合があります。最適化パスの後に改善が見つからない場合、最適化は終了します。最適化時にのみ適用されます。

0
VKDev