【Android】APKのデコンパイルまとめ

公開日: : 最終更新日:2014/04/20 Android, Hack, 備忘録 , ,

AndroidのプロジェクトをパッケージングしたAPKファイルをデコンパイル(Javaのソースコードを復元)する方法について、備忘録として記しておきます。。。

 

APKJavaを復元するわけですが、いくつかステップを踏む必要があります。流れを以下に示します。

  1. APKファイルからdexファイルを取り出す。
  2. dexファイルからjarファイルを復元する。
  3. jarファイルからclassファイルを取り出す。
  4. 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

関連記事

【Androidエラー】Conversion to Dalvik format failed with error 1

Androidにおいて、アプリケーションを作成し終え、いざパッケージをエクスポートっ!!というところ

記事を読む

hydra

クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hydra」を利用して、ベーシック認

記事を読む

dordoidくん

【Android】難読化ツールProguard設定まとめ

Android開発環境の1つであるEclipseでは、標準でAndroidプロジェクトの難読化ツール

記事を読む

android_kitkat

Android4.4(API19)KitKatでのGraphicalLayout,AdMob問題

Androidの新バージョンKitKatがリリースされてもう結構経つが、いまさら我が開発環境でも導入

記事を読む

android_secure

【Android】代表的な脆弱性まとめ ~ファイルアクセス権について~

近年、スマートフォンの普及に伴い、Android, iPhone, WindowsPhone? ユー

記事を読む

bash設定ファイルについてまとめてみた

仮想環境を組んだ時に、環境変数が所どころ未設定なことがあった。 環境変数の設定にはbashの設定フ

記事を読む

Win7, 64bit環境でのcocos2d-x環境構築まとめ

さて、いままでJavaオンリーでゴリゴリとアプリリリースしてきたわけですが、ゲームを作るとなると、ど

記事を読む

MySQLでの条件付きSUM,COUNT

以前つっかかったMySQLでの条件付きSUM,条件付きCOUNTについて備忘録。。。 通常、条

記事を読む

nerdtree

Vimプラグイン「NERDTree」設定・コマンド備忘録

Vimのプラグインである「NERDTree」について、設定・コマンドを備忘録としてまとめておきます。

記事を読む

john the ripper

パスワードクラックツール JOHN THE RIPPER 使い方まとめ

パスワードクラッキングツールである「JOHN THE RIPPER」の使い方を備忘録としてまとめてお

記事を読む

GoogleAdsense

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

GoogleAdsense

openssh
SSH CA認証まとめ

SSHでの接続を、CA認証でやってみる。 備忘録として残しておく

node_cookie
【Node.js】 Cookieの取り扱いまとめ

最近流行りのNode.jsですが、Cookieに関して、いくつ

hydra
クラックツールHydraでベーシック認証を突破してみる

kali linuxにデフォルトでインストールされているツール「Hyd

john the ripper
パスワードクラックツール JOHN THE RIPPER 使い方まとめ

パスワードクラッキングツールである「JOHN THE RIPPER」の

宇部空港
久々の帰省・・・

宇部空港にて[/caption] たまには普通の日記を。。。

→もっと見る

PAGE TOP ↑