1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[writeup] picoCTF "Bookmarklet"

Posted at

今回の問題

picoCTFより"Bookmarklet"を解いていきます。

実際に解いていく

1. 問題文にあるWebサイトに移動する

Bookmarklet_1.png
うん。ヒントというか答えが書いてますね。
プログラム部分をクリックしてコピーします。

2. [Console]タブでプログラムを実行する

Bookmarklet_2.png
Webインスペクタを開きます。
[Elements]タブから、[Console]タブに移動します。
コピーしたプログラムを貼り付けて、Enterキーで実行!

3. FLAG獲得!

Bookmarklet_3.png
無事にFLAGを獲得することができました!

もう少し考えてみる

すでにFLAGは獲得しましたが、どのような暗号を使っていたかが気になるのでJavaScriptの中身を見ていきます。

1. JavaScriptを見る

        javascript:(function() {
            var encryptedFlag = "àÒÆÞ¦È¬ë٣֖ÓÚåÛÑ¢ÕӖ¡›ÒŤ›í";
            var key = "picoctf";
            var decryptedFlag = "";
            for (var i = 0; i < encryptedFlag.length; i++) {
                decryptedFlag += String.fromCharCode((encryptedFlag.charCodeAt(i) - key.charCodeAt(i % key.length) + 256) % 256);
            }
            alert(decryptedFlag);
        })();

なるほど。すごくシンプルな暗号です。

2. 暗号の解読

暗号を解読していきます。暗号の流れはこんな感じです。

  1. encryptedFlagに"àÒÆÞ¦È¬ë٣֖ÓÚåÛÑ¢ÕӖ¡›ÒŤ›í"という暗号化された文字列があります
  2. keyに"picoctf"という鍵があります
  3. forループで
    ・暗号化された一文字ごとに
    ・(暗号化された文字コード - 鍵の文字コード)/ 256 をして
    ・decryptedFlagに入れる

以上です。上の式では省略していますが、鍵の文字コードに+256されています。おそらく、最後に256で割った時に、負の値になってしまうのを防ぐためです。

まとめ

今回の問題は簡単でした。
暗号に関しても、鍵を使用して各文字の文字コードを変換する簡易的な暗号でした。古典的な暗号化手法(シーザー暗号など)に似ているように思えます。

補足

・今回はBookmarkletを使わずに、コンソールに直接JavaScriptを貼り付けて実行しました。
・Bookmarletとは、ざっくりいうと「ブラウザのブックマークから、JavaScriptを実行する」仕組みです。拡張機能とは異なるので注意してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?