[ksnctf] Programming

ksnctfにチャレンジ
第7問目です。

※ksnctfは常駐型のCTFサイトです。
※問題のページはコチラです。

Programming

一見C++に見えるかなりおかしなインデントのソースコードが渡されます。
これを indent コマンドで整形して眺めたり
実際に実行してみても全く意味のあるコードになりません。

となるとこのおかしなインデントに意味があるはずですが、
 スペース と タブ がランダムに挿入されています
ここで whiitespaceという難解プログラミング言語を思いつくか
どうかが鍵です。

Brainfuck やその派生言語はよく見かけますが
難解プログラミングなど検索したことがあれば
難解プログラミング言語のなかではメジャーなので(?)
結構趣味で処理系を公開している人もいたりいなかったり
します。

>参考 whitespace

知っていた中ではこの処理系が使いやすいので
これを使います。

まず、どんなプログラムか

$ ./whitespace.out -m program.cpp

これでニーモニックが見れます。

まぁじっくり読まなくても

STACK_PUSH X
IO_PUT_CHAR

この部分は ASCII文字の出力しているのは一目瞭然
なので出力されるはずの文字が分かるのですが一応ちゃんとやります

0035: IO_READ_NUM
0036: STACK_PUSH 0
0041: HEAP_LOAD
0042: STACK_PUSH 33355524
0047: ARITH_SUB
0048: FLOW_BEZ 66

ここがポイントです。
入力された数値と 33355524 の差をとって
0なら 0+066 にジャンプしています。

つまりこのコードは
PIN: と表示して 33355524 と入力されたら FLAGを表示
それ以外なら NO と表示して終了 する
というプログラムのようです。

というわけで

これで無事FLAGが取得できます。

コメントする