Загрузка данных


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()