[ksnctf] Crawling Chaos

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

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

Crawling Chaos

難読化されたJavaScriptに関する問題です。 パスワードを判定していると思われるJavaScriptが  (ᒧᆞωᆞ).ᒧうー=-!!(/ᆞωᆞ/).にゃー といったAAを使って難読化されています。 これを手動で解読するのは面倒ですので FireBugなどのツールを使って解析します。

FireBugのスクリプトタグで表示モードが すべて(= 静的 評価 イベントスクリプト 表示) になっていることを確認し、適当な文字列を 送信 すると

難読化されたコードから生成された本丸のコードが読めるようになります。 これによると入力された文字に対して 文字列の N文字目 が Mの場合 Mの文字コード * N を行って 配列p の内容と一致しているか 調べているので逆に 配列P の数値を 1 ,2 ,3 … で割っていけば 元の文字コードがわかります。

#include <stdio.h>

int main()
{
    int i;
    int p[] = { 70,152,195,284,475,612,791,896,810,
                  850,737,1332,1469,1120,1470,832,1785,
                  2196,1520,1480,1449 };
    for(i=0; i<(sizeof(p)/sizeof(int)); i++)
    {
        putchar(p[i]/(i+1));
    }
    putchar('\n');
    return 0;
}