NCMBではアプリケーションキー、クライアントキーの2つを使ってmBaaSとのデータ送受信を行います。この2つのキーを漏洩させないようにしなければいけません。とはいえ、デコンパイルが容易なAndroidアプリ(apkファイル)の場合、キーを何らかの形で隠す必要があるでしょう。ここでいう漏洩というのは、GitHubなどにAPIキーを載せないという話ではなく、Google PlayなどからDLされたAPKファイルでコードを閲覧できないようにする話になります。
今回はまず、コード中にキーを記載して作成したapkファイルをデコンパイル(逆コンパイル)してみます。なお、今回はmacOSを使っています。
jedコマンドは使えなくなっています
macOSではdex2jarを使ってdexからclassファイルにするのが基本だったようですが、Big surには対応していません。 com.googlecode.d2j.DexException: not support version.
というエラーが出ます。
Releases · DexPatcher/dex2jar版を使うことでdex2jarまでは動くのですが、classファイルからjavaファイルへの変換に必要なjedコマンドが利用できませんでした。
==> Downloading https://varaneckas.com/jad/jad158g.mac.intel.zip
######################################################################## 100.0%
Error: This cask does not run on macOS versions newer than Mojave.
解決策としては jadx
を使うのが良いようです。
$ brew install jadx
インストール後、 jadx-gui
を実行します。
$ jadx-gui
apkファイルを見る
実行するとウィンドウが立ち上がるので、Android Studioで作成したapkファイルを指定します。なお、apkxファイルの場合は一旦zipに拡張子を変更後、伸張した中にあるapkファイルを指定します。
そうすると、コードが見られるようになります。もちろん、その中にはコードにハードコーディングしたアプリケケーションキーとクライアントキーが確認できます。
注意点:Unityの場合
Unityの場合、Unity自体でコードを難読化処理を行っているようで、ぱっと見ではキーは確認できませんでした。
まとめ
コードの中にキーをハードコーディングしてしまうと、キーを容易に閲覧できてしまいます。これは大きな問題でしょう。次回以降、このコードを隠蔽化する方法を考えて、試していきます。