【Android】APKのデコンパイルまとめ
AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコードを復元)する方法について、備忘録として記しておきます。。。
APK→Javaを復元するわけですが、いくつかステップを踏む必要があります。流れを以下に示します。
- APKファイルからdexファイルを取り出す。
- dexファイルからjarファイルを復元する。
- jarファイルからclassファイルを取り出す。
- classファイルからJavaファイルを復元する。
ちょっとめんどくさそうだけど、APKファイル、jarファイルはただzip圧縮されたものなので、zip解凍するだけなのです。。。
その他の工程も、ツールを用いてそれぞれ「dexファイル→jarファイル」、「classファイル→Javaファイル」へと復元するだけ。すぐできちゃいます。
ということで順に見ていきます。。。
1.APKファイルからdexファイルを取り出す。
APKファイルはzip圧縮されたものなので、zip解凍します。(Windowsの場合、拡張子をzipに書き換えないと認識してくれないかもしれません。)すると、jarファイルを圧縮したものであるclass.dexが生成されました。これをゴニョゴニョしていきます。
2.dexファイルからjarファイルを復元する。
dexファイルからjarファイルを復元するには、ツール(dex2jar)を利用します。リンク(https://code.google.com/p/dex2jar/downloads/list)からダウンロードし、解凍しておく。
解凍すると、batファイルやshファイルが出てくるが、Windows環境の場合は、「dex2jar.bat」、Mac,Linux環境の場合は「dex2jar.sh」を用いる。今回はWindows環境で試してみる。方法は、dex2jarを実行する際の引数に、先程取り出したclass.dexを指定するだけ。コマンドプロンプトで下記のように打ち込み、実行する。(パスは適宜変更してください。)
D:\hack\dex2jar-0.0.9.15> dex2jar.bat sample/classes.dex
すると、classes.dexファイルからclasses_dex2jar.jarファイルがclass.dexと同じディレクトリに生成されます。
dex2jar version: translator-0.0.9.15 dex2jar sample\classes.dex -> sample\classes_dex2jar.jar Done.
3.jarファイルからclassファイルを取り出す。
生成されたclasses_dex2jar.jarは、classファイル一式をzip圧縮したものなので、1.と同様の手順でzip解凍すればよい。
すると、classファイルが色々入ったネームスペースのディレクトリが生成されます。
4.classファイルからJavaファイルを復元する。
最後に、classファイルからJavaファイルを復元するが、これもツール(JAD Java Decompiler)を用います。リンク(http://varaneckas.com/jad/)より、各自のプラットフォームにあったパッケージをダウンロードし、解凍しておく。
Windowsの場合実行ファイルjad.exeが生成されるはずなので、コマンドプロンプトから、引数を指定してjad.exeを実行する。。。
実行例は下記のようになる。
#> [jad.exeのパス] -8 -d [出力パス] -s .java -r [classファイルパス] D:\hack\jad/> jad.exe -8 -d ./output -s .java -r sample/com/example/hoge/*.class
各オプションの詳細は下記の通り。
-8: UnicodeからANSIにコンバート
-d: 出力のディレクトリパス指定
-s: 出力ファイルの拡張子指定(デフォルトは.jad)
-r: 変換するクラスファイルパス
実行すると、-dオプションで指定したディレクトリ以下に復号されたjavaファイルが生成されます。
んで生成されたjavaのコードを見てみると、ほぼまんま復元されてます。そして、条件文の箇所がGOTO文になってます。。。
もし難読化処理とかしてなかったら思いッきりもろバレですね。。。ということで難読化の大切さ、ハードコードのよろしくないことも実感されますです。。。
GoogleAdsense
関連記事
-
-
bash設定ファイルについてまとめてみた
仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ
-
-
パスワードクラックツール JOHN THE RIPPER 使い方まとめ
パスワードクラッキングツールである「JOHN THE RIPPER」の使い方を備忘録としてまとめてお
-
-
クラックツールHydraでベーシック認証を突破してみる
kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認
-
-
Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題
Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入
-
-
SSH CA認証まとめ
SSHでの接続を、CA認証でやってみる。 備忘録として残しておくの。。。 概要 Open-SSH
-
-
PHPのextensionが読み込まれない問題…
大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを
-
-
【Node.js】 Cookieの取り扱いまとめ
最近流行りのNode.jsですが、Cookieに関して、いくつかお決まりの取り扱い方があり、
-
-
Win7, 64bit環境でのcocos2d-x環境構築まとめ
さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど
-
-
genymotionのすすめ
Android開発においてしばしば挙がる不満として、エミュレータのもっさり感があります。 この
-
-
【Android】難読化ツールProguard設定まとめ
Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール