LoginSignup
1
1

More than 5 years have passed since last update.

SECCON2015 Reverse-Engineering Android APK 1

Posted at

処理をみる

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回勝てばフラグが出る

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