今更ながらKosenセキュリティコンテストに参加したよ!
お久しぶりです。最近忙しくてダメだったJohnです。めっちゃ久しぶりの更新。。
今回タイトルの通り、Kosenセキュリティコンテストにチーム「:(){:|:&};:」として参加してきました。write up的なのを書かなくちゃいけないそうですがそこまで問題解けていないのがつらいです。
まず結果。。
やったぜ6位!
完全趣味チームとして参加していた割にはいい感じの結果となりました。
Write up的なの。
全然解いてないのがばれるのが恥ずかしいので、「はぁ、好き。。」ってなった問題を一つ。
Crypto 100 「解凍して解凍せよ」
皆大好き画像処理!というわけで簡単な画像処理です。 今回、画像処理系が全然なかったのが悲しいくらいでした。
以下問題。
問題文は「ファイルからフラグを読み取れ!」。 そしてzipファイルが渡されました。
zipファイルは上げられなかったので、その中身の画像をどうぞ。
masks.png
xor.png
ファイル名がもうあれなので、そんな感じにするべく、わざわざPythonを書きました。
# coding:utf-8 from PIL import Image, ImageDraw import numpy as np image1 = Image.open("./xor.png", "r") image2 = Image.open("./masks.png", "r") x_range = image1.convert("RGB").size[0] y_range = image1.convert("RGB").size[1] target = Image.new("RGB", ((x_range, y_range)), (255, 255, 255)) white_canvas = ImageDraw.Draw(target) np_image1 = np.array(image1) np_image2 = np.array(image2) y = 0 while y < y_range: x = 0 while x < x_range: if np_image1[x][y][0] == np_image2[x][y][0]: white_canvas.point((x, y), (0, 255, 255)) else: white_canvas.point((x, y), (np_image1[x][y][0], np_image1[x][y][1], np_image1[x][y][2])) x += 1 y += 1 target.save("./ans.png", "PNG", quality=100, optimize=True)
必死だったので綺麗さとか求められなかった。 訳すると、画像をXORして、True?まぁ、1を返したところだけシアンブルーにするというプログラム。
結果がこれ。
ans.png
xとy、ミスった。
しかし、ここでJohnはチームメイトのいるやんさんにInkscape使えばと助言されます。
そしてそしてその結果。
Flagは「SCKOSEN{simple_visual_cryptography}」でした。
最後に。
楽しかった! そしてそれ以上にこれ。 明石高専のチームが2トップという瞬間。 うれしかったですね。
校内でもCTFを開こうと色々模索中です。