Approfondimento su Orion: Come Funziona l'Automazione delle Quest di Discord e Analisi degli Internals di Webpack
Discord sta cercando da tempo di trasformare il suo client in qualcosa di più di un semplice messenger. Non molto tempo fa sono state aggiunte le quest. Guarda uno stream, gioca a un gioco per mezz'ora, o scorri tra i video promozionali, e ottieni avatar frame, Orbs o decorazioni per il profilo in cambio.
Dedicare tempo a un gioco che non ti interessa è quantomeno discutibile. Naturalmente, la community si è subito attivata per trovare modi per aggirare il client. Il progetto Orion dello sviluppatore nyxxbit è probabilmente uno degli esempi più dettagliati di come eseguire il reverse-engineering degli internals di Webpack di Discord direttamente dalla console del browser.
Come Funziona Orion Sotto il Cofano
Orion è disponibile in due formati: uno script per la console DevTools e un plugin per Vencord. Simula la partecipazione a giochi, la visione di video e l'attività nei canali vocali. E tutto questo senza installare ambienti Node.js pesanti o emulatori esterni.
La parte più interessante è nascosta nell'implementazione tecnica. Di solito, questi script si rompono con ogni aggiornamento di Discord. Gli sviluppatori del client offuscano il build, i nomi delle funzioni diventano .A, .zP o _y senza senso, il che fa sì che i percorsi hardcoded smettano di funzionare il giorno stesso.
L'autore di Orion ha adottato un approccio diverso. Lo script cerca i gestori di stato interni (QuestStore, RunStore, StreamStore) tramite il nome del costruttore — constructor.displayName. Per trovare il Dispatcher, viene verificata la struttura dell'oggetto: la presenza delle sottoscrizioni e il metodo dispatch. Questo approccio sopravvive alla maggior parte delle patch minori del client senza rompersi.
Cinque Tipi di Quest e Come Aggirarle
Attualmente Discord ha cinque tipi di quest. Orion gestisce ciascuna con la propria logica:
- Quest video. Lo script invia timestamp
video-progresscon intervalli pseudocasuali di 7-9 secondi e valori frazionari di secondo. Questo imita precisamente il comportamento del player Chromium standard. - Task di gioco. Invece di lanciare un gioco reale, Orion inietta un processo falso in
RunStore, prelevando gli ID applicazione reali dal registro di Discord. - Stream. Lo script applica una patch a
StreamStore.getStreamerActiveStreamMetadata, fornendo al client metadati di trasmissione sintetici. - Attività. Gli heartbeat vengono inviati al canale vocale per simulare la partecipazione.
- Achievement delle attività (
ACHIEVEMENT_IN_ACTIVITY). Prima era sufficiente un semplice heartbeat, ma Discord ha chiuso quella falla. Ora lo script richiede un token OAuth2 per l'applicazione, genera un proxy ticket, invia progressi falsi al serverdiscordsays.come revoca immediatamente i permessi concessi.
Bypassare la Protezione del Browser e Relay Locale
Con le quest di attività, lo sviluppatore si è imbattuto in una forte limitazione. La Content Security Policy (CSP) nel client Discord impedisce l'invio diretto di fetch a domini di terze parti come discordsays.com dal contesto del renderer.
Per aggirare questa limitazione nella versione console, è stato aggiunto Orion Relay al repository. È un piccolo server HTTP locale in PowerShell, letteralmente solo 100 righe di codice. Al browser è permesso connettersi a 127.0.0.1:* per interagire con gli overlay dei giochi, quindi lo userscript invia la richiesta al proxy locale, che la inoltra ai servizi di Discord. Se stai usando Vencord, il modulo nativo del plugin effettua questa richiesta direttamente dal processo principale di Electron, dove la CSP non si applica.
C'è un rischio reale da considerare: Discord monitora attivamente l'automazione delle quest e segnala pattern insoliti nell'invio dei progressi. Mentre la peggiore conseguenza in passato era semplicemente non ricevere un frame o una skin, ora il sistema emette strike a livello dell'intero account. L'autore di Orion avverte esplicitamente di questo all'inizio del README: la velocità con cui si ottengono i reward comporta un rischio non nullo di ban del profilo.
Confronto con le Alternative
L'approccio di Orion non è l'unico su GitHub. Ad esempio, il progetto markterence/discord-quest-completer ha optato per un'applicazione nativa in Rust e Tauri. Invece di iniettarsi nella memoria di Discord, crea falsi eseguibili nel sistema operativo, ingannando il sistema di rilevamento dei processi di Windows.
Questo metodo non tocca i file o la memoria del client e è strutturalmente più resistente ai ban. Ma ha degli svantaggi: funziona solo con le quest di gioco normali, ignorando video e attività, ed è disponibile solo per Windows.
Interfaccia e Usabilità
Orion ha un overlay integrato in puro JS, impaginato usando le variabili CSS native di Discord. Grazie a questo, si adatta a qualsiasi tema (Light, Dark, AMOLED).
Puoi filtrare le quest per tipo di reward, disabilitare il claim automatico (così non attivi un captcha) o configurare la randomizzazione dei ritardi tra i cicli per proteggerti dal rilevamento.
Vale la Pena Provare
Studiare Orion vale la pena almeno per vedere l'elegante lavoro con gli internals di Webpack ed Electron da un semplice userscript. È un ottimo esempio di reverse-engineering di applicazioni web lato client e di scrittura di codice resistente agli aggiornamenti.
Eseguirelo sul tuo account principale è interamente a tuo rischio. Se decidi di sperimentare, è meglio farlo su un account usa e getta.
Progetti correlati