TSG CTF 2020 write up
TSGCTF 2020 writeup
# Beginner's Crypto
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')