Kotlinを使ってAndroidアプリを作った際に、NCMBのアプリケーションキーとクライアントキーをどこまで隠蔽化できるのか試しています。前回はC++を使ってコンパイル、隠蔽化する方法を試しました。今回は難読化を実現するProGuardを使ったらどうなるのか試しています。
ProGuardについて
ProGuardはAndroid Studio標準で使えるコードの圧縮、最適化、難読化を行うライブラリです。今回は特にオプションを指定せず使ってみました。
デバッグ環境でも適用する
デフォルトではリリースビルドでのみProGuardが適用されるので、デバッグ環境でも使えるようにします。app/build.gradleを編集します。
android {
// 省略
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
// 追加
debug {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
proguard-rules.pro
は特に編集していません。
Android SDKを導入する
次にNCMBのAndroid SDKを導入します。これはイントロダクション (Android) : クイックスタート | ニフクラ mobile backendに沿って進めてもらえば問題ありません。具体的には次の手順を行います。
- GitHubのリリースページからSDKをダウンロードして展開
- NCMB.jarをapp/libsディレクトリに入れる
- app/build.gradle の編集
- app/src/main/AndroidManifest.xml の編集
コードを修正する
MainActivity.kt を修正します。まずSDKを読み込みます。
import com.nifcloud.mbaas.core.NCMB;
そしてNCMBを初期化します。 YOUR_APPLICATION_KEY
と YOUR_CLIENT_KEY
はそれぞれ書き換えてください。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
NCMB.initialize(this.getApplicationContext(),"YOUR_APPLICATION_KEY","YOUR_CLIENT_KEY");
// 省略
}
これで完了です。
ビルドする
後は普段通りAndroidアプリをビルドします。
jadx-guiで見る
jadx-guiで見た内容です。
難読化される際にメソッド名は書き換わっています。しかしキー自体は文字列なので、そのまま出力されています。 NCMB.initialize
が本来のメソッドなので、それを探しても見つからないという点がちょっとしたメリットですが、キー自体は露呈してしまうので、多少面倒くらいにしかならなそうです。
まとめ
ProGuardはコードの難読化、最適化ツールなので、キーの隠蔽化という目的には適していません。隠蔽化するのであればC++を使った方法が良さそうです。