Tiefgehende Analyse von Orion: So funktioniert die Discord-Quest-Automatisierung und ein Blick in die Webpack-Interna
Discord versucht schon lange, seinen Client zu mehr als nur einem Messenger zu machen. Vor nicht allzu langer Zeit wurden Quests hinzugefügt. Schau dir einen Stream an, spiele ein Spiel eine halbe Stunde lang, oder scroll durch Werbevideos, und du bekommst dafür Avatar-Frames, Orbs oder Profil-Dekorationen.
Zeit mit einem Spiel zu verbringen, für das man sich überhaupt nicht interessiert, ist höchst fragwürdig. Natürlich hat die Community sofort nach Wegen gesucht, den Client auszutricksen. Das Orion-Projekt vom Entwickler nyxxbit ist wahrscheinlich eines der detailliertesten Beispiele dafür, wie man Discords Webpack-Interna direkt aus der Browser-Konsole reverse-engineeren kann.
Wie Orion unter der Haube funktioniert
Orion gibt es in zwei Formaten: als DevTools-Konsolen-Script und als Vencord-Plugin. Es simuliert das Spielen von Spielen, das Ansehen von Videos und die Aktivität in Sprachkanälen. Und das ganz ohne Installation schwergewichtiger Node.js-Umgebungen oder externer Emulatoren.
Der interessanteste Teil versteckt sich in der technischen Implementierung. Normalerweise brechen solche Scripts bei jedem Discord-Update. Die Client-Entwickler verschleiern den Build, Funktionsnamen werden zu bedeutungslosen .A, .zP oder _y, was dazu führt, dass hardcodierte Pfade am nächsten Tag nicht mehr funktionieren.
Der Autor von Orion hat einen anderen Ansatz gewählt. Das Script sucht nach internen State-Managern (QuestStore, RunStore, StreamStore) anhand des Konstruktor-Namens — constructor.displayName. Um den Dispatcher zu finden, wird die Objektstruktur geprüft: das Vorhandensein von Subscriptions und der Methode dispatch. Dieser Ansatz übersteht die meisten kleineren Client-Patches, ohne zu brechen.
Fünf Quest-Typen und wie man sie austrickst
Discord hat derzeit fünf Quest-Typen. Orion behandelt jeden mit eigener Logik:
- Video-Quests. Das Script sendet Timestamps
video-progressmit pseudozufälligen Intervallen von 7–9 Sekunden und Bruchteilen von Sekunden. Dies imitiert präzise das Verhalten des Standard-Chromium-Players. - Spielaufgaben. Anstatt ein echtes Spiel zu starten, injiziert Orion einen gefälschten Prozess in
RunStoreund holt sich echte Application-IDs aus der Discord-Registry. - Streams. Das Script patched
StreamStore.getStreamerActiveStreamMetadataund füttert den Client mit synthetischen Broadcast-Metadaten. - Activities. Heartbeats werden an den Sprachkanal gesendet, um die Teilnahme zu simulieren.
- Activity-Errungenschaften (
ACHIEVEMENT_IN_ACTIVITY). Ein einfacher Heartbeat reichte früher aus, aber Discord hat diese Lücke geschlossen. Jetzt fordert das Script ein OAuth2-Token für die Anwendung an, generiert ein Proxy-Ticket, sendet gefalschten Fortschritt an den Serverdiscordsays.comund widerruft sofort die gewährten Berechtigungen.
Browser-Schutz umgehen und lokaler Relay
Bei Activity-Quests stieß der Entwickler auf eine harte Einschränkung. Die Content Security Policy (CSP) im Discord-Client verbietet das Senden direkter fetch an Drittanbieter-Domains wie discordsays.com aus dem Renderer-Kontext.
Um diese Einschränkung in der Konsolen-Version zu umgehen, wurde Orion Relay zum Repository hinzugefügt. Es ist ein winziger lokaler HTTP-Server in PowerShell, buchstäblich nur 100 Zeilen Code. Dem Browser ist es erlaubt, sich mit 127.0.0.1:* zu verbinden, um mit Game-Overlays zu interagieren, also sendet das Userscript die Anfrage an den lokalen Proxy, der sie an Discords Dienste weiterleitet. Wenn du Vencord verwendest, führt das native Modul des Plugins diese Anfrage direkt aus dem Electron-Hauptprozess aus, wo die CSP nicht greift.
Es gibt ein echtes Risiko zu bedenken: Discord überwacht Quest-Automatisierung aktiv und markiert ungewöhnliche Fortschritts-Sende-Muster. Während die schlimmste Konsequenz früher war, einfach keinen Frame oder Skin zu erhalten, erteilt das System jetzt Konto-weite Strikes. Der Autor von Orion warnt explizit ganz am Anfang der README: Die Geschwindigkeit, mit der man Belohnungen erhält, geht mit einem von Null verschiedenen Risiko einher, sein Profil gesperrt zu bekommen.
Vergleich mit Alternativen
Der Orion-Ansatz ist nicht der einzige auf GitHub. Das Projekt markterence/discord-quest-completer ging zum Beispiel den Weg einer nativen Anwendung in Rust und Tauri. Anstatt in Discords Speicher zu injizieren, erstellt es gefälschte ausführbare Dateien im Betriebssystem und täuscht das Prozesserkennungssystem von Windows.
Diese Methode berührt die Dateien oder den Speicher des Clients überhaupt nicht und ist strukturell banresistenter. Aber sie hat Nachteile: Sie funktioniert nur mit normalen Spiel-Quests, ignoriert Videos und Activities, und ist auf Windows beschränkt.
Interface und Benutzerfreundlichkeit
Orion hat ein eingebautes Overlay in purem JS, das mit Discords eigenen nativen CSS-Variablen layoutet ist. Dank dessen passt es sich an jedes Theme an (Light, Dark, AMOLED).
Du kannst Quests nach Belohnungstyp filtern, Auto-Claim deaktivieren (damit du nicht in ein Captcha gerätst) oder die Randomisierung von Verzögerungen zwischen Zyklen konfigurieren, um dich vor Erkennung zu schützen.
Lohnt es sich, es zu versuchen
Orion zu studieren lohnt sich zumindest, um die elegante Arbeit mit Webpack- und Electron-Interna aus einem normalen Userscript zu sehen. Es ist ein großartiges Beispiel für Reverse-Engineering von Client-Web-Anwendungen und das Schreiben von Update-resistentem Code.
Es auf deinem Hauptkonto auszuführen, geschieht vollständig auf eigene Gefahr. Wenn du experimentieren möchtest, ist es besser, das auf einem Wegwerfkonto zu tun.
Ähnliche Projekte