カテゴリ : プログラミング
キーワード (keywords) : WebAPI,安全,セキュリティ,OAuth,サインイン,秘密鍵
説明 (description) : 今回はAndroidの端末にパスワード(秘密鍵など)を保存しますが、Javaコードだと「技術ベルが低いエンジニア」でも簡単に逆コンパイルが可能ですので解析されてしまいます。また、NDKを使用してC++コードで書いて「.so」の共有ファイルに保存する方法があります。ですが、逆アセンブルされたら・・・
登録日時: 2020-08-05 06:56:31
更新日時: 2020-08-05 06:57:01
今回はAndroidの端末にパスワード(秘密鍵など)を保存しますが、Javaコードだと「初心者」でも簡単に逆コンパイルが可能ですので解析されてしまいます。Javaコードを難読化する手法もありますが、ほぼ意味がないです。
NDKを使用してC++言語のコードで書いて「.so」の共有ファイルに保存する方法があります。ですが、逆アセンブルされたら危険です。
ただ、逆アセンブルで生成されたアセンブリ言語は「熟練者」の方ではないと解析が難しいです。例として113 KBの「.so」ファイルは約2万行のアセンブリ言語となります。 ※全て読む必要はないですが。
最終的にはC++で暗号化アルゴリズムを実装、パスワード(秘密鍵)を埋め込み、デバッグ時、証明書フィンガープリント(ハッシュ)などの対策を施す。SSL/TLS通信でWebAPIにアクセス。加えてGoogle Sign-In(サインイン)でOAuth認証(オーオース)を行う。
これならば「.so」ファイルを逆アセンブルされても、OAuth認証があるので勝手にWebAPIを操作する事は不可能に近いと思います。
Google Sign-Inの前にLVL(License Verification Library)も調査したけど、基本的に有料アプリが対象で、さらにサーバー側の連携がない模様です。