410.coffee

まじめにふざける。

KSNCTF #.03 Crawling Chaosを解く

問題文の意味が、

這う と 混沌 なので確実に例の這いよる混沌ですね。

(」・ω・)」うー!(/・ω・)/にゃー!

Crawling Chaos

問題にはただ unya.html が鎮座しているだけですね。

開いてみます。

うーん。

なんですかこれは。

フォームと送信ボタンが鎮座しています。

何か送信してみても当然何も起きません。

開発者ツール

htmlの問題と言ったら開発者ツール見ないとだめですよねえ?

ということで見てみた。

うぎゃー!

何じゃこれは!

予想通り例の這いよる混沌でしたね。。

しかし明らかに意味ありげですよね、

scriptの中に書かれているのもイミフ

調べてみた

分からないので

(」・ω・)」うー!(/・ω・)/にゃー!

で調べてみました。

そしたらこんなサイトがっ!!!

sanya.sweetduet.info

難読化だとっ?!

つまりこれはちゃんとしたJava scriptだったんですね、、

だったら実行するしかねえ!

こちらのサイトで実行させてもらいました。

paiza.io

するとある発見が!

$(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...

やばい絶対あってるけどこうじゃない。

絶対普通にコード書いたほうがいい。

でもかけなあい。

仕方ないです。はい。

すみませんでした。

でも何とか解けましたありがとうございます。