Wie kann ich Multiplayer-Cloaking mit Grafiken implementieren, die clientseitigem Hacking widerstehen?


19

Ich habe darüber nachgedacht, Stealth in einem Multiplayer-Spiel zu implementieren. Es ist ein Spiel im MOBA-Stil, denken Sie also an League of Legends (LoL) und Heroes of the Storm (HotS). Mehrere Clients stellen eine Verbindung zu einem einzelnen Server her, der den Spielstatus an alle Clients überträgt. Clients senden ihre Eingabedaten an den Server, der sie möglicherweise ablehnt, wenn sie auf ungültige Befehle stoßen, wodurch Betrug (theoretisch) unmöglich wird.

Nun, ich erwähne diese Spiele absichtlich, weil beide Stealth unterschiedlich implementiert haben. LoL hat Stealth mit zwei möglichen Zuständen: Sie sind entweder vollständig sichtbar oder vollständig unsichtbar. HotS hingegen implementiert Stealth auf eine Weise, die Sie an einem Schimmer in der Luft erkennen können:

Helden der Unsichtbarkeit des Sturms

Ich denke, dies ist ein ordentlicher Mechaniker, da er die Aufmerksamkeit auf Ihre Umgebung fördert / belohnt. Da es sich jedoch um ein Multiplayer-Spiel handelt, wurde mir klar, dass sich dies als leicht ausnutzbar erweisen könnte.

Wenn Sie Stealth auf 'die LoL'-Art implementieren, können Sie einfach das Senden von Spielerkoordinaten an die anderen Clients beenden. Wenn der Charakter des Spielers Stealth bricht, kann der Server den Standort erneut übertragen. Beim HotS-Modell ist jedoch ein Schimmer in der Luft zu sehen, in der sich die Figur bewegt. Dies bedeutet, dass der Server den Standort des Players an die anderen Clients senden muss. Das bedeutet, dass Spieler, die die Textur oder das Modell oder sogar den Spielcode selbst ändern, die Umhangmechanik unbrauchbar machen können. Hier ist ein Thread auf den HotS-Boards darüber.

Meine Frage ist, ob es eine Möglichkeit gibt , das Cloaking (mit einem Schimmer à la HotS) zu implementieren, ohne das Problem zu haben, dass geschickte Spieler das Spiel (die Daten) modifizieren und das System schlagen können. Ist das möglich und wenn nicht, wie gehen andere Multiplayer-Spiele mit diesem Mechanismus damit um? Ist nur der LoL-Stil der Unsichtbarkeit nicht zu übertreffen?

Ich habe darüber nachgedacht, dass der Server von Zeit zu Zeit falsche "Umhang" -Standorte sendet, aber das schadet auch fairen Spielern, die nur aufpassen, und das geht nicht.


Verwandte ist Link , aber ich frage nicht nach Stößen gegen andere (die vom Server gehandhabt werden können), sondern zeigt getarnte Einheiten an.
Unterschreitung

Dies ist ein schlechter Vorschlag, aber Sie können das gesamte grafische Rendering auf dem Server ausführen und dann den Bildschirm jedes Spielers an seine Clients senden. Sie senden nur Eingaben, Sie senden nur Ausgaben. Der Client ist eine dünne Shell, die einfach das Video anzeigt und das Audio wiedergibt.
user137

Philipp hat da eine sehr gute Idee. Ich möchte hinzufügen, dass Sie immer noch die Begrenzungsrahmen und deren Schnittmenge mit Skillshots usw. kennen müssen. Wenn Sie Begrenzungsrahmen senden, kann ein intelligenter Codierer rückentwickeln, welcher Charakter unsichtbar ist (wenn es verschiedene Helden gibt). Wenn Sie Effekte haben, die bei einem Treffer ausgelöst werden, müssen Sie so etwas wie die Box oder zumindest Position und Skalierung des Effekts senden. Seien Sie sich bewusst, dass alles abstrakter ist
Greaka

Sie können LoL-artiges Cloaking nicht implementieren, indem Sie keine Spielerkoordinaten mehr senden. Auch wenn die Charaktere nicht gezeichnet werden, müssen sie in der Lage sein, auf andere Weise mit der Karte (und anderen Spielern) zu interagieren. Durch das Implementieren von "erkennbaren" Täuschungen (Fußabdrücke, Schimmer usw.) entfällt jedoch ein Großteil des Anreizes, das Spiel zu modifizieren: Sie lernen, wie Sie getarnte Charaktere erkennen und weitermachen.
The Spooniest

2
@TheSpooniest: Können Sie erklären, was Sie damit meinen ? Sie können LoL- artiges Cloaking nicht implementieren , indem Sie keine Spielerkoordinaten mehr senden ? Wenn Spieler A unsichtbar ist und der Server die Koordinaten nicht mehr an Spieler B und C sendet, kann der Server dennoch z. B. eine Kollision zwischen Spieler A und B behandeln, indem er sich weigert, Bs Charakter auf A zu legen (als wären sie gegangen) in eine Wand). Wenn A (immer noch unsichtbar) einen Skill auf B abfeuert, kann der Server einfach "Skill abgefeuert von Position x, y in Richtung d von A" an B und C senden .
Unterlauf

Antworten:


20

Sie können einen Schimmer-Effekt nicht implementieren, ohne ihn einfach auszunutzen. Aber was wäre, wenn Sie auf indirekte Weise zeigen würden, dass jemand in der Nähe ist? Ein Mittel, das auch für sichtbare Spieler gilt?

Was passiert zum Beispiel, wenn Spieler Fußspuren hinterlassen und "Fußspuren" -Nachrichten unabhängig vom Standort des Spielers vom Server gesendet werden? Jeder Spieler hinterlässt Fußabdrücke, sodass Sie das Fußabdruckmodell nicht sichtbarer machen können, ohne die Arena in ihnen abzudecken und jeden einzelnen Abdruck weniger auffällig zu machen. Wenn ein Spieler jedoch einen Fußabdruck ohne sichtbaren Charakter sieht, weiß er, dass jemand da ist.

Sie können auch Dinge tun, wie z. B. kleine Steine, die herumgeschlagen werden, Gras rascheln, wenn jemand durch das Wasser läuft, oder Wellen, die auftreten, wenn sich jemand durch das Wasser bewegt. Wenn "Zeichen" nur für bestimmte Orte oder Materialien gelten, kann dies zu einer zusätzlichen Strategie führen, die unsichtbare Charaktere dazu zwingt, sich vorsichtig zu bewegen und Dinge zu vermeiden, die ihre Position verraten.


without making it easy to exploit-> Dies gilt für alle Spielmechaniken, nicht nur für diese.
S. Tarık Çetin

12
Den letzten Absatz in Bezug auf : Beachten Sie, dass , wenn ein unsichtbarer Spieler ist die einzige Sache , die diese Dinge passieren verursacht, dann bieten Sie Informationen , die für Hacks nützlich ist. Sie können sie aber auch von Zeit zu Zeit durch zufällige Ereignisse oder andere Spieleraktionen auslösen. Das würde Geräusche erzeugen, die den Hack ablenken und die Umgebung lebendiger und dynamischer erscheinen lassen.
Philipp

2
Das ist eine sehr interessante Idee, danke! Im Falle von "Fußabdrücken" kann dies sogar Stealth-Spieler belohnen, die in die (alten) Fußstapfen ihres Ziels "treten" und sich so realistischer an andere heranschleichen (dh von hinten kommen). Selbst wenn jemand die Schritt-Texturen (oder was haben Sie) offensichtlicher gemacht hätte, würde das Einsteigen in sie (vielleicht) nur die Anzeigedauer aktualisieren.
Underflow

3
Natürlich könnte in diesem Fall ein clientseitiger Hack durchgeführt werden, um zu zeigen, welche Tracks frisch sind.
Muhd

3
Ein clientseitiger Hack könnte Fußabdrücke hervorheben, die in Regionen erstellt wurden, die nicht dem Standort eines Spielers entsprechen.
Edward Coffey

31

Wenn Sie sich die unzähligen anderen Fragen über das Verhindern von Betrug in Multiplayer-Spielen ansehen, die sich auf dieser Website befinden, werden Sie leicht erkennen, dass es wirklich keine technische Maßnahme gibt, um clientseitiges Betrügen zu verhindern.

Alles, was Sie tun können, ist, weniger Informationen über die getarnte Entität bereitzustellen . Alles, was der Kunde wissen muss, um den Verzerrungseffekt wiederzugeben, ist, dass sich an dieser Position etwas verhüllt hat. Aber es muss nichts Spezifisches darüber wissen, wie genau es ist, wie viel Gesundheit es übrig hat und was es gerade tut. Abhängig von Ihrem Spiel kann dies allein ein entscheidendes Informationsdefizit für den Spieler sein.


6
Mit "weniger Informationen" kommen auch "weniger genaue Informationen". Wählen Sie einen Versatz von beispielsweise 10 Fuß in einer einzelnen zufälligen Richtung, der auf der Serverseite beibehalten wird, und senden Sie stattdessen diesen Standort. Fügen Sie in zufälligen anderen Begegnungen falsch schimmernde Zeichen hinzu. "Hast du das gesehen? Ich dachte, ich hätte dort etwas gesehen."
Keeta - wieder Monica

2
@Keeta Wenn Sie dies verwenden, möchten Sie entweder mit einem Signalfilter oder mit einer Art Zufallsbewegung in Richtung des Objekts eine Glättung durchführen (dh nicht jedes Mal einen vollständig zufälligen Wert erzeugen). Wenn es zu nervös ist, ist es für das Auge wirklich offensichtlich. Sie müssen also die Fähigkeit des Spielers ausbalancieren, sich während der Bewegung zu verstecken und sich zu verstecken, wenn Sie still bleiben. Letzteres wird und sollte wirksamer sein.
Nate Diamond

@ NateDiamond Ja, genau. Aus diesem Grund gebe ich an, dass der Server einen bestimmten Versatz des tatsächlichen Standorts erstellt. Wenn sich dann der echte Schauspieler bewegt, wird der Schimmer durch den Versatz mitbewegt. Indem Sie den Schimmer während der Bewegung genau beobachten, können Sie feststellen, wo sich der eigentliche Schauspieler befindet, was jedoch einige Arbeit erfordert. Wenn Unsichtbarkeit real wäre und dieses Schimmern im wirklichen Leben verursachen würde, stelle ich mir vor, dass dieser zusätzliche Fokus genau das ist, was benötigt würde, um die Unsichtbarkeit zu überwinden.
Keeta - wieder Monica

Es gab eine interessante Modifikation von ioquake3, die als einzige tatsächlich funktionierte, um einen wallhack-sicheren Server zu erstellen . Die Idee war, serverseitig zu prüfen, ob ein Spieler A einen anderen Spieler B sehen kann (dh keine Wände oder andere Trennlinien, die die Sicht blockieren), bevor entschieden wird, ob Spieler A die Positionsinformationen von B erhalten soll. Dies hat sich als äußerst effektiv erwiesen wallhacks, wie sie unbrauchbar gemacht wurden. Der springende Punkt ist also, dass der einzige Weg, um sicherzustellen, dass niemand die Daten manipuliert, darin besteht, ihnen überhaupt keine Informationen zu geben.
Gaborous

@gaborous, das ist allerdings ein teurer Scheck, besonders für jeden Spieler bei jedem Tick. Es kann durchaus eine lohnende Ausgabe sein, die der Entwickler jedoch bei den Kosten und Fähigkeiten des Servers berücksichtigen muss.
Nate Diamond

1

Ja, alle Informationen, die Sie an den Kunden senden, können offensichtlicher als beabsichtigt angezeigt werden. Aber hier ist der Trick:

Mildern Sie die Auswirkungen

Sicher, der Client verfügt möglicherweise über einige Informationen, aber wenn Sie genau überlegen, welche Informationen Sie bereit sind, zu teilen, und welche Aktionen die Spieler ausführen können, können Sie die Auswirkungen von Client-Hacks zumindest abschwächen.

1. Was beobachtet der Spieler?

  1. Sie sehen den Charakter mit den Merkmalen vor Ort: In diesem Fall hat der Client alle Informationen und Hacks können den Umhang einfach rückgängig machen
  2. Sie sehen etwas vor Ort: In diesem Fall verfügt der Kunde über Standortinformationen. Es kann den Ort deutlich machen, aber andere Informationen sollten immer noch ausgeblendet sein.
  3. Sie beobachten etwas, aber es ist nicht an Ort und Stelle

ein. Sie sehen etwas, aber es ist nicht an Ort und Stelle (Brücke oder Busch bewegt sich, aber es ist groß, sodass Sie nicht wissen, wohin Sie zielen sollen; Schritte werden erst mit einer Verzögerung von 2 Sekunden sichtbar): In diesem Fall weiß der Kunde nur, dass es etwas gibt etwas, aber nicht wo / was genau.

b. Sie beobachten etwas auf andere Weise (Geräusch, wenn sich etwas in der Nähe befindet; Anzeige der Nähe wie ein Radar mit oder ohne Richtung)

Der Screenshot in der Frage scheint zwischen 1 und 2 zu liegen, da er wahrscheinlich auf begrenzten Informationen basiert, aber Sie sehen immer noch den Umriss, der einige Informationen verraten könnte.

2. Was kann der Spieler tun?

Angenommen, Sie glauben, jemand befindet sich an der Koordinate XY. Was können Sie tun? Hier sind einige typische Optionen:

Angreifen

  1. Sie können ihn angreifen, als wäre er nicht getarnt
  2. Sie können ihn mit AOA-Angriffen / Fallen angreifen, die ihn enttarnen oder nicht
  3. Sie können ihn aktiv enttarnen und erst danach angreifen
  4. Sie können ihn überhaupt nicht angreifen

Ziehen um

  1. Wenn Sie anfangen, sich zu bewegen, bemerken Sie, dass der Motor Sie auf mysteriöse Weise auf einen Umweg bringt
  2. Du fängst normalerweise an, auf dein Ziel zuzugehen, aber wenn du den versteckten Charakter erreichst, bewegst du dich um ihn herum oder hältst an
  3. Du wirst nicht von dem versteckten Charakter geblockt

Wenn die Routenauswahl normalerweise clientseitig erfolgt


Danke für deinen Beitrag. Ich hatte vor, die Leute sowieso auf unsichtbare Zeichen stoßen zu lassen, da dies vom Server berechnet und verarbeitet werden kann. Die Klangidee ist ordentlich und eine subtile Veränderung des Klangs (Spannung, denke Jaws ) wäre cool, aber würde das nicht auch einfach durch eine lautere Klangdatei oder sogar eine Sprachdatei ersetzt werden, die besagt, dass EIN EINZIGER SCHLUSS GESTAHLT IST ?
Unterschreitung

1
Eine andere Idee in der Richtung von 'a': Ein Schimmer könnte zufällig in der Nähe des getarnten Spielers erscheinen, jedoch nicht an der genauen Position. Wenn der Server nur die Position des Schimmers sendet, kann der Client das nicht wirklich rückgängig machen. Selbst wenn der getarnte Spieler vollständig sichtbar wäre, würde dieser immer noch als Mechaniker fungieren.
Jezzamon

1
@Jezzamon ja, eine Art "Verschiebungsmechaniker" wäre auch cool. In der Cloak-Situation würde das jedoch nicht funktionieren: Ich möchte keine Spieler bestrafen, die nach Schimmern Ausschau halten. Sie müssten den „genauen“ Ort des Schimmerns haben, um z. B. Skillshots zu erzielen.
Underflow

-2

Der Ripple-Effekt könnte durch Shader-Code erfolgen. In diesem Modus können Sie die Texturverwendung deaktivieren, sodass die einfache Texturänderung kein Problem mehr darstellt.

Wenn in 3D das Modell zum Einsatz kommt, können Sie den Shader einfach in einen Shader ändern, der die Brechung simuliert. Dabei wird nur die Oberfläche des Modells verwendet und die Farbe verworfen. Auch wenn das Modell irgendwie ausgetauscht wird, bleibt der Effekt bestehen.

Das Modifizieren von vorkompiliertem Shader ist so schwierig wie das Modifizieren von Spielcode, und ich denke, es ist eine Stufe schwieriger als das Nachschlagen von Texturen in Spieledateien.


3
Sie haben die eigentliche Frage verpasst. Es ging nicht darum, wie man einen solchen Verzerrungseffekt technisch erzeugt. Es ging darum, dem Kunden die Informationen zu geben, wo er sie rendern soll, ohne nützliche Informationen zu geben, die er dem Spieler zur Verfügung stellen kann.
Philipp

1
Nun, ich dieses Problem anzugehen: Which means that players that change the texture or model or even the game code itself could render the cloak mechanic useless. Und ich verstehe nicht, warum ich die Frage verpasst habe whether there is some way to implement cloaking (with a 'shimmer', à la HotS), without having the issue that crafty players can modify the game (data) . A: Es wirbt mit Schimmer, B: Es ist schwieriger zu modifizieren als einfache Texturänderungen. WO eigentlich zu rendern ist eine andere Seite. Wenn die Position das einzige ist, was wir brauchen, um den Ripple-Effekt anzuwenden, sollten es die einzigen Daten sein, die an den Spieler gesendet werden.
Mars

2
Ich habe in der Vergangenheit Client Side Hacks entwickelt. Die Vorstellung, dass es schwieriger ist, Shader zu modifizieren, ist sehr, sehr irreführend. Ja, es stoppt die grundlegendste Form von Angriffen, aber jeder mit anständigem Google-Fu könnte es an einem Nachmittag herausfinden. Stellen Sie sich jetzt einem anständigen Hacker und sehen Sie, wie lange es dauert, bis er auf der Client-Seite betrügerische Ergebnisse erzielt.

Kopieren Sie hier Ihren Kommentar zu jeder Antwort und fügen Sie ihn ein, da alles auf der Clientseite ausgenutzt werden kann. Ich weiß, es ist nicht so schwer, Code zu ändern (es gibt Bots, Hacks, Mods in AAA-Spielen), aber ich finde es einfacher, halbtransparente Texturen in Spieledateien nachzuschlagen, als nach spezifischen Anweisungen für den Shader-Ripple-Effekt zu suchen. Wenn die Shader-Dateien nur aus Text bestehen und kaum komprimiert sind, kann dies natürlich auch von einem Kind zerstört werden. Ich habe nur eine Antwort gegeben, die mit "weniger an den Spieler weitergegebenen Daten" kombiniert werden kann, um ein angemessenes Maß an Sicherheit zu gewährleisten. Ich weiß wirklich nicht, was daran falsch ist, da sie eine tatsächliche Lösung bietet
Mars

@Thebluefish in fairness, das liegt daran, dass Entwickler nicht mehr Ressourcen ausgeben, um mit dem Betrug aufzuhören , sondern Ressourcen für sehr verschlungene, undurchsichtige und gut ausgebaute Methoden zum Erkennen von Betrügern und zum völligen Verbieten von Spielern von ihren Plattformen ... (offensichtlich) beziehen sich auf Systeme wie Steams VAC).
Trotzki94
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.