androguardというツールを使ってapkを解体してみる。
どのへんがガードなんだ逆じゃないか、と言いたくなるのは置いておくとして。
TL;DR
pip3 install -U androguard[magic,GUI]
androguard analyze TestActivity.apk
In [2]: dx.classes
:
In [3]: for meth in dx.classes['Ltests/androguard/TestActivity;'].get_methods():
print("inside method {}".format(meth.name))
for _, call, _ in meth.get_xref_to():
print(" calling -> {} -- {}".format(call.class_name, call.name))
androguard axml TestActivity.apk
androguard arsc TestActivity.apk --list-types
androguard arsc TestActivity.apk --type string --locale ja
androguard axml TestActivity.apk -r res/layout/main.xml
環境
- MacOS Mojave 10.14.6(18G87)
- Python 3.7.4
- Androguard version 3.3.5
androguard
の導入
以下を実行。
pip3 install -U androguard[magic,GUI]
apkの中身を見る
以下を実行。
androguard analyze TestActivity.apk
すると In [1]:
のような表示が出るので、そこで dx.classes
してみる。
するとすべてのクラスの一覧が表示される。
次に a.get_activities()
してみる。
するとapkに含まれるすべてのアクティビティのクラスが列挙される。
その他、以下のようなコマンドが実行できる。
In [4]: a.get_package()
Out[4]: 'com.greenaddress.abcore'
In [5]: a.get_app_name()
Out[5]: u'ABCore'
In [6]: a.get_app_icon()
Out[6]: u'res/mipmap-xxxhdpi-v4/ic_launcher.png'
In [7]: a.get_androidversion_code()
Out[7]: '2162'
In [8]: a.get_androidversion_name()
Out[8]: '0.62'
In [9]: a.get_min_sdk_version()
Out[9]: '21'
In [10]: a.get_max_sdk_version()
In [11]: a.get_target_sdk_version()
Out[11]: '27'
In [12]: a.get_effective_target_sdk_version()
Out[12]: 27
コマンドラインは通常通り、 Ctrl+D
で抜ける事ができる。
AndroidManifest.xml
を読む
以下コマンドを実行するだけ。
androguard axml TestActivity.apk
res(リソース)を一覧する
# 種類を一覧する
androguard arsc TestActivity.apk --list-types
# 色を一覧する
androguard arsc TestActivity.apk --type color
# 日本語リソースの文字列を一覧する
androguard arsc TestActivity.apk --type string --locale ja
layoutを読む
下記のようなコマンドで解体できる。
androguard axml TestActivity.apk -r res/layout/main.xml
リソースは探すのが手間なので、拡張子を apk
から zip
に変更して解凍し、バイナリXMLにしてからandroguardしたほうが楽。
ただし、これで出てくるのはリソースのIDの状態なので、例えば android:id="@7F0802F9"
という値があるとして、 R.java
から 0x7f0802f9
になっている値を探して、それが hoge_id
だと判明する。色や文字列の場合は、そこから更に --type color
などで追いかける必要があって結構難儀。
備考
androlyze.py
はどうやら動かない。
プログラムを解体したいだけなら、 jad や dex2jar を組み合わせたほうが楽。