BackdoorCTF 2021 Writeup

この大会は2021/12/25 3:00(JST)~2021/12/26 3:00(JST)に開催されました。
今回もチームで参戦。結果は189点で123チーム中40位でした。
自分で解けた問題をWriteupとして書いておきます。

Non Abelian (crypto, misc)

Hの各要素の数はそれほど大きい数にはならない。Pinv * G * Pを算出すると、かなり大きい数になる。境界値を調整して、数値の大小でビットを割り出し、フラグを求める。

#!/usr/bin/env sage
import numpy as np

def check(M):
    for i in range(len(M)):
        for j in range(len(M[0])):
            if abs(M[i][j]) > 2**32:
                return False
    return True

enc = np.load('out.npy', allow_pickle=True)

bits = ''
for i in range(len(enc)):
    if check(enc[i][0]):
        bits += '0'
    else:
        bits += '1'

flag = ''.join([chr(int(bits[i:i+8], 2)) for i in range(0, len(bits), 8)])
print(flag)
flag{s0_muCh_M0re_s7RUC7urE_7h4n_juS7_N0N_48EL14N}

フラグはフラグ文字列のsha256の値をsubmitする必要があるので、その計算をする。

$ echo -n flag{s0_muCh_M0re_s7RUC7urE_7h4n_juS7_N0N_48EL14N} | sha256sum
e5b87114b0a5ce3fea8f4ef9a1b495457e47983ead9a549ef93059753038b688  -
e5b87114b0a5ce3fea8f4ef9a1b495457e47983ead9a549ef93059753038b688