2012/03/08

Android:Windowsでapkを逆コンパイルする方法


.apkからソースコードを取り出す方法です。
# バッチの実行コマンドなどは説明を簡略化するためにフルパスで指定しています。

手順1:.apkからclasses.dexを取得
逆コンパイルするには、まずclasses.dexが必要です。
逆コンパイルしたいapkを取得して、zip解凍ソフトで解凍してください。
# よくわからない場合は拡張子をapkからzipに変えてダブルクリックで解凍。
(今回はCドライブ直下に解凍しました)


手順2:dex2jarで.dex→.class変換
手順1で解凍したフォルダの中にclasses.dexがあると思います。
逆コンパイルするにはclasses.dexを.classファイル形式に変換します。

.dex→.class変換にはdex2jarというツールを使います。
dex2jarツールは下記サイトにあります。
http://code.google.com/p/dex2jar/downloads/list
(今回はdex2jar-0.0.9.8.zipをダウンロードしました)


dex2jar-V.V.V.V.zipを解凍すると多くのシェルやバッチが入っています。
(今回はCドライブ直下に解凍しました)

バッチの中にdex2jar.batがあるので確認しましょう。
dex2jar.batとclasses.dexを確認したらコマンドプロンプトで下記を実行します。

C:\> <dex2jar.batのパス> <classes.dexのパス>
例)C:\> C:\dex2jar-0.0.9.8\dex2jar.bat C:\FragmentTest\classes.dex

正常終了したらclasses.dexと同じ階層にclasses_dex2jar.jarが出来ます。
この.jarをzip解凍ソフトで解凍します。(今回はCドライブ直下に解凍しました)
# よくわからない場合は拡張子をzipにして解凍

jarを解凍するとソースディレクトリが取得でき、中にclassファイルが格納されています。


手順3:jadで.class→.java変換
jadツールを使用すると.classファイルから.javaファイルが取得できます。

jadツールは下記サイトにあります。
http://www.varaneckas.com/jad
(今回はJad 1.5.8g for Windows 9x/NT/2000 on Intel platformをダウンロードしました)


jad158g.win.zipを解凍します。
(今回はCドライブ直下に解凍しました)
解凍するとjad.exeがあるので確認しましょう。

jad.exeと.classファイルが揃ったらコマンドプロンプトで下記を実行します。
C:\> <jad.exeのパス> -8 -d <出力パス> -s .java -r <.classファイルパス>
例)C:\> C:\jad158g.win\jad.exe -8 -d C:\out -s .java -r C:\yuki\**\*.class

例ではjarファイルを解凍したC:\yuki以下にある全てのclassファイルを変換対象として
います。


手順4:javaファイルの取得
jadコマンドが正常終了すると、出力パスに指定したディレクトリに.javaファイルができ
ていると思います。

これで逆コンパイル完了です。

以上です。