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


import socket
import json
import re

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

def try_payload(payload, label):
    """Пробует отправить payload и возвращает ответ или None."""
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.settimeout(2.0)
    try:
        s.connect((HOST, PORT))
        # Получаем данные Алисы
        data = s.recv(4096).decode('utf-8').strip()
        json_match = re.search(r'\{.*\}', data)
        if not json_match:
            return None
        
        alice_data = json.loads(json_match.group())
        p = int(alice_data['p'], 16)
        g = int(alice_data['g'], 16)
        
        # Генерируем свой ключ
        c = 1337
        C = pow(g, c, p)
        
        # Подставляем наше C в шаблон
        final_payload = payload.format(C=C, hex_C=hex(C))
        
        s.sendall((final_payload + "\n").encode())
        
        # Ждем ответ
        response = s.recv(4096).decode('utf-8').strip()
        if response:
            print(f"[+] УСПЕХ с {label}!")
            print(f"    Ответ: {response[:200]}...")
            return response
    except Exception as e:
        pass
    finally:
        s.close()
    return None

def main():
    # Список всех возможных вариантов
    variants = [
        ('{{"B": {C}}}', 'JSON B (dec)'),
        ('{{"B": "{hex_C}"}}', 'JSON B (hex str)'),
        ('{{"pub": {C}}}', 'JSON pub (dec)'),
        ('{{"key": {C}}}', 'JSON key (dec)'),
        ('{{"C": "{C}"}}', 'JSON C (str dec)'),
        ('{{"B": "{C}"}}', 'JSON B (str dec)'),
        ('{C}', 'Raw dec'),
        ('{hex_C}', 'Raw hex'),
        ('{{"A": {C}}}', 'JSON A (dec)'),
        ('{{"p": {C}}}', 'JSON p (dec)'),
        ('{{"g": {C}}}', 'JSON g (dec)'),
        ('{{"public": {C}}}', 'JSON public (dec)'),
    ]
    
    print("[*] Начинаем перебор вариантов отправки...")
    for template, label in variants:
        print(f"[*] Пробуем: {label}")
        resp = try_payload(template, label)
        if resp:
            print(f"\n[!] НАЙДЕН РАБОЧИЙ ФОРМАТ: {label}")
            print(f"[!] Ответ сервера: {resp}")
            break
    else:
        print("\n[-] Ни один вариант не сработал. Возможно, нужен другой подход.")

if __name__ == '__main__':
    main()