6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidアプリのデコンバイルまとめ

Posted at

#背景
ついつい時間ができたらやってしまうAndroidのゲームを、
単に遊ぶだけではなく構造を理解して技術トレンドを追いつつ、
ゲームそのものに熱中しないように自動化してつまらなくしてやめるのが、
自身の習慣となっていますが、マシンを変えるたびに環境を揃えるのが面倒なので、
ここにまとめます。

#使うもの

#やりかた

1.apkファイルをPCにコピーする

adb shell pm list packages -f | grep パッケージ名
package:アプリ保存先=パッケージ名

adb pull アプリ保存先 PC保存先

2.apktoolでapkを展開する(主にマニフェストとか、アセットとか、リソースファイルの確認)

apktool d アプリ
アプリのパッケージ名のフォルダに展開される

パッケージ名
|-AndroidManifest.xml
|-apktool.yml
|-assets
|-lib
|-original
|-res
`-smali

3.unzipでapkを展開する(ソースコード読みたい時の下準備)

unzip アプリ -d apk

./apk
|-AndroidManifest.xml
|-META-INF
|-assets
|-classes.dex
|-lib
|-res
`-resources.arsc

4.dex2jarでdexファイルをjarファイルに変換

dex2jar classes.dex
classes-dex2jar.jarが生成される

5.unzipでjarを展開する

unzip classes-dex2jar.jar -d output

6.jadでclassファイルをjavaに変換する

cd output; find . -name "*class" | xargs -IXXX jad -s java -r XXX
output以下にフォルダ構成を維持されたjavaファイルが出来上がる

7.必要に応じて.soファイルの内容を確認

対象のアプリのロジックが.soに入っている場合は、別途デコンパイラーが必要になるため、
環境構築が面倒な方はオンラインコンパイラーを使うのが無難
※主にUnityのコードとか見るのに使っている

#主に見ているもの
javaコードとか、layoutファイルとか見つつ、
libの中身見てどういうライブラリー使っているのか見つつ、
uiautomatorviewer使いながらアプリ動かしつつ、
Charles使って通信内容見つつ、
AppiumとかCalabashとかmonkeyrunner(未だに)とか使って自動化したり、
ゲームの裏ワザが本当なのか確認したりしてます。

最後に

内容的にここ5年ぐらい特に変わってないやり方のまとめになってしまっていますので、
是非より良い方法とか、他にもこういうの見たりしてまっせという情報があればコメント頂けると助かります。

6
10
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
6
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?