2
2

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.

androguardを使ってapkを解体する

Last updated at Posted at 2019-08-19

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 はどうやら動かない。
プログラムを解体したいだけなら、 jaddex2jar を組み合わせたほうが楽。

参考

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?