読者です 読者をやめる 読者になる 読者になる

ureshino blog

セキュリティ初心者です。 TwitterID: @enzerus

seccon 2015 online writeup 2問 (´・ω・`

一応解いた問題について。


Connect the server

問題:
login.pwn.seccon.jp:10000

↑のアドレスにブラウザでアクセスすると普通にflagを含む情報がダウンロードできます。

↓がその情報


CONNECT 300

Welcome to SECCON server.

The server is connected via slow dial-up connection.
Please be patient, and do not brute-force.
S E C C O N { S o m e t i m e s _ w h a t _ y o u _ s e e _ i s _ N O T _ w h a t _ y o u _ g e t } 
login: 

Login timer timed out.
Thank you for your cooperation.

HINT: It is already in your hands.

Good bye.
flag: SECCON{Sometimes_what_you_see_is_NOT_what_you_get}

もうひとつあまりに重かった時にflag取っておいて完全に送るのを忘れていたやつがあったのでそいつも入れておきます。



問題: じゃんけんに1000回連続で勝ち続けよ

apkファイルが渡される。

まずapkはzipなので、適当に書庫で開いて、

中からclasses.dexを取り出し、それを dex2jar-2.0でjarに変換させる

変換が終わったらjd-guiとかに投げて中身を見る

難読化されていないのですっきりと見ることができる

↓にその時のコードの主要部分を抜粋


        if (1000 == MainActivity.this.cnt) {
          localTextView.setText("SECCON{" + String.valueOf((MainActivity.this.cnt + MainActivity.this.calc()) * 107) + "}");
        }
  static
  {
    System.loadLibrary("calc");
  }
  
  public native int calc();

コード見る限り、

cntが1000回になったら、flagを出すようになっている。

今回少し厄介なのが、その (cnt+calc())ををしているので、

System.loadLibrary('calc')の部分を少し見ないとわからない。

そのため、apk(zip)の中に libフォルダがあると思うのでこの中にcpu?ごとに読みだすsoが入っているのでその中身を確認する。

中身の確認方法は、自分の場合

$objdump -d libcalc.so

実行すると、色々省略して↓のような処理が書かれている。

f:id:enzerus:20151206182320j:plain

eaxに 0x7を代入しているので、単純に 7 を返しているだけだと思った

なので、(1000+7)* 107 = 107749

flag: SECCON{107749}

今回はスケジュールミスってほとんど参加できなかったので、

また次頑張りたいと思う。

来年そんな暇があるかわかりませんが・・・(社畜真っ最中だと思う)

お疲れ様でした。