LoginSignup
26
26

More than 5 years have passed since last update.

Android .apk ファイルから .smali や .class, .java ファイルを閲覧する方法 (リバースエンジニアリング)

Last updated at Posted at 2015-06-18

覚書です.

一応はじめに.

ここに書かれていることを自分が作ったアプリケーション以外で行う場合は、利用許諾に違反すると思われますのでやらないようにお願いします。
デコンパイルすることによって、自分のアプリケーションがどうユーザに提供されているか確認し、それによってクラッキングを防いだりすることによってアプリケーションの品質を向上していく、といった使い方が望ましいと思います。

利用するツール群

今回の手順は Windows10 前提です.

事前準備

  • 上記ツール群を、すべて C:\hoge 直下に置きます. (説明簡略化のため)
  • Android 端末から APK ファイルを抜き出します. (仮に hoge.apk とする)
    • root 化でもいいし、アプリを使って apk のバックアップ取るでも良いですが、 全ては自己責任で.

やり方1 (apktool によるリバースエンジニアリング)

> mkdir hoge
> cd C:\hoge
> java -jar apktool_2.2.1.jar d hoge.apk

これで C:\hoge\hoge というフォルダに色々入りました.
.java の代わりに、smali という名前のフォルダが作られており、ここには各クラスに応じて .smali というファイルが作られています.
中身はテキストベースのファイルとなっており、これだけでもある程度解析は可能になっていますが、やっぱり .java で見たほうが見やすい!という方のために、やり方2 を準備しました.

やり方2 (unzip, dex2jar, JavaDecompiler)

unzip がない場合は GNUWIN32 からダウンロードして PATH を通しておく.

> cd C:\hoge
> unzip -d hoge hoge.apk
> dex2jar-2.0\d2j-dex2jar.bat hoge\classes.dex
> C:\hoge\jd-gui-windows-1.4.0\jd-gui.exe C:\hoge\classes-dex2jar.jar

これで、JD によって Java のソースコードにデコンパイルされたものが見られるようになります.

最後に

やり方 1 と やり方 2 を紹介したわけですが、.smali ファイルがソースコードと同じぐらい読める人なら、やり方 1 だけで十分です.
実際にデコンパイルしたソースコードをに変更を加えて再度コンパイルしようとした場合、.java のほうは融通が利かないことがあります. (コンパイルに失敗したり)
その点、.smali のデコンパイル、コンパイルはすんなりと通り、実機でも正常な動作を実現できます.

それでは良きエンジニアライフを(^w^)ノシ

26
26
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
26