36 lines
915 B
Python
36 lines
915 B
Python
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()
|