KSNCTF #.03 Crawling Chaosを解く
問題文の意味が、
這う と 混沌 なので確実に例の這いよる混沌ですね。
(」・ω・)」うー!(/・ω・)/にゃー!
Crawling Chaos
問題にはただ unya.html が鎮座しているだけですね。
開いてみます。
うーん。
なんですかこれは。
フォームと送信ボタンが鎮座しています。
何か送信してみても当然何も起きません。
開発者ツール
htmlの問題と言ったら開発者ツール見ないとだめですよねえ?
ということで見てみた。
うぎゃー!
何じゃこれは!
予想通り例の這いよる混沌でしたね。。
しかし明らかに意味ありげですよね、
scriptの中に書かれているのもイミフ
調べてみた
分からないので
(」・ω・)」うー!(/・ω・)/にゃー!
で調べてみました。
そしたらこんなサイトがっ!!!
難読化だとっ?!
つまりこれはちゃんとしたJava scriptだったんですね、、
だったら実行するしかねえ!
こちらのサイトで実行させてもらいました。
するとある発見が!
$(function(){$("form").submit(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 ;}); });
復号化されましたねえ………で?
いや僕Javascriptとかやったことないんですけど??!!
まあでもpが怪しいですよね。
意味ありげに鎮座してます。
t.charCodeAt
おまえ怪しいぞ!
てことで調べました。
charCodeAt
何か知らんけど文字を65535までの整数で返してくるらしい。
つまりpはもともと文字だったってことですね?!
調べたら、数字から戻すには
String.fromCharCode
を使うらしいです。
何も考えずに組んでみた
なにやら数式とかいろいろ書いていますけど知らん。
これで勝つる!
console.log(String.fromCharCode(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449));
結果
FÃĜǛɤ̗̪͒ˡԴֽѠ־̀۹װ֩
は?
なんで文字化けしてんだよ!
間違い
すみません。
解釈違いでした。
どうやら単なる整数じゃなくてUTF-16らしいです。
もっかいコードよく見てみると、
for(var i=0;i<p.length;i++)if(t.charCodeAt(i)*(i+1)!=p[i])f=false;
iに1足してかけてると思えます。
確かにFだけ普通でしたわ。
除算すればいいんですね。
人力で行きます。
152÷(1+1)=76
195÷(2+1)=65...
やばい絶対あってるけどこうじゃない。
絶対普通にコード書いたほうがいい。
でもかけなあい。
仕方ないです。はい。
すみませんでした。
でも何とか解けましたありがとうございます。