Daher habe ich beschlossen, Raubkopien meines XNA-Spiels vom Zugriff auf offizielle Spieleserver fernzuhalten (die moderiert sind, damit die Leute, die für das Spiel bezahlt haben, die beste Erfahrung machen), indem sie Clients mit falscher oder generierter, duplizierter oder gesperrter CD trennen Schlüssel (oder Seriennummern, da das Spiel digital ist und es überhaupt keine CDs gibt).
Wie kann ich dieses Schutzsystem für Seriennummern in mein Spiel integrieren (sowohl Clients als auch Hauptauthentifizierungsserver), sodass es nicht einfach zu hacken ist?
Beachten Sie, dass ich keine Erfahrung mit dem Erstellen eines solchen Schutzes für Software habe.
Ich habe das noch nie gemacht, aber ich verstehe die Grundlagen. Ich verstehe, warum ich auf dem Client keine Schlüsselüberprüfung durchführen kann. Daher ist es für mich in Ordnung, die Anmelde- / Pass-Authentifizierung mit einmaliger Schlüsseleingabe zu verwenden.
Derzeit besteht das Ziel dieses Schutzes darin, potenzielle Betrüger und Spieler, die sich störend verhalten, von offiziellen Servern fernzuhalten. Jeder kann mit oder ohne Schlüssel auf privaten Servern spielen, aber die Wahrscheinlichkeit, dass er unerwünschte Erfahrungen mit anderen Spielern sammelt, ist größer. Ich denke, es ist einfach genug, Spieler zu kaufen, da sie online sein müssen, um auf offiziellen Servern zu spielen.
Da das Hacken des Clients zu einfach ist, werde ich nur die anfänglichen Registrierungs- (und möglicherweise serverseitigen) Authentifizierungsverfahren schützen, damit niemand die Schlüssel stehlen kann, während sie übertragen werden.
Siehe auch:
Wie sollen Multiplayer-Spiele mit Authentifizierung umgehen?
Antworten:
Grundsätzlich haben Sie drei Anforderungen:
Der erste Teil sollte ziemlich einfach sein: Lassen Sie nur nicht zu, dass sich zwei Spieler gleichzeitig mit demselben Schlüssel auf demselben Server anmelden. Sie können die Server auch Informationen über angemeldete Benutzer austauschen lassen oder sich an einen freigegebenen Authentifizierungsserver wenden, sodass selbst die gleichzeitige Verwendung desselben Schlüssels für verschiedene Player auf verschiedenen Servern fehlschlägt. Möglicherweise möchten Sie auch nach verdächtigen Schlüsselverwendungsmustern suchen und, wenn Sie feststellen, dass ein Schlüssel durchgesickert ist, ihn einer Liste verbotener Schlüssel hinzufügen.
Für den zweiten Teil besteht eine Möglichkeit darin, einfach eine Datenbank aller gültigen ausgegebenen Schlüssel zu verwalten. Solange die Schlüssel lang genug sind (beispielsweise 128 Bit oder mehr) und zufällig ausgewählt werden (unter Verwendung eines sicheren RNG), ist die Wahrscheinlichkeit, dass jemand einen gültigen Schlüssel erraten kann, im Wesentlichen Null. (Selbst viel kürzere Schlüssel können sicher sein, wenn Sie bei fehlgeschlagenen Anmeldeversuchen eine Art Ratenbeschränkung verwenden, um Versuche zu stoppen, gültige Schlüssel mit brachialer Gewalt zu finden.)
Alternativ können Sie Schlüssel generieren, indem Sie eine eindeutige Kennung verwenden und einen Nachrichtenauthentifizierungscode (z. B. HMAC ) hinzufügen , der mit einem geheimen Hauptschlüssel berechnet wird. Solange der MAC lang genug ist, ist die Wahrscheinlichkeit, dass jemand, der den Hauptschlüssel nicht kennt, in der Lage ist, einen gültigen MAC für eine ID zu erraten, vernachlässigbar. Ein Vorteil dieser Methode besteht nicht nur darin, dass keine Schlüsseldatenbank erforderlich ist, sondern dass der Bezeichner eine beliebige eindeutige Zeichenfolge sein und Informationen über den Client codieren kann, für den der Schlüssel ausgegeben wurde.
Ein Problem bei der Verwendung von MACs besteht darin, dass die offiziellen Spieleserver (oder zumindest der Authentifizierungsserver) den Hauptschlüssel kennen müssen, um den MAC zu überprüfen. Wenn die Server gehackt werden, kann dies zu einem Verlust des Hauptschlüssels führen. Eine Möglichkeit, dieses Risiko zu mindern, besteht darin, für jede ID mehrere MACs mit unterschiedlichen Hauptschlüsseln zu berechnen, aber nur einen der Hauptschlüssel auf den Spielservern zu speichern. Auf diese Weise können Sie den Master-Schlüssel widerrufen und zu einem anderen Master-Schlüssel wechseln, falls er jemals durchgesickert ist und zum Generieren gefälschter IDs verwendet wird. Alternativ können Sie die MACs durch digitale Signaturen ersetzen , die nur mit der öffentlichen Hälfte des Hauptschlüssels überprüft werden können.
Für den dritten Teil besteht ein Ansatz darin, sicherzustellen, dass der Client seinen Schlüssel nicht an jemanden sendet, ohne zu überprüfen, ob der Empfänger wirklich ein legitimer offizieller Server ist. Sie könnten beispielsweise SSL / TLS (oder DTLS ) für den Anmeldevorgang verwenden, benutzerdefinierte Zertifikate für Ihre Spieleserver ausstellen und nur die Client-Vertrauenszertifikate von Ihnen ausstellen lassen. Die Verwendung von TLS schützt in geeigneter Weise auch die Client-Schlüssel (und alle anderen Authentifizierungsdaten) vor Abhörern, z. B. in öffentlichen WLANs.
Bei diesem Ansatz können Server von Drittanbietern leider keine Clientschlüssel überprüfen, selbst wenn sie dies möchten. Sie können dies umgehen, indem Sie einen offiziellen Authentifizierungsserver einrichten, von dem Spiele-Server von Drittanbietern Gebrauch machen können, z. B. indem sich der Client beim Authentifizierungsserver anmeldet und ein zufälliges einmaliges Token erhält, mit dem er sich beim anmelden kann Spieleserver (der dann das Token an den Authentifizierungsserver sendet, um es zu überprüfen).
Alternativ können Sie Ihren Kunden tatsächliche Client-Zertifikate oder ähnliches ausstellen. Sie können entweder ein vorhandenes Protokoll (wie TLS) verwenden, das die Authentifizierung von Client-Zertifikaten unterstützt (empfohlen), oder ein eigenes implementieren, z.
(Dieses Protokoll könnte weiter vereinfacht werden, indem der Client die aus einer Server-ID und einem Zeitstempel bestehende "Abfrage" generiert und signiert. Dann muss der Server natürlich überprüfen, ob die ID und der Zeitstempel gültig sind. Beachten Sie auch, dass Dieses einfache Protokoll allein hindert einen Mittelsmann-Angreifer nicht daran, die Sitzung des Clients zu hijacken, verhindert jedoch, dass er den privaten Schlüssel des Clients erhält, der für zukünftige Anmeldungen benötigt wird.)
quelle
Es gibt keine 100% ige Sicherheit, aber Sie könnten mit einem ziemlich einfachen Ansatz beginnen:
Sie benötigen eine Möglichkeit, die generierten Schlüssel zu überprüfen, z. B. eingeschlossene Prüfsummen. Natürlich darf dies nicht zu leicht herauszufinden sein.
Optional (aber empfohlen) würde es eine serverseitige Datenbank geben, die die Schlüssel mit einer Datenbank aller ausgegebenen Schlüssel überprüft, sodass Sie keine Schlüssel generieren können, selbst wenn Sie den Algorithmus haben (ignorieren wir das bruteforcen).
Von da an kann man zwei verschiedene Ansätze verfolgen, aber in jedem Fall ist etwas sehr wichtig:
Wie für die tatsächlichen Pfade:
Der Hash-Schlüssel (siehe oben) muss während des Authentifizierungs- / Anmeldevorgangs gesendet werden.
Als Alternative (IMO die bessere, obwohl viele diese Art von "DRM" nicht mögen): Verwenden Sie den Schlüssel im Client überhaupt nicht. Erfordern Sie stattdessen, dass sich der Benutzer bei einem Konto anmeldet und einen gültigen CD-Schlüssel benötigt (hierfür ist die oben genannte Datenbank erforderlich), um Konten zu erstellen. So gehen moderne Spiele, zB jedes Pay-to-Play-MMORPG, damit um.
Persönlich würde ich mich aus einem einfachen Grund für den Account-Ansatz entscheiden: Letztendlich kann man nicht verhindern, dass Leute CD-Schlüssel stehlen (Bruteforcing, Reverse Engineering oder Betrug). Als solches könnten die Leute einfach einen neuen Schlüssel erstellen, um weiterzuspielen oder andere vom Spiel auszuschließen. Mit Account-gebundenen Schlüsseln kann niemand etwas mit einem bereits verwendeten Schlüssel anfangen. Falls jemand einen Schlüssel gekauft hat, den ein anderer generiert hat, können Sie den Kontoinhaber trotzdem übertragen, vorausgesetzt, es gibt genügend Beweise dafür.
quelle
Pangaea Software - Entwickler mehrerer Mac-Spiele - hat ein Thema zum Kopierschutz in sein (jetzt kostenloses) Spieleentwicklungsbuch aufgenommen. Das Buch erklärt auch, wie mit Raubkopien und anderen Hacks umgegangen wird. Das Buch konzentriert sich auf die Entwicklung von Mac-Spielen, aber die Ideen könnten auch für andere Plattformen nützlich sein. Im Buch ist für jedes Kapitel ein Quellcode enthalten, der im folgenden Download enthalten ist. Es gibt auch Quellcode (geschrieben in C), der sich auf den Kopierschutz bezieht.
Das Buch kann hier heruntergeladen werden .
quelle