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