blank page

プログラミングなどについて書きます

高専SECCON2017に参加しました.

こんにちは〜!
高専SECCONに参加したので少し書こうと思います.

参加した経緯

高専プロコンでとてもお世話になった先輩がメンバーが一人足りてないと言っており,人数を埋めるために入ったって感じです.

CTF経験

自分はCTFの経験はほとんどなく競プロを少し触っていたという感じなので,高専SECCONの1週間前くらいからちょびちょびcpawctfなどを触ったくらいでした.

やったこ

自分は,ググるだけ問題と1問だけ2枚の画像のXORを取るみたいな問題をときました.
チームの人は,自分にはわけのわからない問題をぽいぽい解いていて,プロは違うなあ...といった気持ちになっていました.

結果

自分たちのチームは5位で終わりました.

解いた問題

とりあえず,一応自分が解けた問題をぽいっとおいておきます.
Misc(?)のやつは問題の内容を忘れたので,crypto(多分)の2枚の画像のXORを取るやつだけ書いておきます.
(何を解いたかを覚えていない)

問題概要

zipファイルを落としてきて,unzipしてその中にあった2枚の画像のXORを取って優勝
ツールがありそうっちゃありそうですが,そのあたりがわからないのでPython3+pillowを使って書きました.これはとてもやるだけで,実装はすぐに終わりました :smile:

from PIL import Image

def img_pixel(img):
    """ imageのpixelをlistで返してくれる """

    img = Image.open(img)    
    size = img.size

    img_pixels = []
    for x in range(size[0]):
        for y in range(size[1]):
            img_pixels.append(img.getpixel((x,y)))

    return img_pixels

def pic_xor(pic1, pic2):
    """ 2枚のpicのXORを取って,表示する """
    img = Image.open("pic1.png")
    img2 = Image.open("pic2.png")

    size = img.size
    size2 = img2.size
    res = Image.new("RGBA", size)

    i = 0
    for x in range(size[0]):
        for y in range(size[1]):
            r = pic1[i][0] ^ pic2[i][0]
            g = pic1[i][1] ^ pic2[i][1]
            b = pic1[i][2] ^ pic2[i][2]

            res.putpixel((x, y), (r, g, b, 255))
            i += 1

    return res.show()

if __name__ == "__main__":
    pic1 = img_pixel("hoge1.png")
    pic2 = img_pixel("hoge2.png")
    pic_xor(pic1, pic2)

終わり

初めてセキュリティの大会に出て,たくさんの知見が得られたので,これから精進していきたいです.
暗号が結構たのしそうな気がしたので,これからいろいろ実装して学んでいきたいなという気持ちです.
解いた問題がとても少ないので次の機会までいろいろと勉強して,もっと貢献できるようにしていきたいです.(来年も機会があったらお誘いください.それまでにいろいろ勉強してきます.)
では,チームの皆さん,運営の皆さん本当にありがとうございました. :+1: