くれなゐの雑記

例を上げて 自分で手を動かして学習できる入門記事を多めに書いています

TSG CTF 2020 write up

TSGCTF 2020 writeup

youtu.be


f:id:kurenaif:20200712190800p:plain

# Beginner's Crypto

https://youtu.be/V-snPSCGyvQ


2<<10000 と 10^120のあまりがあたえられるのと同値なので、中国剰余定理を使う

# print(chineseRem(2,3,3,5))

N = len('1002773875431658367671665822006771085816631054109509173556585546508965236428620487083647585179992085437922318783218149808537210712780660412301729655917441546549321914516504576')
num = 1002773875431658367671665822006771085816631054109509173556585546508965236428620487083647585179992085437922318783218149808537210712780660412301729655917441546549321914516504576
# print(chineseRem(num, 10**N, 0, 2**10000)[1])
from Crypto.Util.number import *
print(long_to_bytes(chineseRem(num, 10**N, 0, 2**10000)[0] // 2**10000))
# 2**10000

# Beginner's misc

https://youtu.be/V-snPSCGyvQ?t=891


めちゃめちゃ頑張って分数を合わせる

import math

# 0x777f: 552/
# 0x777e: 552+
# 0x7774: 5520

cnt = 0
out = ""
i = 0
num = 552/5520
tar = -1
for i in range(5000):
    temp_num = 0
    if tar == -1:
        temp = "462/"
        out_temp = chr(0x3b7f)
        for _ in range(cnt):
            temp += "462/"
            out_temp += chr(0x3b7f)
        temp += "462"
        out_temp += chr(0x3b7e)
        temp_num = eval(temp)

    print(num+temp_num)
    print(math.pi)
    if num + temp_num == math.pi:
        break
    if num+temp_num <= math.pi:
        out += out_temp
        num += temp_num
    else:
        tar = -1
        cnt += 1
    print(i, ':', math.pi-num)


f = False
for i in range(50):
    temp = 442/476347634763476347
    if num + temp <= math.pi:
        if f:
            out += chr(0x3fbf) + chr(0x3f75) + chr(0x3f75) + chr(0x3f75) + chr(0x3f75) + chr(0x3f75) + chr(0x3f75) + chr(0x3f75) + chr(0x3f7e)
        f = True
        num += temp
        out += chr(0x337f) + chr(0x3fb7) + chr(0x3fb7) + chr(0x3fb7) + chr(0x3fb7) + chr(0x3ff5)
    else:
        break
    print(math.pi)
    print(num)

num+=1666/6666666666666666666
out += chr(0xbbbf) + chr(0xbbba) + chr(0xbbba) + chr(0xbbba) + chr(0xbbba) + chr(0xbbbe)

print(num == math.pi)

with open("out.txt", "w") as f:
    f.write(out + chr(0x777f) + chr(0x7774)  + '\n')