John(筋肉)の備忘録的な何か

備忘録的な何かであり、進捗そのものでもあるよ!!怖い人は見ないで!

今更ながらKosenセキュリティコンテストに参加したよ!

お久しぶりです。最近忙しくてダメだったJohnです。めっちゃ久しぶりの更新。。

今回タイトルの通り、Kosenセキュリティコンテストにチーム「:(){:|:&};:」として参加してきました。write up的なのを書かなくちゃいけないそうですがそこまで問題解けていないのがつらいです。

まず結果。。

f:id:julia-bardera-jb:20171029001125p:plain

やったぜ6位!

完全趣味チームとして参加していた割にはいい感じの結果となりました。

Write up的なの。

全然解いてないのがばれるのが恥ずかしいので、「はぁ、好き。。」ってなった問題を一つ。

Crypto 100 「解凍して解凍せよ」

皆大好き画像処理!というわけで簡単な画像処理です。 今回、画像処理系が全然なかったのが悲しいくらいでした。

以下問題。

f:id:julia-bardera-jb:20171029001727p:plain

問題文は「ファイルからフラグを読み取れ!」。 そしてzipファイルが渡されました。

zipファイルは上げられなかったので、その中身の画像をどうぞ。

masks.png

f:id:julia-bardera-jb:20171029002029p:plain

xor.png

f:id:julia-bardera-jb:20171029002026p:plain

ファイル名がもうあれなので、そんな感じにするべく、わざわざ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

f:id:julia-bardera-jb:20171029002834p:plain

xとy、ミスった。

しかし、ここでJohnはチームメイトのいるやんさんにInkscape使えばと助言されます。

そしてそしてその結果。 f:id:julia-bardera-jb:20171029003401p:plain

Flagは「SCKOSEN{simple_visual_cryptography}」でした。

最後に。

楽しかった! そしてそれ以上にこれ。 f:id:julia-bardera-jb:20171029003814p:plain 明石高専のチームが2トップという瞬間。 うれしかったですね。

校内でもCTFを開こうと色々模索中です。