yoshikingのがんばる日記

あたまよくないけどがんばります

InnoCTF International 2019 Writeup

 7月13~14日にInnoCTFが開かれていたので、zer0ptsとして参加しました. チームとしては、(多分)9位でした. 終了後スコアサーバーがすぐ落ちたので(は???)、昼頃に見たときの順位です. 僕はwelcom問題含む3問を解きました. 今回Cryptoはguessingばかりだったので、つらかったです.

チームメンバーのWriteup

st98: InnoCTF International 2019 の write-up - st98 の日記帳

[Crypto] One Hundred Time RSA

 nとcが渡されます. 情報はこれだけで、ソースコードはないです.

 nが大きくないので、簡単に素因数分解できます. これでpとqが手に入ったのですが、eがわかりません. 0x10001や3、100(問題名から)を試してもうまくいきません.

 ここで一旦ロシア人になると、eを総当たりしつつ、100回復号を繰り返すという発想に至ります. たしかeが34800とかだった気がします. 結構時間がかかりました.

from Crypto.Util.number import inverse
from binascii import unhexlify

p = 37975227936943673922808872755445627854565536638199
q = 40094690950920881030683735292761468389214899724061
n = p*q
phi = (p-1) * (q-1)

e = 1
while True:
    c = 594147643758126272722748149715320287571901225730250492908477114410071694555274921111773337859009576
    if e % 100 == 0:
        print("[+] now public exponents is :", e)
    d = inverse(e, phi)
    e += 1
    for i in range(100):
        c = pow(c, d, n)
        try:
            m = unhexlify(hex(c)[2:])
            if b"InnoCTF" in m:
                print(m)
        except:
            pass

InnoCTF{cr4ck_rs4_4g41n_7bca}

[Crypto] RF

 暗号文I3_naseincamno_r15Ct_t0T07_}Fnhs{1が渡されます.

 たしか、問題文が「フェンスの上で見つけた」みたいな感じでした. フラグのフォーマットや問題文から推測するに、Rail fence cipherですね. 適当なソルバーに投げてやると、見つかります.

InnoCTF{n0t_ca3sar_7h1s_t1me_in50}

 keyは8でした.

さいごに

 えっっ、guessing過ぎません!? Cryptoはたいていの問題みたんですけど、guessing祭りでした.

 チームメンバー各位お疲れ様でした.