はじめに
順当に3つ目に挑戦。
1時間程度で解けた。。もう少し早く解けたかもしれない。
問題
https://ksnctf.sweetduet.info/problem/3
問題はこれだけ。
解き方
まずChromeでソースコードを見てみる。
するとScriptタグの中ににゃーにゃー言っている謎の長文を発見。
よくよく見るとカンマなどがあるので、もしかして難読化されているJSか何かではないかと推察。
その部分だけ切り出して見ると、末尾に関数「Function」があるのが確認できる。
それを取り出したのが以下。
var t = $('input[type="text"]').val();var p = Array(70, 152, 195, 284, 475, 612, 791, 896, 810, 850, 737, 1332, 1469, 1120, 1470, 832, 1785, 2196, 1520, 1480, 1449);var f = false;if (p.length == t.length) {f = true;for (var i = 0; i < p.length; i++)if (t.charCodeAt(i) * (i + 1) != p[i]) f = false;if (f) alert("(」・ω・)」うー!(/・ω・)/にゃー!");}if (!f) alert("No");return false;});});
どうやら9行目が鍵となりそう。
tで入力された文字列のn文字目がp配列のn+1個目とかけ合わせた値が等しければOK
つまり、p配列をそれぞれ、配列番号で割ってあげればいいということになる。
ネットを見るとコーディングしている方もいたが、自分にはそんな能力がないので安定のGoogleスプレッドシート。
A列にはp配列を格納、B列には行番号で割った物(B2セルは=A2/ROW())が入っている。すると、C列に結果が表示された。
これが答えのようだ。
解説
Javascriptはよく難読化されているが、ここまで気持ち悪いセンスあるのははじめてでした笑
おすすめ
この本はみんな使っているかと思います
コメント
コメントを投稿