>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
JavaScript

Diepgaande blik op Orion: hoe Discord-questautomatisering werkt en graven in Webpack-internals

Discord probeert al geruime tijd van zijn client meer te maken dan alleen een messenger. Niet zo lang geleden werden quests toegevoegd. Bekijk een stream, speel een halfuur lang een game, of scroll door promotievideo's, en je ontvangt avatarframes, Orbs of profieldecoraties als beloning.

Tijd besteden aan een game waar je nul interesse in hebt is op zijn best twijfelachtig. De community ging dan ook meteen op zoek naar manieren om de client te manipuleren. Het Orion-project van ontwikkelaar nyxxbit is waarschijnlijk een van de meest gedetailleerde voorbeelden van hoe je Discord's Webpack-internals direct vanuit de browserconsole kunt reverse-engineeren.

Hoe Orion onder de motorkap werkt

Orion is beschikbaar in twee formaten: een DevTools-consolescript en een Vencord-plugin. Het simuleert het spelen van games, het bekijken van video's en activiteit in voicekanalen. En dat allemaal zonder zware Node.js-omgevingen of externe emulators te installeren.

Het meest interessante zit verborgen in de technische implementatie. Meestal breken dergelijke scripts bij elke Discord-update. De clientontwikkelaars obfusceren de build, functienamen worden betekenisloze .A, .zP of _y, waardoor hardcoded paden de volgende dag al niet meer werken.

De auteur van Orion koos een andere aanpak. Het script zoekt naar interne statemanagers (QuestStore, RunStore, StreamStore) op constructornaam — constructor.displayName. Om de Dispatcher te vinden wordt de objectstructuur gecontroleerd: de aanwezigheid van subscriptions en de methode dispatch. Deze aanpak overleeft de meeste kleine clientpatches zonder te breken.

Vijf questtypen en hoe ze te manipuleren

Discord heeft momenteel vijf questtypen. Orion verwerkt elk ervan met zijn eigen logica:

  • Videoquests. Het script stuurt timestamps video-progress met pseudo-willekeurige intervallen van 7–9 seconden en fractiesecondewaarden. Dit bootst het gedrag van de standaard Chromium-speler nauwkeurig na.
  • Gametaken. In plaats van een echt spel te starten, injecteert Orion een nepproces in RunStore, waarbij echte applicatie-ID's uit het Discord-register worden gehaald.
  • Streams. Het script patched StreamStore.getStreamerActiveStreamMetadata en voedt de client met synthetische broadcastmetadata.
  • Activiteiten. Heartbeats worden naar het voicekanaal gestuurd om deelname te simuleren.
  • Activiteit-achievements (ACHIEVEMENT_IN_ACTIVITY). Vroeger was een simpele heartbeat voldoende, maar Discord heeft dat lek gedicht. Nu vraagt het script een OAuth2-token aan voor de applicatie, genereert een proxy-ticket, stuurt valse voortgang naar de server discordsays.com en trekt de verleende rechten onmiddellijk in.

Browserbeveiliging omzeilen en lokale relay

Bij activiteitsquests liep de ontwikkelaar tegen een harde beperking aan. Het Content Security Policy (CSP) in de Discord-client verbiedt het verzenden van directe fetch naar third-party domeinen zoals discordsays.com vanuit de renderer-context.

Om deze beperking te omzeilen in de consoleversie werd Orion Relay aan de repository toegevoegd. Het is een kleine lokale HTTP-server in PowerShell, letterlijk maar 100 regels code. De browser mag verbinding maken met 127.0.0.1:* voor interactie met game-overlays, dus het userscript stuurt de aanvraag naar de lokale proxy, die deze doorstuurt naar Discord's services. Als je Vencord gebruikt, maakt de native module van de plugin deze aanvraag rechtstreeks vanuit het Electron main process, waar CSP niet van toepassing is.

Er is een reëel risico om te overwegen: Discord monitort actief questautomatisering en markeert ongebruikelijke patronen bij het verzenden van voortgang. Waar het ergste gevolg vroeger simpelweg was dat je geen frame of skin ontving, geeft het systeem nu accountbrede strikes. De auteur van Orion waarschuwt hier expliciet voor aan het begin van de README: de snelheid waarmee je beloningen ontvangt gaat gepaard met een non-nul risico op een ban van je profiel.

Vergelijking met alternatieven

De Orion-aanpak is niet de enige op GitHub. Het project markterence/discord-quest-completer koos bijvoorbeeld voor de route van een native applicatie in Rust en Tauri. In plaats van in Discord's geheugen te injecteren, creëert het nep-executable bestanden in het besturingssysteem, waardoor Windows' processdetectiesysteem wordt misleid.

Deze methode raakt de bestanden of het geheugen van de client helemaal niet aan en is structureel beter bestand tegen bans. Maar het heeft nadelen: het werkt alleen met reguliere gamequests, negeert video en activiteiten, en werkt alleen op Windows.

Interface en gebruiksgemak

Orion heeft een ingebouwde overlay in pure JS, opgemaakt met Discord's eigen native CSS-variabelen. Hierdoor past het zich aan elke thema aan (Light, Dark, AMOLED).

Je kunt quests filteren op beloningstype, auto-claim uitschakelen (zodat je geen captcha krijgt), of randomisatie van vertragingen tussen cycli configureren als bescherming tegen detectie.

Is het de moeite waard om te proberen

Orion bestuderen is al de moeite waard om de elegante omgang met Webpack en Electron-internals vanuit een gewoon userscript te zien. Het is een geweldig voorbeeld van reverse-engineering van client webapplicaties en het schrijven van updatebestendige code.

Het uitvoeren ervan op je hoofdaccount is volledig op eigen risico. Als je besluit te experimenteren, kun je dit beter doen op een wegwerpacccount.

Gerelateerde projecten