Welche Techniken gibt es in Netzwerkspielen mit mehreren Spielern, um sicherzustellen, dass Benutzer eine Verbindung mit der offiziellen Clientanwendung herstellen und nicht mit einer gehackten Clientanwendung?
Mir ist klar, dass es wahrscheinlich keinen sicheren Weg gibt, dies zu tun, aber ich interessiere mich eher für Techniken, die eingesetzt werden können, um das Problem zu lindern.
Ich interessiere mich besonders für Techniken, die für webbasierte Spiele verwendet werden können, aber ich stelle mir vor, dass die meisten allgemein angewendet werden können.
Vielen Dank!
networking
multiplayer
security
UpTheCreek
quelle
quelle
Antworten:
Das ist ein interessantes Problem, aber ich denke, Sie stellen hier die falsche Frage. Lassen Sie mich mit der Erkennung eines gehackten Client-Ansatzes beginnen:
Wenn Ihr Client auf Benutzerseite ausgeführt wird, kann er mit Ihrem Code tun, was er will (bis es für ihn zu kompliziert ist, aber es wird immer jemanden geben, der schlauer ist). Alles, was Sie tun können, wie die Verschlüsselung von Nachrichten zwischen Client und Server, das Erstellen von Client-Zertifikaten oder sogar das Berechnen der Prüfsumme durch den Client, wird dekompiliert und geknackt. Ich habe eine Software gesehen, die mit einem Dongle geliefert wurde. Dieser Dongle enthielt einen Teil des Anwendungscodes. Um ihn jedoch ausführen zu können, überprüfte der Dongle zuerst die CRC der App, wenn er nicht gehärtet war. Natürlich wurde der Dongle nach einiger Zeit gehackt auch .. und wenn Sie ein Software-Update durchführen, müssen Sie den Dongle erneut senden ..
Darüber hinaus kann der Benutzer mit seinem eigenen Client cheaten - indem er beispielsweise Mausbewegungen und Klicks simuliert.
Die Frage sollte also lauten: Wie erkennt man einen Bot-Spieler?
Hier haben Sie einige Optionen: Messen der Zeit zwischen den Klicks, Messen der Geschwindigkeit der Mausbewegungen. Bewegt sich die Maus mehrmals genau von Punkt A nach Punkt B und trifft sie genau die gleichen Koordinaten? Sind Benutzerbewegungen wiederholbar? Wenn die Ressource, die der Benutzer gesammelt hat, erschöpft war, geht der Benutzer zu einer anderen Aktion über oder wartet stundenlang vor Ort? Am Ende des Tages schreiben Sie einen Mustererkennungscode.
quelle
Ich denke nicht, dass dies der richtige Weg ist oder zumindest nicht das Einzige, mit dem Sie sich befassen sollten.
Stellen Sie sicher, dass Sie nur kundenspezifische Informationen an jeden Client senden (z. B. muss ein Client nicht wissen, was ein Monster zum Beispiel fallen lassen kann. Senden Sie die Informationen einfach nach dem Töten und nur an die angegebenen Clients).
Führen Sie die meisten Berechnungen auf der Serverseite durch (Positionierung usw.). Der Kunde führt seine eigenen Berechnungen durch, ABER er kann niemals seine eigenen Werte nur seine Handlungen senden. Der Server muss prüfen, ob diese Aktion gültig ist und wie sie sich auf das Spiel auswirkt.
1 und 2 werden normalerweise mit Vorhersagen kombiniert. Der Client und der Server versuchen, bestimmte Verhaltensweisen vorherzusagen. Der Client bewegt zum Beispiel den Player aber alle x Sekunden oder ms. erhält eine Korrektur vom Server
Laden Sie Benutzer für ihre Konten auf, nicht für den Kunden. Auf diese Weise erhält ein Benutzer möglicherweise eine geknackte Version, kann aber ohne Konto nicht spielen.
Mit 2 können Sie sicherstellen, dass es keine Money-Hacks, Position-Hacks oder Wall-Hacks usw. gibt, aber Bots waren schon immer ein Problem für viele Unternehmen. Sogar große Firmen wie blizzard haben Probleme damit. Sie können die spielbare Zeit pro Konto begrenzen, sodass niemand mehr als 540 Stunden pro Monat online sein kann. Ich erinnere mich an einen Bot, der Farbwerte von Monstern + Mauseingaben verwendete, um XP zu bewirtschaften. Ein anderer Weg wäre, ein zusätzliches Programm bereitzustellen, das nach anderen laufenden Anwendungen und Speicherzugriffen sucht, aber dies bringt eine Handvoll neuer Probleme mit sich.
Bearbeiten:
Sehr gut geschriebene Artikel für Anfänger: http://gafferongames.com/networking-for-game-programmers/what-every-programmer-needs-to-know-about-game-networking/
quelle
Es gibt keinen wirklich narrensicheren Weg, um zu garantieren, dass der "offizielle Client" ausgeführt wird. Ein solcher Mechanismus beruht darauf, dass der Validierungscode eine Art "Geheimnis" an den Server zurückmeldet, das bei ausreichender Zeit rückentwickelt werden kann. Dies ist im Grunde genommen der Fall, wenn eine Anti-Hacking-Software dem Server mitteilt, dass der Client in Ordnung ist.
Bearbeiten: Um das Obige etwas näher zu erläutern, betrachten Sie den Code, der die Client-Seite validiert. Es hat zwei sehr schwierige Aufgaben: Überprüfen, ob der Originalcode verwendet wird (und nichts anderes vorhanden ist, das den Originalcode dynamisch / zur Laufzeit (!) Stören kann) und dieses Ergebnis auf diese Weise an den Server zurückmelden dass diese Mitteilung nicht gefälscht werden kann. Während der erste Teil wahnsinnig schwierig ist, ist der zweite Teil absolut unmöglich.
Wenn Sie sowohl den Client als auch den Server regelmäßig aktualisieren können, können Sie das Geheimnis regelmäßig austauschen, in der Hoffnung, dass es den Crackern schwer fällt, Schritt zu halten. Aller Wahrscheinlichkeit nach kann es jedoch sehr schnell wieder geknackt werden, es sei denn, Sie ändern die Art und Weise, in der das Geheimnis verschlüsselt / implementiert wird. Im Grunde ist es ein Wettrüsten zwischen Ihnen und demjenigen, der es knacken möchte - der mehr Zeit und Geld hat, um das Problem anzugehen.
Können wir, nachdem wir diesen Teil akzeptiert haben, noch etwas tun? In einer perfekten Welt mit unendlicher Rechenleistung und Bandbreite können Sie einfach kontinuierlich den Status zwischen dem Client und dem Server übertragen und den Server eine perfekte Simulation dessen ausführen lassen, was auf dem Client geschieht. Dieses Modell könnte dann verwendet werden, um die Aktionen zu validieren, die der Client vorgibt, durchzuführen. Dadurch wird nicht erkannt, ob ein Mensch oder ein Bot spielt, aber es kann überprüft werden, ob der Client einen Schuss durch eine Wand oder eine andere unvorstellbare Aktion behauptet.
Genügend Daten auf dem Server zu haben, ist auch ein erster Schritt, um unregelmäßiges Verhalten zu erkennen - ein Ziel, das für Menschen vielleicht zu schnell ist usw. Offensichtlich ist die perfekte Simulationssituation im Allgemeinen nicht realisierbar, aber es kann eine Art verkleinertes, geschätztes Modell verwendet werden viele Situationen.
quelle
Sie geben nicht die Art des Spiels an, also werde ich mich stark in Richtung RPG / MMO-Spiele neigen. Vieles davon kann und gilt jedoch für FPS-, Strategie- und Actionspiele. Die Art und Weise, wie große Multiplayer-Spielefirmen wie Blizzard mit diesem Problem in ihren Spielen umgehen, ist:
Sie erscheinen dann im Spiel (falls dies möglich ist, bei den gleichen Spielen wie Starcraft 2 nicht) oder sehen sich die Aktionen des Spielers als "menschlicher Scheck" an bzw. sprechen mit ihm darüber. Zumindest sollte das so gehandhabt werden. Blizzard ist ziemlich gut darin, aber in der Vergangenheit waren es andere MMO-Unternehmen nicht.
Es ist nicht einfach, nach nicht offensichtlichen Bots zu suchen, aber einige grundlegende Regeln müssen beachtet werden
Das Problem ist, dass je populärer Ihr Spiel ist und je fruchtbarer Bots sein können, um Langeweile in Ihrem Spiel zu reduzieren, desto wahrscheinlicher ist es, dass Menschen diese Bots sowohl verwenden als auch erstellen. Und es ist trivial, die Geschwindigkeit der Mausbewegung einzuschränken, zufällige humanistische Variationen bei Klicks hinzuzufügen, selbst wenn der Bot Fehler mit menschlicher Geschwindigkeit macht, Teile des Menüs öffnet und schließt, die falsche Taste drückt und dann das Fenster schließt, zwischen Tastatur und umschaltet Maus funktioniert wie Menschen, um die Ermüdung der Hände zu verringern. (Sie merken nicht einmal, dass Sie es tun)
Der letzte Schritt, wenn jemand oder ein Bot für eine sehr lange Zeit etwas Wiederholendes tut, muss ein menschlicher Mod sein, der auf den Spieler zukommt und mit ihm spricht. Wenn sie da sind und mit menschlichen Antworten antworten, sind sie menschlich. In der Regel werden die Mods den Spieler auffordern, eine Weile anzuhalten oder ihnen irgendwo zu folgen und andere Aktionen auszuführen. Die Reifen werden mit der Zeit komplexer.
Tanget
Natürlich wird irgendwann jemand einen Bot erschaffen, der von einer realen Person nicht zu unterscheiden ist und den Turing-Test besteht. Und es gibt viele Botwriter, die genau das wollen.
Ich selbst hatte eine vorübergehende Faszination für diese Idee, als ich anfing zu programmieren und nutzlose Bots für Ultima Online erstellte, die in der Stadt stehen und NPCs imitieren würden. Die Befehle waren supereinfach, so dass sie einfach zu bewerkstelligen waren, nur Tastenanschläge, um in verschiedene Richtungen zu gehen, und das Chat-Protokoll nach seinem eigenen Namen zu durchsuchen und die Nachrichten über eine Web-Version der KI an ALICE weiterzuleiten. Ich erinnere mich nicht an welche und es existiert wahrscheinlich nicht mehr.
/Tangente
Punkt ist, müssen Sie entscheiden, wo die Linie gezeichnet werden soll. Wenn Sie es sich nicht leisten können, mit einer Armee von Moderatoren über die von Ihrem System als Bots identifizierten Personen zu sprechen, lassen Sie die Community wahrscheinlich besser Leute als Bots kennzeichnen. Wenn dies im Laufe der Zeit ausreicht, treten Sie den Spieler etwa eine Stunde lang. Nicht verbieten, nur treten. Das eigentliche Problem für die meisten Spieler ist, dass Bots Ressourcen verschlingen, die andere menschliche Spieler nutzen könnten. Wenn Mobs rar sind, wie es bei Ragnarok Online der Fall war, dann sind Bots, die herumlaufen und ganze Gebiete von Feinden räumen, während sie Gegenstände aufspüren (oder nicht), weit verbreitet und ruinieren das Spiel für andere Menschen. Auf diese Weise können Sie die Kosten für Verwaltungsarmeen umgehen.
Schließlich können Sie auch mit Bots als Realität Ihres Spielraums leben und deren Verwendung fördern. Dazu müssen Sie Ihr Spiel so gestalten, dass Bots, Trainer und Hilfsprogramme verwendet werden. Ich möchte sagen, dass es ein MMO gab, das dies vor ungefähr 10 Jahren getan hat, aber ich kann mich nicht erinnern, welches es war. Es bedeutete das Ende des Spiels, weil MMOs schwerfällig sind und es bedeutete, dass 95% der Spieler zu einem bestimmten Zeitpunkt von ihren Tastaturen entfernt waren und die Community zerstörten. Wenn Sie diesen Weg gehen, seien Sie vorsichtig.
quelle
Vermeiden Sie Spielfunktionen, mit denen ein Benutzer durch wiederholte Aufgaben gewinnen kann , insbesondere in browserbasierten Spielen. Spielfunktionen, die sich wiederholende Aufgaben verursachen, machen andere Benutzer nicht nur wütend, weil sie keine Zeit haben, sie auszuführen, sondern machen das Spiel auch sehr leicht botbar (und viel weniger spaßig!)
Wenn ein bestimmtes Spiel-Feature botfähig sein kann, warum gibt es dieses Feature überhaupt im Spiel? Diese Funktion fordert den Benutzer eindeutig auf, einen Bot zu bauen.
Das Spiel soll so gespielt werden, dass dem Spieler ein angemessenes Maß an Unterhaltung geboten wird, normalerweise durch eine Reihe nicht-trivialer Entscheidungen. Die Fähigkeit zu entscheiden, vor nicht-trivialen Entscheidungen zu stehen, trennt einen Menschen von einem Bot. Letztendlich, anstatt nach Bots zu suchen, suchen Sie in Ihrem Spiel, wo ein Bot implementiert werden könnte, und implementieren Sie es selbst, damit es von allen genutzt werden kann. Auf diese Weise ersparen Sie einem Spieler Zeit, indem Sie ihm langweilige Aufgaben ersparen, während Sie die Bots von Grund auf bekämpfen: Wenn es keine botfähigen Spielfunktionen gibt, wie kann es Bots geben?
Mein Fazit lautet: Ich würde sagen, dass es eine Schwelle für die minimale Komplexität gibt, die ein Spiel benötigt, um nicht botfähig zu sein. Stellen Sie Ihr Spiel über diese Schwelle, indem Sie nicht-triviale Auswahlmöglichkeiten hinzufügen, die letztendlich das Benutzererlebnis verbessern.
Wie auch immer, vielleicht gilt dieses Paradigma heutzutage nicht mehr ... aber ich glaube immer noch, dass dies das ist, was ein gutes Spiel ausmacht.
quelle
Die vorhandenen Antworten sind bereits gut, aber ich möchte darauf hinweisen, dass Sie, wenn Ihre Prüfungen teuer sind (z. B. das Ausführen der gesamten Spielserverseite, um sicherzustellen, dass der Client nicht schummelt), nur einen Teil davon ausführen können die Zeit .
Sie könnten beispielsweise nur Aktionen in einer bestimmten Region oder von bestimmten Spielern überprüfen (die sich nach einiger Zeit zufällig ändern) oder nur eine Reihe von Aktionen haben und zufällig auswählen, welche validiert werden sollen (und die anderen ignorieren). Vielleicht überlegen Sie sich eine Heuristik, wer wahrscheinlich schummelt (suchen Sie im Grunde nach den erfolgreichsten Leuten), und validieren Sie ihre Aktionen auf dem Server.
Stellen Sie sicher, dass der Server nicht verrät, wann er Aktionen überprüft und wann nicht. Senden Sie Ihre Standardantwort immer, bis Sie bereit sind, Maßnahmen zu ergreifen (und geben Sie sie nicht preis, indem Sie länger brauchen, um eine Antwort zu senden, wenn Sie validieren und wenn Sie nicht sind).
Auf diese Weise können Sie sich ziemlich gut vor Betrug schützen, indem Sie nur die Serverleistung verwenden, die Sie sparen können (obwohl der Schutz vor Betrug natürlich umso besser ist, je näher Sie der Validierung jeder Aktion kommen).
quelle
Nun, ich glaube nicht, dass es eine "the-Ultiamte-Lösung" gibt. Sie können die Datenpakete verschlüsseln und dem Server, der die Pakete erhält, einige Regeln geben. Zum Beispiel könnten Sie festlegen, dass der größte realistische / erlaubte Zug +1 ist und nicht wie ein Betrüger / Hacker, der ihn auf 5 oder höher setzt, nur um schneller zu sein. Überlegen Sie sich, was ein Hacker tun könnte, um besser als andere Spieler zu sein, und legen Sie Regeln dafür fest.
quelle
Der einfachste Weg ist, den Client im Wesentlichen zu einem dummen Terminal zu machen. Alles wird auf dem Server erledigt und der Client sendet nur Befehle an den Server. Auf diese Weise hat der Server die volle Kontrolle über alles.
Dies ist jedoch wahrscheinlich nicht der für Sie am besten geeignete Fall, da der Server mehr Berechnungen durchführen muss und die Benutzererfahrung mangelhaft sein wird. Je mehr Logik Sie dem Client überlassen, umso besser ist das Benutzererlebnis, desto geringer ist jedoch die Sicherheit. Sie müssen also einen für Sie akzeptablen Mittelweg finden.
Schicken Sie dem Kunden auch nur das, was er wissen sollte. Wenn sich beispielsweise ein feindlicher Spieler hinter einer Mauer befindet, senden Sie diese Informationen nicht an einen Kunden, da ein gehackter Kunde diese Informationen sonst erkennen kann (sprich: Wallhack).
quelle
EDIT: Ich habe die Frage falsch verstanden. Ich interpretierte es als "Raubkopien / gehackten Schlüssel verhindern" anstatt als "gehackte Software, die eine Nachricht senden kann, um 1 Milliarde Gold für den Spieler zu generieren".
Die meisten Spiele haben heutzutage einen Wert, der an ein Konto in einer Datenbank gebunden ist, da alles, was ein Client an einen Server senden kann, geändert werden kann. Dies ist wahrscheinlich die einfachste und effektivste Methode.
Mit der Verbreitung von Hochgeschwindigkeitsinternet und P2P-Dateiübertragung haben Unternehmen von CD-Schlüsseln, die lokal auf dem Client gespeichert sind, auf Schlüssel umgestellt, die mit einem Konto auf ihren Servern verknüpft sind. Es gibt keine "offizielle" oder "nicht offizielle" Client-Software mehr, da jeder den Client herunterladen kann. Sie können jedoch nur spielen, wenn Sie über ein Konto verfügen, auf das Sie zugreifen können.
Dies hat auch einen Vorteil für das Unternehmen, da sie nicht so viel für die Erstellung physischer Kopien der Software aufwenden müssen.
quelle