Androidアプリのapkを解析してソースコードを見れるの?

apk_android
Androidアプリを解析する方法が気になって調べてみると、とても簡単に解析できてしまうことに驚きます。
もちろん難読化といった処置をしてあるアプリも多数ありますが、ソースコードは読めてしまいます。
パズドラのソースコード解析やモンストのソースコード解析を行っているサイトもあったりと、Androidのapkの逆コンパイルの簡単さが際立つ印象ですね。
今回はサクっとapk解析のやり方を見ていきますが、Android SDKのインストールは終わらせておきましょう。

SPONSORED LINK

apkファイルの入手

もしまだAndroid SDKをインストールしていない場合には「Flashtoolの使い方は簡単!Xperia Tablet Z SO-03EをAndroid 5.0 Lollipopにアップデート!」にある「Android SDKをインストールする」の項目をご覧下さい。

さて、端末にインストールしてあるapkをパソコンに転送しなくてはいけません。
Androidの設定を「開発者向けオプション」から「USBデバッグ」を有効にしてUSBケーブルで接続します。

そしてAndroid SDKのadbを利用してインストール済みのアプリ一覧を取得します。
PCにコピーするコマンドは以下です。

$ adb pull /data/app/jp.hogehoge.apk

apkのソースコードを解析する

拡張子apkをそのままzipに変更し7-zip対応の解凍ソフトで展開します。
「[Application].dex」というファイルがあることを確認します。

このdexファイルがアプリの本体ファイルです。
本来はDalvikVMで動作するファイルですが、jarファイルに変換することでソースコードを表示できます。

dex2jarでdexファイルを変換する

dexファイルをjarファイルに変換する為のツールを用意します。
pxb1988/dex2jar · GitHub

dex2jarの使い方となる変換コマンドです。

$ dex2jar jp.hogehoge/[Application].dex

[Application]_dex2jar.jarが作成されます。

Java Decompiler/jd-guiで逆コンパイルする

javaファイルへのデコンパイルするツールを利用して、逆コンパイルします。
Java Decompiler

jd-gui
jd-guiを開いてjarファイルを開くだけで逆コンパイルした状態でソースコードを見ることができます。

難読化している場合にはクラス名は簡略化されますがソースコードは表示できてしまいます。

まとめ

このようにAndroidアプリの解析は本当に簡単にできてしまいます。
もしも今後Androidアプリの公開を検討しているならば難読化などのセキュリティ対策は必須と言えますね。
自分の公開しているアプリの解析をしてみて背筋が凍りついた!なんて思いはしたくはありませんね。

今日も知識欲は止まらない。

関連トピック

Yahoo!デベロッパーネットワーク「Your Request was Forbidden」エラーの対処方法

Yahoo!デベロッパーネットワークのWeb APIで「Your Request was Forbidden」のエラーが返る場合に確認す

MySQL INSERT エラーNo.1064 の原因と対処方法メモ

MySQLへのINSERT時などに構文エラー1064が発生した場合は、 使用できない文字が混入しているという原因がほとんどです。 誤

PHPで配列のエラー「Cannot use string offset as an array」がでる場合の対処法

PHPで「Cannot use string offset as an array」が出たら確認したいポイントをまとめました。 このエ

PHPエラー対処方法「RSSをXML取得時に不正文字が存在する場合」

PHPでRSSをsimplexml_load_stringなどを使って解析する場合に不正な文字が含まれている時に発生するエラー対処方法の

PHPのjson_encodeがUTF-8がエラーになってしまう

PHPでjson_encodeがUTF-8を指定していてもなぜか以下のエラーになる場合があります。 [code] PHP Warni

FacebookのRSSを取得する方法@Facobook API JSON対応

FacebookのRSSを取得する方法メモです。Facebookでは大規模な仕様変更が何度も行われて、古い情報ではRSSの取得ができない

PHPなどでDB不要のブログがまだまだ使えそう

データベースまで利用してわざわざ作るほどでもないブログや、 データベースが使えないサーバーだったり、 とにかく軽量化されたブログを目

JavaScriptでUA判別してスマホとタブレットを振り分ける方法

JavaScriptを使用してUAでiPhoneやAndroidのスマホを判定したり、増加傾向にあるタブレットを判別する方法メモ。 U

公開日:2011/07/20