akictf #2 cheap cipher
問題
http://ctf.katsudon.org/problem/2
考えたこと
今回も"=="があったので、base64であるという予想は立てた。しかし前回と違い先頭にあるので、なんやこれってなったけど、単純に前後入れ替えたらさっきと一緒じゃね?って思い、後ろから変換していったらちゃんとフラグが出てきた。
おまけというかついで
base64は、PythonやPHPなどでは組み込みとして使えるが、前回の問題や今回みたいにそれをするだけならいちいちコードを書く必要はない気がする(後ろから変換するというのはPythonのスライスを使えば楽だろって言われたら確かにそうなんだけど)。前回はターミナル上でもデコードできるということを書いたので、今回は必要になったrevコマンドについて少し書こうと思う。
revコマンドは名前の通り、入力した文字列、あるいは指定したファイルの行の文字列を逆にして出力するコマンドである。それ以上の何物でもないので、オプションもクソもない。これを使えば後ろから変換するとかしなくてもパイプライン処理ですぐ終わったのだが、私がこれを知らなかっただけである。またひとつ勉強になった。
ksnctf #2 EasyCipher
問題
http://ksnctf.sweetduet.info/problem/2
考えたこと
cipherと言う単語は、暗号という意味で直訳すると簡単な暗号という意味になる。なので、何か文章を表しているだろうなという予想はついた。4単語目にnが一文字だけ出てくるので、これは"I"か"a"という風に予想できる。これが"a"だったら、シーザー暗号という有名な暗号なのでまあそれかなあと思い、以下のページに投げてみたら読める文章になったので、そこの指示通りにしたら通った。
http://lazesoftware.com/tool/strgen/
ついでというかおまけ
ROT13はPythonやPHPに組み込みであるので、それを使えば簡単にコードとして実装できる。私は偶然、秘密の国のアリスという本でそれを読んだことがあったので簡単に解けた。何故シーザー暗号と呼ばれるかというと、昔ローマのカエサル(ジュリアス・シーザー)がこれを用いたからである。
akictf #1 Capture the flag!
問題
http://ctf.katsudon.org/problem/1
考えたこと
最初だから一応単純に貼り付けをしてみたらさすがに違った。まあでも"=="っていうのがあるから、Base64かなとおおよそ予想はついたので、ターミナルで、
echo 'Q1RGCg==' | base64 -D
とデコードし、入力したら通った。
ついでというかおまけ
Base64の具体的な変換手順としては、
まず、元データを6ビットづつに分割する。もし6ビットに足りなければ、0を追加して6ビットにする。次に、各6ビットの値を変換表を使って4文字に変換していく。変換表は、wikipediaなどを参照していただきたい。このとき4文字に満たない場合は、イコールを追加して4文字にする。
といったものである。これによりイコールがあるとBase64かなあという予想を立てている。この技術は電子メールやBasic認証などに用いられている。
ksnctf #1 Test Problem
問題
http://ksnctf.sweetduet.info/problem/1
考えたこと
This is a test problem. Submit the following flag and make sure that you can get points.
とあったので、その通り下に書いてあったフラグを貼りつけただけ。まあ最初なので考えたこともクソもないっちゃない。
ついでというかおまけ
ksnctfの方がakictfとかより簡単というか、ググったらヒントとかが多いので解きやすくて手がつけやすいイメージがある。