LoginSignup
3
4

More than 3 years have passed since last update.

androidのAPKを解析する。デコンパイル&デバッグ

Posted at

とあることからアプリを解析することになった。
以下はその手順。

参考)
https://coky-t.gitbook.io/owasp-mstg-ja/android-tesutogaido/0x05c-reverse-engineering-and-tampering

アプリを準備

当たり前なので割愛。
ipaは取り出しにくい

apktoolのダウンロード

apk形式はzipなので、apk→zipと拡張子を変えても展開はできる。
ただ、apktoolのほうがリソースをデコードしてくれたり、dexを変換してくれたりと便利
macならbrew install apktoolで可能。

コマンド入ったら、apktool d hoge.apkで展開される。

ちなみにアプリのファイル形式がapkxという場合もあるみたい。
これは複数のapkをまとめた形式なのでunzipなどで一度解体してからでも可。

解体した内容

resにリソースなどが含まれる。
javaの内容はclasses*.dexというファイルにまとまっている。
d2j-dex2jarとかでjarに展開可能。
apktoolだと全部展開してくれてるはず。
(ただし全部元に戻せるわけではない)

リソースが一部展開されない

後にも触れるが、一部リソースは展開できないことがある。
decodeしたあとにファイルを改変して再度apkにしてもこのせいで動かないことがある。
その場合は、当該リソースを読み込んでるlayout/activity_******.xmlからそのリソースを読み込んでいる部分をすべて消す。
(大方imageviewとかなのでまぁ消しても問題なし。imageがほしいなら別だが)
こんな名前が見つかるはず→APKTOOL_DUMMY_***
res/values/drawables.xmlに参照が見つかるのでこれをまとめて変えてもいいかも。

android:debuggable="true"

デバッグを有効にするため、AndroidManifest.xmlapplicationエレメントに設定する。
それで再度apkに変換して、adbでinstall、実機で実行して、android studioからデバッグをアタッチする。

再度apkに

apktool b -f
でapkファイルにパック
zipalign -v 4 dist/hoge.apk ../hoge.apk
zipalignで処理(このへんよくわかってません。アプリ作ったことほぼないもので…)
apksigner sign --ks ~/.android/debug.keystore --ks-key-alias signkey hoge.apk
デッバグ用キーで再度署名(このへんはandroidのドキュメントを見ればOK)
adb install -r hoge.apk
で実機にインストール
これでひとまず動くはず。動かなければAndroid StudioのLogcatなどでエラーを確認する。

AndroidStudioからプロセスをアタッチ

アンドロイド本体にて「デバッガを待機」などの設定をしておく。(開発者モードももちろん)
また、AndroidStudioにて新規プロジェクトを作成し、解体したソース一式をそのまま新規プロジェクトに入れてしまう。
(参考URLとやりかた同じ)
そうすることでブレークポイントが使える。
完全にブレークポイントが有効になるわけではない(バイトコードとの対応ができない部分があるみたい)
が、なんとなくあたりを付けていけば実行が追えるはず。
あとは気になる処理を根気よく探していこう。

3
4
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
3
4