【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

関連記事

hydra

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

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

記事を読む

node_cookie

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

最近流行りのNode.jsですが、Cookieに関して、いくつかお決まりの取り扱い方があり、

記事を読む

android_secure

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

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

記事を読む

MySQLでの条件付きSUM,COUNT

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

記事を読む

john the ripper

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

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

記事を読む

openssh

SSH CA認証まとめ

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

記事を読む

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

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

記事を読む

PHPのextensionが読み込まれない問題…

大したあれではないが、ちょっと詰まったのでメモ。。。 事のぼったんは久々にWordPressを

記事を読む

nerdtree

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

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

記事を読む

dordoidくん

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

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

記事を読む

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 ↑