Głęboka analiza Orion: jak działa automatyzacja questów w Discord i zaglądamy w bebechy Webpacka
Discord od dawna próbuje przekształcić swojego klienta w coś więcej niż zwykły komunikator. Niedawno dodano questy. Oglądaj streamy, graj w grę przez pół godziny lub przewijaj filmy promocyjne, a w zamian otrzymasz ramki avatara, Orby lub ozdoby profilu.
Spędzanie czasu na grze, która kompletnie cię nie interesuje, jest co najmniej wątpliwe. Naturalnie, społeczność natychmiast zaczęła szukać sposobów na oszukanie klienta. Projekt Orion od dewelopera nyxxbit jest prawdopodobnie jednym z najbardziej szczegółowych przykładów reverse-engineeringu wewnętrznych mechanizmów Webpacka Discorda bezpośrednio z konsoli przeglądarki.
Jak Orion działa pod maską
Orion występuje w dwóch formatach: skrypt do konsoli DevTools i wtyczka Vencord. Symuluje bycie w grach, oglądanie filmów i aktywność na kanale głosowym. I robi to bez instalowania ciężkich środowisk Node.js czy zewnętrznych emulatorów.
Najciekawsza część kryje się w implementacji technicznej. Zazwyczaj takie skrypty psują się przy każdej aktualizacji Discorda. Deweloperzy klienta zaciemniają build, nazwy funkcji zamieniają się w bez znaczenia .A, .zP lub _y, co powoduje, że ścieżki na twardo w kodzie przestają działać następnego dnia.
Autor Oriona wybrał inne podejście. Skrypt wyszukuje wewnętrzne menedżery stanu (QuestStore, RunStore, StreamStore) po nazwie konstruktora — constructor.displayName. Aby znaleźć Dispatcher, sprawdzana jest struktura obiektu: obecność subskrypcji i metoda dispatch. To podejście przetrwa większość mniejszych patchy klienta bez psucia się.
Pięć typów questów i jak je oszukać
Discord obecnie ma pięć typów questów. Orion obsługuje każdy z nich własną logiką:
- Questy wideo. Skrypt wysyła znaczniki czasu
video-progressz pseudolosowymi interwałami 7–9 sekund i wartościami ułamkowymi sekund. To precyzyjnie naśladuje zachowanie standardowego odtwarzacza Chromium. - Zadania w grach. Zamiast uruchamiać prawdziwą grę, Orion wstrzykuje fałszywy proces do
RunStore, pobierając prawdziwe ID aplikacji z rejestru Discorda. - Streamy. Skrypt patchuje
StreamStore.getStreamerActiveStreamMetadata, dostarczając klientowi syntetyczne metadane transmisji. - Aktywności. Wysyłane są heartbeaty do kanału głosowego, aby symulować uczestnictwo.
- Osiągnięcia aktywności (
ACHIEVEMENT_IN_ACTIVITY). Kiedyś wystarczył prosty heartbeat, ale Discord zamknął tę lukę. Teraz skrypt żąda tokena OAuth2 dla aplikacji, generuje ticket proxy, wysyła fałszywy postęp na serwerdiscordsays.comi natychmiast odwołuje przyznane uprawnienia.
Obejście ochrony przeglądarki i lokalny relay
Przy questach aktywności deweloper natknął się na twardy limit. Content Security Policy (CSP) w kliencie Discord zabrania wysyłania bezpośrednich fetch do domen trzecich, takich jak discordsays.com, z kontekstu renderera.
Aby obejść to ograniczenie w wersji konsolowej, dodano Orion Relay do repozytorium. To malutki lokalny serwer HTTP w PowerShell, dosłownie tylko 100 linii kodu. Przeglądarka może łączyć się z 127.0.0.1:* do interakcji z overlayami gier, więc userscript wysyła żądanie do lokalnego proxy, które przekierowuje je do usług Discorda. Jeśli używasz Vencord, natywny moduł wtyczki wykonuje to żądanie bezpośrednio z głównego procesu Electron, gdzie CSP nie obowiązuje.
Jest realne ryzyko, które należy wziąć pod uwagę: Discord aktywnie monitoruje automatyzację questów i oznacza nietypowe wzorce wysyłania postępu. Podczas gdy najgorsza konsekwencja kiedyś ograniczała się do po prostu niezdobycia ramki czy skina, teraz system wydaje strike na całe konto. Autor Oriona wyraźnie ostrzega o tym na samym początku README: szybkość zdobywania nagród wiąże się z niezerowym ryzykiem zbanowania profilu.
Porównanie z alternatywami
Podejście Oriona nie jest jedynym na GitHub. Na przykład projekt markterence/discord-quest-completer poszedł drogą natywnej aplikacji w Rust i Tauri. Zamiast wstrzykiwać się do pamięci Discorda, tworzy fałszywe pliki wykonywalne w systemie operacyjnym, oszukując mechanizm wykrywania procesów Windows.
Ta metoda w ogóle nie dotyka plików ani pamięci klienta i jest strukturalnie bardziej odporna na bany. Ale ma wady: działa tylko ze standardowymi questami gier, ignorując wideo i aktywności, i działa tylko na Windowsie.
Interfejs i użyteczność
Orion ma wbudowany overlay w czystym JS, stylizowany przy użyciu natywnych zmiennych CSS Discorda. Dzięki temu dostosowuje się do każdego motywu (Light, Dark, AMOLED).
Możesz filtrować questy według typu nagrody, wyłączyć auto-odbieranie (żeby nie wpaść na captchę) lub skonfigurować randomizację opóźnień między cyklami, aby chronić się przed wykryciem.
Czy warto spróbować
Studiowanie Oriona jest warte zachodu przynajmniej po to, by zobaczyć elegancką pracę z bebechami Webpacka i Electrona z zwykłego userscripta. To świetny przykład reverse-engineeringu klientowych aplikacji webowych i pisania kodu odpornego na aktualizacje.
Uruchamianie go na głównym koncie odbywa się całkowicie na własne ryzyko. Jeśli zdecydujesz się eksperymentować, lepiej rób to na jednorazowym koncie.
Powiązane projekty