とあることからアプリを解析することになった。
以下はその手順。
参考)
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.xml
のapplication
エレメントに設定する。
それで再度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とやりかた同じ)
そうすることでブレークポイントが使える。
完全にブレークポイントが有効になるわけではない(バイトコードとの対応ができない部分があるみたい)
が、なんとなくあたりを付けていけば実行が追えるはず。
あとは気になる処理を根気よく探していこう。