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


import socket
import json
import re
import itertools

HOST = 'tasks.duckerz.ru'
PORT = 30009

def try_send(ans_int, label):
    """Пробует отправить ответ и вернуть реакцию."""
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(5.0)
    try:
        s.connect((HOST, PORT))
        data = b""
        while b"Send to Bob:" not in data:
            chunk = s.recv(4096)
            if not chunk:
                break
            data += chunk
        
        # Пробуем разные ключи JSON
        for key in ['answer', 'result', 'response', 'msg', 'data', 'value', 'number', 'C', 'B']:
            payload = json.dumps({key: ans_int})
            s.sendall((payload + "\n").encode())
            try:
                resp = s.recv(4096).decode('utf-8', errors='ignore').strip()
                if resp and "Connection terminated" not in resp and "Expecting" not in resp:
                    print(f"[+] УСПЕХ! Ключ='{key}', Label='{label}'")
                    print(f"    Ответ: {resp}")
                    return resp
            except:
                pass
    except Exception as e:
        pass
    finally:
        s.close()
    return None

# Основной цикл
print("[*] Начинаем перебор всех операций...")

# Список операций над p, g, A
ops = []

# 1. Простые числа
ops.append(('A', 'A'))
ops.append(('p', 'p'))
ops.append(('g', 'g'))

# 2. Арифметика
ops.append(('A-g', 'A-g'))
ops.append(('A+g', 'A+g'))
ops.append(('A*g', 'A*g'))
ops.append(('A//g', 'A//g'))
ops.append(('A%g', 'A%g'))
ops.append(('A^g', 'A^g'))

ops.append(('p-g', 'p-g'))
ops.append(('p+g', 'p+g'))
ops.append(('p*g', 'p*g'))
ops.append(('p//g', 'p//g'))
ops.append(('p%g', 'p%g'))
ops.append(('p^g', 'p^g'))

ops.append(('p-A', 'p-A'))
ops.append(('p+A', 'p+A'))
ops.append(('p*A', 'p*A'))
ops.append(('p//A', 'p//A'))
ops.append(('p%A', 'p%A'))
ops.append(('p^A', 'p^A'))

# 3. XOR
ops.append(('A^p', 'A^p'))
ops.append(('A^g^p', 'A^g^p'))

# Запускаем
for label, expr in ops:
    print(f"[*] Пробуем: {label}")
    # Получаем свежие p, g, A
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(5.0)
    try:
        s.connect((HOST, PORT))
        data = b""
        while b"Send to Bob:" not in data:
            chunk = s.recv(4096)
            if not chunk:
                break
            data += chunk
        text = data.decode('utf-8', errors='ignore')
        match = re.search(r'\{.*\}', text)
        if not match:
            s.close()
            continue
        alice = json.loads(match.group())
        p = int(alice['p'], 16)
        g = int(alice['g'], 16)
        A = int(alice['A'], 16)
        s.close()
        
        # Вычисляем
        try:
            ans = eval(expr, {'p': p, 'g': g, 'A': A, '^': lambda x, y: x ^ y})
        except:
            continue
        
        # Отправляем
        resp = try_send(ans, label)
        if resp:
            print(f"\n[!!!] ФЛАГ НАЙДЕН: {resp}\n")
            break
    except:
        s.close()
        continue
else:
    print("\n[-] Ничего не сработало.")