SECCON2015 Reverse-Engineering Android APK 1

More than 3 years have passed since last update.


処理をみる

http://www.decompileandroid.com/

ここでapkをソーソコードに直す事ができる

source->src->com->example->seccon2015->rock_paper_scissors


MainActivity.java(59~)

 if (1000 == cnt)

{
textview.setText((new StringBuilder()).append("SECCON{").append(String.valueOf((cnt + calc()) * 107)).append("}").toString());
}


ここがフラグを出力する処理であると分かる。


MainActivity.java(73~)

 public MainActivity()

{
cnt = 0;
}

cntの初期値が0である事が分かる。


方向性

フラグ表示条件はcntが1000

よって、この変数の初期値を999にして1回かてばフラグが出るようにする。


apkの書き換え

apktoolを使う

http://ibotpeaches.github.io/Apktool/

$ apktool rps.apk

$ vim rps/smail//com/example/seccon2015/rock_paper_scissors

14行目に .field cnt:Iとある。

53行目に

iput v0, p0, Lcom/example/seccon2015/rock_paper_scissors/MainActivity;->cnt:I

とあるため、ここで定義されている変数を999にすればよい。

.line 15

const/4 v0, 0x00
iput v0, p0, Lcom/example/seccon2015/rock_paper_scissors/MainActivity;->cnt:I

これを下記のように書き換える。

.line 15
const v5, 0x3E8
iput v5, p0, Lcom/example/seccon2015/rock_paper_scissors/MainActivity;->cnt:I

smailの文法はここを見れば分かる。

http://stpr18.blogspot.jp/

$ apktool b rps

$ ls rps/dist/rps.apk

これがあたらしくできたapkファイルとなる。


署名

これを実際に動かそうとすると、署名がないとかインストールできなかったりする。

ここを参考に署名をする。

Android 作成したアプリに署名を行う

$ keytool -genkey

...
... #aliasを聞かれるから覚えておく
$ keytool -list #鍵があるか確認する
$ jarsigner rps.apk "さっきのalias"
キーストアのパスワードを入力してください:
jarは署名されました。
keytool rps/dist/rps.apk hoge

これで署名終了

あとはこれを実機なりgenymotionで起動して、1回勝てばフラグが出る