1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| from pwn import * from Crypto.Util.number import long_to_bytes
io = remote("node1.anna.nssctf.cn", 28041)
for i in range(666): lines = io.recvuntil("Pl Give Me flaag :").decode().split('\n') if i < 2: n=int(lines[12].split('=')[1]) e1=int(lines[13].split('=')[1]) e2=int(lines[14].split('=')[1]) c1=int(lines[15].split('=')[1]) c2=int(lines[16].split('=')[1]) elif i >=2: n=int(lines[13].split('=')[1]) e1=int(lines[14].split('=')[1]) e2=int(lines[15].split('=')[1]) c1=int(lines[16].split('=')[1]) c2=int(lines[17].split('=')[1])
def extended_gcd(a, b): if a == 0: return b, 0, 1 else: g, x, y = extended_gcd(b % a, a) return g, y - (b // a) * x, x
g, b1, b2 = extended_gcd(e1, e2)
if g != 1: raise ValueError("e1 and e2 are not coprime")
m = pow(c1, b1, n) * pow(c2, b2, n) % n
flag = long_to_bytes(m) io.sendline(flag.decode("utf-8")) print(f"count{i}") io.recvuntil("You get flag!") print(io.recvlines(2))
|