処理をみる
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を使う
$ 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回勝てばフラグが出る