ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

EKOPARTY CTF2015に参加した話(少しつらい)

22 October 09:00 ART - 23 October 17:00 ARTの間にEKOPARTY CTF2015に一人で出場してました.今回は前回よりも解けたのでよかったです(小並感)解けた問題のWriteupを載せていきます.結果390ptでした.

trivia50 Slogans

Description: EKO{ekopartyslogan2008_ekopartyslogan2009}

がんばってググった.

EKO{Vi root y entre_What if r00t was one of us?}

trivia90 SSL attack

Description: Name of one of the SSL attacks presented at ekoparty

がんばってググった(2)

EKO{BEAST}

Crypto50 SCYTCRYPTO

Description: Decrypt this strange word: ERTKSOOTCMCHYRAFYLIPL

タイトル名でググったりしたがまったく情報が得られず悶々としていた.まず最初に"SCYTCRYPTO"という文字列を暗号文から抜いて考えてみた.そうすると,"EKOM(ry"みたいになることに気づいた.その頃SCYTからスキュタレー暗号がふと浮かんだ.頭文字がEKOになる可能性が高いと思ったのでEKOになるように周期的に読むとしたらkeyを3として考えるべきであるので,以下のプログラムを作成して実行した.

gist0cfae75abbb9ed014694

EKO{MYFIRSTCRYPTOCHALL}

Crypto200 XOR Crypter

Description: The state of art on encryption, can you defeat it?
CjBPewYGc2gdD3RpMRNfdDcQX3UGGmhpBxZhYhFlfQA=

以下のプログラムが渡される.

gistba1da1a6333f9037c829

自分はPythonが読めないので諦めようかと思っていたが,がんばって調べながら読み進めた.その結果大まかに以下の手順のような処理をするプログラムであることがわかった.

  1. 平文の長さを4で割った時の値を4で引いた値分0x00をパディングする
  2. 平文をunpack
  3. 各要素を16bit右シフトした値と元の要素のXORを取る
  4. 再度これをpackする
  5. Base64エンコードする

これを踏まえた上で逆順に処理を追いながら復号するプログラムを作成した.rubyで書こうとしたがunpackやpackの処理系の違いがあるのかわからなかったので見よう見まねで初Pythonスクリプトを書いた.

gistfbfa46687de4c6ece190

コメントアウトしてある暗号文はpython -c 'print "A"*28'でshiftcrypt.pyを実行した結果で,これと照らし合わせながら徐々に擦り合わせていく形で作成していった.

EKO{unshifting_the_unshiftable}

感想

簡単なものでしたがcryptoが解けたのが正直嬉しかったです.次回もがんばりたい.