2012年10月31日水曜日

apkファイルを逆コンパイルする手順

1. apkファイルを解凍

逆コンパイルしたい apkファイルを用意したら、まずは解凍します。
対象のAPKファイルをzipファイルとして解凍し、下記のファイルおよびディレクトリを得る。
META-INF
res
AndroidManifest.xml
classes.dex
resources.arsc


2. jarファイルを取得

jarファイルの取得方法が Windows でのやり方しか見つからなかったので、
とりあえずWin環境でやりました。

apkファイルを解凍したら classes.dex というファイルが見つかるので、こいつを dex2jar というツールで jarファイルを取得します。
まずは、dex2jar を入手します。

dex2jar:http://code.google.com/p/dex2jar/downloads/list
dex2jar
を入手し解凍したら、dex2jar.bat を環境変数でパスを通します。

その後、コマンドプロンプトで以下のコマンドを実行します。

> dex2jar classes.dex
これを実行すると classes.dex.dex2jar.jar というファイルが取得できます。

3. classファイルを取得

classes.dex.dex2jar.jar を解凍ソフトでを解凍して、classファイルを取得します。



4. jadをインストール

jad というソフトを使うと classファイルから javaファイルを取得することができます。
MacでもできたのでMac環境での手順で記載します。

まずは、jad を入手します。

jad:http://www.varaneckas.com/jad
jad をダウンロードした場所に移動して、ターミナルで以下のコマンドを実行してインストールします。

$ sudo mv ./jad /usr/bin/ Password: $ sudo chmod 755 /usr/bin/jad $ jad
5. classファイルの逆コンパイル

ターミナルで以下のコマンドを実行して、classファイルを逆コンパイルして javaファイルを取得します。

$ jad -8 -d src -s .java -r ~ **/*.class

6.バイナリXMLをテキストXMLへコンバート
AndroidManifest.xmlや、res/layout/*.xmlなどは、AXMLPrinter2.jar(Google Code : android4me)というツールを使用することで元の人間に読むことのできるテキスト形式のXMLへ変換することができる。

このツールはJavaで作成されているため、Java実行環境が必要。コマンドラインより、下記のようにして使用する。
java -jar AXMLPrinter2.jar AndroidManifest.xml
各種のリソースを表現するXMLであっても同様。
java -jar AXMLPrinter2.jar res/layout/main.xml

0 件のコメント:

コメントを投稿