LoginSignup
3
2

More than 1 year has passed since last update.

Kotlinプロジェクトでどこまでキーを隠蔽化できるか(その1:逆コンパイルを試す)

Posted at

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自体でコードを難読化処理を行っているようで、ぱっと見ではキーは確認できませんでした。

まとめ

コードの中にキーをハードコーディングしてしまうと、キーを容易に閲覧できてしまいます。これは大きな問題でしょう。次回以降、このコードを隠蔽化する方法を考えて、試していきます。

3
2
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
3
2