freeCodeCampからpicoCTF。ちょっとは進んでる?
みなさまこんにちは。はてな46本目の記事になります。
前回のつづきから
前回記載したのは、「freeCodeCampからpicoCTFのはじめの一歩!」という記事でした。
無謀にも入門をしたので、せっかくなので続けなければ意味がない。 締め切り駆動で進めるのが良さそうと思い、進捗報告として12/21のカレンダーに参加しようとしたのですが、全く何もできなかった...。
これではいけないので、「簡単でも、1つでも進めたら報告を書こう!」と思って、この記事を書いています。
Crypto Warmup をやってみよう!
前回力尽きたところから再開です。 動画では21分30秒くらいのところから。でも、一回見ただけでは良くわからない....。
ちなみに、動画の中で「Crypto
のところが Crpyto
になってるよ!w」 と笑っていたのですが、今もそのままのようです。1
実直な解き方
ひとまず心を込めて解読してみます。
ああもうここからわからない!!(まだウォームアップなんですが!) カエサル暗号的に、文字をずらしていくものらしいです。
Crpyto can often be done by hand, here's a message you got from a friend, llkjmlmpadkkc with the key of thisisalilkey. Can you use this table to solve it?.
暗号ってものは、だいたい手間かけて解くものです。お友達からのメッセージ、llkjmlmpadkkcは、暗号になっていて、メッセージの鍵はthisisalilkeyです。この解読表を使って解いてくださいね!
1回目動画を見て、わからないけど、とにかく解読用のサイトにコピペで解決という方法もあり、まあなんでも良さそうです。 改めて、時間を置いて自分で解読しようと思って、以下の方法でまず地道に。
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +---------------------------------------------------- A | A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B | B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C | C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D | D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E | E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F | F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G | G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H | H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I | I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J | J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K | K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L | L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M | M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N | N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O | O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P | P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q | Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R | R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S | S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T | T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U | U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V | V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W | W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X | X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y | Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z | Z A B C D E F G H I J K L M N O P Q R S T U V W X Y
上記の暗号表、llkjmlmpadkkc
と thisisalilkey
を使って解読してみます。
llkjmlmpadkkc
xthisisalilkey
まずは、横にllkjmlmpadkkc
、lで始まる行から、tが見つかったら、一番左の文字をとる。 次はlで始まる行から、hが見つかったら、一番左の文字をとる。 この繰り返し。
Iwy.... と続きますが、どうやら単語になっていなさそう。これは違うかも?
thisisalilkey
xllkjmlmpadkkc
]
つぎは照らし合わせる順番を変えてみます。
- thisisalilkey (横)
- llkjmlmpadkkc (縦)
SECRET .... なんだか文字になりそうだ!
thisisalilkey llkjmlmpadkkc SECRETMESSAGE => Secret Message!
こんな感じで地味に付き合わせて行くと、SECRETMESSAGE
になりました。
結果(flag)は、解読した単語を大文字で記載してね、とありましたので、答えは以下の通り。
picoCTF{SECRETMESSAGE}
これでSubmitで、やっとSolvedになりました!
動画の解説
さて、「心を込めて解読していく」のは手間がかかるし..ということで、いろいろな資料が出てきます。
この暗号解読用のテーブルは、Vigenère table もしくはVigenère squareと言うそうです。
Vigenère squareと言うものらしいとわかると、次はオンラインで公開されている便利なツール検索へ。
Vigenère Cypher decoder
というキーワドで検索して、ずばりそんなサイト がありました。
使えるものは使っちゃおう、と言うノリで、この変換ツールでの変換でも良さそうです。
動画の中では、このサイトを使うだけでなく、オンラインでの情報をもとに良い手さそうでした!
また、さらに、この暗号表のルールから、Pythonでプログラム作成して、そこからデータを「を取り上げていました! このソースコードは見つけていないのですが、冬休みの課題にでもスクリプトを組んでみたい...。
Crypto Warmup 2
次も暗号の問題へ。
Cryptography doesn't have to be complicated, have you ever heard of something called rot13? cvpbPGS{guvf_vf_pelcgb!}
rot13を使って解いてみよう!とのこと
このパターンでも、検索してヒットしたものを使って良さそうです。
ROT13 ("rotate by 13 places", sometimes hyphenated ROT-13) is a simple letter substitution cipher that replaces a letter with the 13th letter after it in the alphabet. ROT13 is a special case of the Caesar cipher which was developed in ancient Rome.
ROT13は、アルファベットの文字を13列後方にずらして暗号を作るという、シンプルな暗号暗号です。
これはfreeCodeCampでもやったぞ!
13文字ずつ後方にずらす...。
「カエサル暗号」というのは、freeCodeCampのJavaScript アルゴリズムの単元で出てきました!2
せっかくなので、その時組んだJavaScriptを使って、うまく変換ができるか試してみます。
どうやら、答えは picoCTF{this_is_crypto!}
のようですね!
解答もうまく行きました! でも、ちょっと実装が良くない...。(このスクリプトは全角に変換する前提だったので)
picoCTFのShellも使ってみます
picoCTFには、シェルの実行環境があるので、そちらにログインをして解いてみます。 ROT13のWikipedia に、コマンドやPythonでの実装例が書かれてあったので、それで試してみます。
以下は、trコマンドを使った解答です。(tr - translate or delete characters)
バッチリですね!そして自分の過去の実装が恥ずかしい....。 せっかくなので、これも冬休みの宿題にでもします....。
とりあえず2回目はここまで.....
ほんの少ししか進みませんでしたが、やはりプログラムを使って解くのはアルゴリズムの勉強になりそうですね...。これは飯のタネになりそうだ!
週末くらいになりそうですが、アドベントカレンダー終了後でも、もう一回くらい記事を上げてみようと思います。