from pwn import * from math import ceil, sqrt import sys def run(): r = remote("crypto.be.ax", 6000) try: g = int(r.recvline().decode().split(":")[1]) print("g", g) p = int(r.recvline().decode().split(":")[1]) print("p", p) enc = int(r.recvline().decode().split(":")[1]) print("enc", enc) position = 504 top_bits = 0 while True: r.recvuntil("number> ") r.sendline(str(2**position)) h = int(r.recvline().decode()) for i in range(256): if pow(g, (top_bits << 8) | i, p) == h: sys.stdout.write(chr(i)) top_bits = (top_bits << 8) | i position -= 8 break else: raise Exception('char not found') finally: r.close() if __name__ == "__main__": run()