Ecasdqina's MEMO

-!=x=!-

ゆふふ.

KOSEN セキュリティ・コンテスト 2020 参加記

今年も参加しました。

三位(3510)

rotten3

後輩が解いていたので口出しした(英 alphabet は 26 文字だよ)。

ECCp-20

楕円曲線上の演習問題です。 楕円曲線と点 P, Q が与えられるので 2P と dP = Q となる d を求めればフラグが得られます。 前者は単純に計算し、後者は離散対数問題を解きます(Baby-step Giant-step Algorithm で高速に解ける)。

Find2

bmp ファイルが 10000 個与えられるのでそこからフラグを探すという問題。適当にいくつか覗いてみるとノイズみたいな画像だらけなので、色数が少ないようなファイルを探すとフラグが得らます。

from PIL import Image
import glob


def count_color(file: str) -> int:
    img = Image.open(file)

    st = set()
    (w, h) = img.size
    for i in range(w):
        for j in range(h):
            color = img.getpixel((i, j))
            st.add(color)
    return len(st)


if __name__ == '__main__':
    files = glob.glob("./Find2/*")

    mi = 2 ** 30
    for file in files:
        ret = count_color(file)

        if ret < mi:
            print("{}: {}".format(file, ret))
            mi = ret

足し算しよう

1000~10000 の総和を求める問題。総和を求めます。

熱血計算塾

nc で繋いで eval で計算するやつです。

15game

1 から交互に数を順番に言っていき 15 を言ったほうが負けのゲーム(の一般化)を nc でやる問題。禁止数 b と一度に言える個数 c について常に x % (c + 1) = (b - 1) % (c + 1) となるような x を言ってから相手に渡せば勝てます。