import socket
import json
import re
HOST = 'tasks.duckerz.ru'
PORT = 30009
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10.0)
s.connect((HOST, PORT))
data = b""
try:
while b"Send to Bob:" not in data:
chunk = s.recv(4096)
if not chunk:
break
data += chunk
except socket.timeout:
pass
text = data.decode('utf-8', errors='ignore')
match = re.search(r'\{.*\}', text)
alice = json.loads(match.group())
p = int(alice['p'], 16)
g = int(alice['g'], 16)
A = int(alice['A'], 16)
print(f"[*] p = {p} ({p.bit_length()} бит)")
print(f"[*] g = {g}")
print(f"[*] A = {A}")
# Вычисляем разницу
diff = p - A
print(f"[*] p - A = {diff} ({diff.bit_length()} бит)")
# Переводим в байты и ищем текст
if diff > 0:
b = diff.to_bytes((diff.bit_length() + 7) // 8, 'big')
decoded = b.decode('utf-8', errors='ignore')
printable = ''.join(c if c.isprintable() else '.' for c in decoded)
print(f"[*] p - A как текст: {printable}")
# Проверяем, есть ли там выражение
expr_match = re.search(r'(\d+[\+\-\*\/]\d+)', printable)
if expr_match:
print(f"[+] НАЙДЕНО ВЫРАЖЕНИЕ: {expr_match.group()}")
# Решаем
result = eval(expr_match.group())
print(f"[+] Результат: {result}")
# Отправляем
payload = json.dumps({"answer": result})
s.sendall((payload + "\n").encode())
resp = s.recv(4096).decode('utf-8', errors='ignore')
print(f"[+] Ответ: {resp}")
# Также пробуем A - p
diff2 = A - p
if diff2 > 0:
b2 = diff2.to_bytes((diff2.bit_length() + 7) // 8, 'big')
decoded2 = b2.decode('utf-8', errors='ignore')
printable2 = ''.join(c if c.isprintable() else '.' for c in decoded2)
print(f"[*] A - p как текст: {printable2}")
s.close()