はじめに
研究でAndroid系扱っているのにCTFでAndroid問が解けないので強くなりたい.... ついでにAndroid問を解くために準備しておくとよいものと私のいつものやり方(デコンパイル)を載せておきます
このページは私が見つけたAndroid問をひたすらのっけるだけ、Writeupは出来たやつからリンクをはる
Jewelはksnctfの問題なのでWriteupは載せません
問題一覧
- [WhiteHat Contest13] Dai Lai Lake Writeup Writeup
- [RCTF 2017] [Reverse] HelloDalvik
- [Android Hackeing Event2017] AES-Decrypt
- [AngstromCTF 2017] brokenpasscode Writeup
- [ksnctf] Jewel
Android CTF問を解くのに必須なもの
Android CTF問を解くのにあるとよいもの
- Android Emulator
Android CTF問でやること
apkの中身を見れるようにする
まずは配られたapkの中身を見れるようにします。
このときに使うのがapktool
かunzip
apkはzipファイルなのでjavaのソースコードだけでいい場合はunzip
でいいです。
ただしunzip
ではAndroidManifestファイルが見れないのでそういうときはapktoolを使うようにしています。
$ unzip test.apk $ apktool d test.apk
こんな感じで使います。
apkの構成は以下のようになっています。unzipを使ったときは以下の構成になっていると思います。
apktoolだとclasses.dexファイルがなくてその代わりにsmaliファイルがあります。
$ ls AndroidManifest.xml # マニフェストファイル META-INF/ # 署名 assets/ # アプリで必要になるデータ等がある classes.dex # Javaのソースコード res/ # アイコンとかのリソースが入っている resources.asrc
dexファイルをjavaで見れるようにする
ソースコードが見れれば解けるような問題もあります。ということでdexファイルをjavaで見れるようにします
dex2jarを使うとアプリで使われているclassファイルが出てきます。あとはそれをjadを用いて見れるようにします。
基本的にはMainActivity.classが必ずあるのでそれをjadで見て、後は必要に応じてjadを使っていけばいいと思います。
MainActivity.classがどこにあるのかはfind ./ -name MainActivity
とかでどうぞ
$ dex2jar classes.dex $ jad ./***/***/MainActivity.class
apkファイルが配られたらとりあえずやることはこんな感じになると思います。