Last active 1 day ago

Revision 1652681bd91b7dff8d8efa0293d92dac91abd259

supabase_enc.py Raw
1import requests
2import random
3import json
4import uuid
5import threading
6import time
7import itertools
8
9SUPABASE_URL = "https://nrkwqjuavktjmfalvigc.supabase.co"
10SUPABASE_KEY = "sb_secret_EpsOv6nTnK-keoSNuvpv5A_PUEt_LUr"
11TABLE_NAME = "levels"
12REST_URL = f"{SUPABASE_URL}/rest/v1/{TABLE_NAME}"
13
14# Разные User-Agent как в реальной игре Unity
15UNITY_UA = [
16 "UnityPlayer/2022.3.15f1 (UnityWebRequest/1.0, libcurl/7.84.0-DEV)",
17 "UnityPlayer/2021.3.33f1 (UnityWebRequest/1.0, libcurl/7.80.0)",
18 "UnityPlayer/2023.2.0f1 (UnityWebRequest/1.0, libcurl/8.0.1)",
19 "UnityPlayer/2022.3.20f1 (UnityWebRequest/1.0, libcurl/7.86.0)",
20 "UnityPlayer/2023.1.10f1 (UnityWebRequest/1.0, libcurl/8.1.2)",
21]
22
23# Реалистичные рефереры
24REFERERS = [
25 "https://game1.example.com/",
26 "https://game23.supabase.app/",
27 "https://level-editor.unity.com/",
28 "https://play.unitycloud.com/",
29 "https://mobile-game.domain/",
30]
31
32def get_random_headers():
33 return {
34 "apikey": SUPABASE_KEY,
35 "Authorization": f"Bearer {SUPABASE_KEY}",
36 "Content-Type": "application/json",
37 "User-Agent": random.choice(UNITY_UA),
38 "Referer": random.choice(REFERERS),
39 "X-Client-Info": f"unity-client/{random.randint(1000, 9999)}",
40 "Origin": "https://unity.com",
41 "Accept": "application/json",
42 "Accept-Encoding": "gzip, deflate, br",
43 "Connection": "keep-alive",
44 "Prefer": "return=minimal"
45 }
46
47def create_level_worker(worker_id):
48 """Один поток — бесконечно создаёт нормальные уровни с маскировкой"""
49 session = requests.Session() # сессия для keep-alive
50 counter = itertools.count(1)
51
52 print(f"[Поток {worker_id}] Запущен")
53
54 while True:
55 try:
56 level_num = next(counter)
57 level_name = f"Level {random.randint(10000, 999999)}"
58 author = f"Player{random.randint(1000, 99999)}"
59 author_id = str(uuid.uuid4())
60 level_id = f"lvl_{random.randint(1000000, 9999999)}_{random.randint(1000, 9999)}"
61
62 level_data = json.dumps({
63 "version": random.randint(1, 3),
64 "name": level_name,
65 "author": author,
66 "objects": [],
67 "triggers": [],
68 "background": random.choice(["default", "space", "forest", "city"]),
69 "music": "none",
70 "gravity": round(random.uniform(0.8, 1.5), 2),
71 "time_limit": random.randint(180, 600)
72 })
73
74 data = {
75 "level_id": level_id,
76 "level_name": level_name,
77 "author": author,
78 "author_id": author_id,
79 "description": f"Уровень #{random.randint(100, 99999)} от игрока",
80 "level_data": level_data,
81 "difficulty": round(random.uniform(1.0, 10.0), 1),
82 "downloads": 0,
83 "likes": 0,
84 "version": random.randint(1, 5)
85 }
86
87 headers = get_random_headers()
88
89 response = session.post(REST_URL, headers=headers, json=data, timeout=20)
90
91 if response.status_code in (201, 200):
92 print(f"[Поток {worker_id}] ✓ Создан уровень #{level_num} | {level_name}")
93 else:
94 print(f"[Поток {worker_id}] ✗ Ошибка {response.status_code} | {level_name}")
95
96 except Exception as e:
97 print(f"[Поток {worker_id}] Исключение: {e}")
98
99 # Лёгкая случайная задержка для большей реалистичности
100 time.sleep(random.uniform(0.3, 1.8))
101
102if __name__ == "__main__":
103 print("Запуск 50 потоков для бесконечного создания уровней...")
104 print("Трафик замаскирован под реальные запросы Unity-клиента\n")
105
106 threads = []
107 for i in range(50):
108 t = threading.Thread(target=create_level_worker, args=(i+1,), daemon=True)
109 t.start()
110 threads.append(t)
111 time.sleep(0.05) # лёгкий старт
112
113 # Держим главный поток живым
114 try:
115 while True:
116 time.sleep(1)
117 except KeyboardInterrupt:
118 print("\nОстановка скрипта...")