Was verwenden Sie zum Bündeln / Verschlüsseln von Daten?

14

Immer mehr Spiele gehen den datengesteuerten Weg, was bedeutet, dass es eine Sicherheitsstufe geben muss, die eine einfache Manipulation ermöglicht. Ich habe gesehen, wo Spiele ihre Assets (Audio, Kunst, Daten) vollständig bündeln, und ich frage mich, wie sie das verwalten. Gibt es Anwendungen / Bibliotheken, die Sie bei der Verwaltung der darin enthaltenen Assets bündeln und unterstützen? Wenn nicht, gibt es gute Ressourcen, auf die Sie beim Packen / Entpacken / Verschlüsseln verweisen würden?

Diese spezielle Frage dreht sich um C ++, aber ich wäre offen zu hören, wie dies auch in C # / XNA verwaltet wird.

Um es klar auszudrücken: Ich bin nicht daran interessiert, eine Lösung zu finden, um Hackerangriffe zu verhindern. Auf der fundamentalen Ebene manipulieren wir alle Nullen und Einsen. Wir möchten jedoch verhindern, dass 99% der Benutzer, die das Spiel spielen, einfach XML-Dateien ändern, die zum Erstellen der Spielwelt verwendet werden. Ich habe viele Spiele gesehen, die alle ihre Ressourcen zusammen bündeln. Ich bin einfach neugierig auf die Methoden, die sie verwenden.

David McGraw
quelle
Gute Frage, obwohl ich nicht glaube, dass es eine Möglichkeit gibt, es zu 100% zu schützen, glaube ich, dass es eine gute Möglichkeit gibt, es zu verdichten und zu verschleiern, und ich würde gerne mehr darüber erfahren ...
Prix
Es lohnt sich zu hinterfragen, ob Ihre Kunst- / Audio-Assets überhaupt als "sensibel" eingestuft werden sollten. Viele Spiele setzen ihr Vermögen gezielt den Spielern aus, um eine gesunde Mod-Community zu unterstützen, die wiederum mehr Wert für das Spiel schaffen kann (selbst für den Entwickler praktisch kostenlos).
Ian Schreiber
Ich beschäftige mich hauptsächlich mit sensiblen Daten, die ein datengesteuertes Spiel steuern (z. B. XML-Dateien). Ich habe gerade gesehen, wie Spiele alles zu einer oder zwei Dateien zusammengefasst haben.
David McGraw
4
Was ist los mit Spielern, die mit diesen Daten rumspielen?
Jsimmons
meine eigene Trommel zu schlagen .. CFL: iki.fi/sol/cfl
Jari Komppa

Antworten:

8

Eine gute Strategie ist es, Ihr eigenes Archivformat von Grund auf neu zu erstellen und ein indiziertes Format mit einer Tabelle zu erstellen, die auf Datenblöcke verweist, anstatt ganze sequentielle Dateien in Ihrem Archiv zu speichern. Verschlüsseln Sie dann Ihre Indextabelle und komprimieren Sie jeden Block separat mit LZMA / Bzip2.

Ein anderer Ansatz besteht darin, hier und da einige prozedurale Datengeneratoren zu verwenden (wenn Sie so weit gehen möchten, könnten Sie sogar die "Parameter" für diese Generatoren von einem Online-Server als zusätzliche Maßnahme abrufen) und einen Teil der Arbeit auszulagern Mit der GPU können Sie auch vollständige Speicherabbilder verhindern und einen Teil der verlorenen Leistung wettmachen.

Ich finde jedoch, dass solche Techniken im Allgemeinen die Leistung beeinträchtigen und Entwicklungszeit verschwenden, während sie dem Endbenutzer nichts anderes als potenzielle Probleme und nicht benötigte Fehler bieten.

Trotzdem ist nichts 100% sicher.

Voodooattack
quelle
+1 dafür. Die Komprimierung befriedigt sowohl die Notwendigkeit der Verschleierung als auch die Ladezeiten und den Platzbedarf der App. Das Archivieren / Packen von Daten erfordert ohnehin eine Abstraktionsschicht, daher sollte die Kombination mit etwas, das geladen / dekomprimiert werden kann, nicht zu aufwändig sein. Wenn Sie sich für die Komprimierung entscheiden, sollten Sie die Komprimierungs- / Dekomprimierungslogik vom Laden / Archivieren trennen. Auf diese Weise können Sie zu einem späteren Zeitpunkt einen besseren Algorithmus austauschen. Die erforderliche Infrastruktur ändert sich nicht zwischen den Algorithmen.
MrCranky
@MrCranky: Wenn Sie sich ansehen, wie es EA mit dem Archivformat .package (DBPF) macht (das in SPORE- und Die Sims-Spielen verwendet wird), werden Sie dies tatsächlich in Aktion sehen. Ihre Engine hat ein zusätzliches Feld in der Indextabelle für "Komprimierungstyp", einen internen Code für den zu verwendenden Algorithmus. Sie verwenden unterschiedliche Komprimierungsalgorithmen basierend auf dem Blocktyp (Textblöcke verwenden beispielsweise eine spezielle Komprimierung). Das verwendete Versionssystem ermöglicht auch die Integration von Mods und die Abwärtskompatibilität. Mehr zum DBPF-Format hier: simswiki.info/DatabasePackedFile
voodooattack
Interessantes: Ich habe es bisher nur zur Kompilierungszeit mit einem #define gemacht, aber die Laufzeit bietet einige nette Möglichkeiten (zum Beispiel die Möglichkeit, den Komprimierungstyp zu ändern, ohne jede Datei für Ihr Spiel neu erstellen zu müssen).
MrCranky
11

Versenden Sie keine sensiblen Daten.

Es gibt keine Möglichkeit , verschlüsselte Daten zu versenden, damit nur das Spiel darauf zugreifen kann. Sie können sich wirklich anstrengen, aber Sie kommen schnell in die DRM-Probleme.

Wenn Sie Ihr Spielvermögen vor neugierigen Blicken schützen möchten.

  1. Reißverschluss zu
  2. xor die Datei
  3. Ändern Sie die Erweiterung in etwas Langweiliges (dh nicht my_level.zip.xorverwenden my_level.map).

Das wird 95% der schelmischen Nutzer aufhalten. Die anderen 5% werden es bekommen, egal was Sie tun.
Sie müssen nicht wirklich zip und xor. Sie könnten stattdessen AES mit einem bekannten Schlüssel verwenden. Es geht darum, nicht viel Zeit damit zu verbringen.

deft_code
quelle
Das ist es, was ich normalerweise bei den meisten Spielen sehe ... Cookie für dich.
Prix
2
Wirklich nur zip + umbenennen ist wahrscheinlich genug.
Coderanger
1
Ich glaube nicht, ich mag That will stop 95% of mischeivieous users.es, wenn man es einbricht, während ich glaube, dass es immer noch Leute gibt, die es tatsächlich bekommen. Ich würde es begrüßen, wenn nicht alle und jeder dazu in der Lage sind. Heutzutage wissen die meisten 10-jährigen Kinder, wie man Dateien im Editor öffnet und umbenennt ...
Prix
1
Wissen wie, ja. Wird mich jemals interessieren, nein.
Coderanger
zip + umbenennen ist nicht genug. Linux verwendet selten Dateierweiterungen, um den Dateityp zu bestimmen. Stattdessen werden die ersten Bytes überprüft und anhand dieser Informationen der Typ ermittelt. Eine umbenannte Zip-Datei wird unter Linux weiterhin als Zip-Datei angezeigt. Windows XP macht das nicht, es benutzt immer noch Erweiterungen. Ich weiß nicht, wie Windows7 das macht, aber ich gehe davon aus, dass Windows in Zukunft eine ähnliche Technik verwenden wird.
deft_code
4

Es ist wahrscheinlich töricht, viel Zeit dafür aufzuwenden. Es gibt Tools, mit denen Textur- und Modelldaten direkt von der GPU abgerufen werden können, und Sounds können problemlos auf ein virtuelles Loopback-Gerät gerichtet werden. Alles, was wirklich sicher sein muss, muss sich auf einem Server befinden und nur über Challenge / Response funktionieren. Die Validierung von Kundendaten ist eine andere Geschichte, die Valves -verify_all ähnelt. Das ist immer noch schwierig, da Sie der lokalen ausführbaren Datei nicht vertrauen können, um sie durchzusetzen (oder zumindest nicht mehr, als Sie Ihrem Endpunkt-Anti-Cheat-System vertrauen, was ebenfalls eine dumme Idee ist).

coderanger
quelle
4

Mein Job ist in Antitamper-Software. Ich kenne jemanden, der ein Old School Game Cracker ist. Er knackt Spiele wie Atmen. Du kannst Leute wie ihn nicht aufhalten. Wenn Ihr Spiel populär genug ist, werden mehrere geknackte Versionen Ihres Spiels nur wenige Tage nach der Veröffentlichung auf die Torrent-Websites gelangen, ganz gleich, was Sie tun. Mein Rat ist, nur das Nötigste zu tun, um den durchschnittlichen Joe, der denkt, dass er dieser Reverse Engineering-Sache vielleicht einen Stich geben möchte, davon abzuhalten.

Jake McArthur
quelle
1
Das ist das Ziel. Ich habe absolut keine Lust, Hacker zu bekämpfen.
David McGraw
1

Gute Frage, aber das ist alles andere als einfach zu beantworten.
Aus meiner Erfahrung mit Datensicherheit müssen Sie Folgendes bedenken:

1) Was sichern Sie, von wem und was sind die Auswirkungen , wenn diese Daten unsicher ist - Sicherheit ist weit mehr über die Risikobewertung als systematische technische Lösungen
2) Ich nehme an, Ihre Plattform Desktop (zB Windows / OSX) in diesem Fall , dass Sie Ein anderer Problembereich als proprietäre Hardware wie PS3 / Xenon, die ihre eigenen Versuche zur Kernel-Sicherheit unternimmt (ob dies eine gültige Lösung ist, steht zur Debatte).
3) Verschlüsselung! = Sicherheit. Die Verschlüsselung garantiert nur, dass Ihre Daten nicht gelesen werden können. Sie garantiert nicht, dass Ihre Daten nicht geschrieben oder wiedergegeben werden können.

Wenn Ihre Anforderungen sind Ihre Daten machen manipulationssicher , dann müssen Sie darüber nachdenken , Hashing Ihre Daten (vorzugsweise mit SHA-256 oder SHA-512) , erneut auf aber darüber nachdenken , warum es wichtig ist und was von Ihnen gewinnen Hinzufügen von Sicherheit zu Ihnen System.
Es ist auch , dass die Verschlüsselung wissenswert Hinzufügen Tech , um Ihr Produkt kann Auswirkungen legal haben aufgrund Exportbeschränkungen (Verschlüsselung Tech als beschränkt waffenfähigem Technologie eingestuft es glauben oder nicht) so Bibliotheken verwenden , die diese rechtlichen Probleme überwinden müssen , ist ratsam.
Verwenden Sie schließlich - niemals Ihre eigene Verschlüsselungstechnologie - bekannte, dokumentierte und erforschte Algorithmen wie AES, Blowfish, RSA usw

ps Public / Private Key ist nicht geeignet oder praktisch für die Verschlüsselung großer Datenmengen, daher verwenden DRM / PGP usw. ein hybrides RSA + -Symmetriesystem, dh sichern Sie den symmetrischen Schlüssel mit RSA, und verschlüsseln Sie ihn dann standardmäßig symmetrisch mit diesem Schlüssel

Es ist ein sehr großes komplexes Thema und ich habe es definitiv nicht gerecht gemacht

Ich hoffe, das hilft

Zebrabox
quelle
1

Wenn Sie ein Beispiel für ein Format suchen, das klein (komprimierbar), lächerlich sicher und flexibel ist (wahrscheinlich überarbeitet), sollten Sie sich das MPQ-Format von Blizzard ansehen.

http://wiki.devklog.net/index.php?title=The_MoPaQ_Archive_Format

Das allgemeine Archivlayout sieht wie folgt aus:

Archiv Header Datei Daten Datei Daten - Spezielle Dateien Hash-Tabelle Blocktabelle Erweiterte Blocktabelle Starke digitale Signatur

Dieses Format hat ALLES. Blocktable, Extended Blocktable, in Sektoren aufgeteilte Daten (für einfaches Streaming), Unterstützung für 7 (!) Komprimierungsalgorithmen (wenn Sie die Soundkomprimierung zählen), die beliebig kombiniert werden können, schwache digitale Signatur, starke digitale Signatur und so weiter.

Wenn Sie die API von Blizzard kaufen würden, die sich mit der Dateiarchitektur befasst, würden Sie alles bekommen, was Sie jemals brauchen und so viel mehr.


quelle
Vielen Dank für den Link, ich hätte nie gedacht, mehr in die Details von MPQ zu schauen (und im Allgemeinen angenommen, sie wären nicht verfügbar)
Bill
Wenn es so sicher ist, warum wurde es bis zu einem solchen Grad rückentwickelt und hat sogar Bibliotheken von Drittanbietern, um damit zu interagieren? ;-)
coderanger
Die meisten (read: all) Tools für die Interaktion mit * .mpq-Dateien hängen von Stormlib ab, das von einem einzigen Benutzer geschrieben und verwaltet wird.
Soweit ich weiß, setzt Stormlib voraus, dass Sie das Originalspiel haben, von dem das Archiv stammt, da die Schlüssel für die Entschlüsselung in der ausführbaren Datei gespeichert sind. Der Hauptgrund, warum es so sicher ist, ist jedoch nicht, dass es unmöglich ist, in es einzubrechen. Daten, die im laufenden Betrieb über das Netz gesendet werden, sind jedoch unübertroffen. Die Daten sind so stark verschlüsselt, dass ein Dritter sie nicht sofort entschlüsseln kann.
Tatsächlich hat Blizzard mit "World of Warcraft" die Streaming-Technologie entwickelt, mit der Sie das Spiel mit nur wenigen Prozent der gesamten auf Ihre Festplatte heruntergeladenen Daten spielen können. Das * .mpq-Format ist für diese Art von Jobs hervorragend geeignet. Ganz zu schweigen davon, dass die Archive des Starcraft 2-Installationsprogramms, das einige Tage vor der offiziellen Veröffentlichung des Spiels von Blizzard veröffentlicht wurde, so stark verschlüsselt waren, dass sie erst nach Veröffentlichung des Spiels geöffnet werden konnten. : P
0

Da dies kürzlich wiederbelebt wurde, scheint sich Ihre Frage (und damit alle bisherigen Antworten) nur mit dem Laden von Dateien zu befassen, das nur so sicher ist wie die ausführbare Datei, die es laden möchte. Auf dem PC gibt es nichts, was wirklich sicher ist (Sie verzögern nur die Leute), Sie können nach Dingen auf Servern suchen, aber selbst diese Prüfung kann entfernt werden, so dass modifizierte Exes ausgeführt werden können, egal was passiert. Die Konsolen sind immer noch "hübsch" gesichert, so dass ich in den meisten Fällen einen Hash von wichtigen Dateien generiere, dann den Hash mit einem privaten Schlüssel signiere, den öffentlichen Schlüssel in den Code einbette und den sicheren Hash gegen die Datei verifiziere.

Ich dachte, ich würde eine weitere Attacke ins Gespräch bringen, was mir erst letztes Jahr aufgefallen ist, da ich nicht viel auf dem PC versende. Cheat Engine ist ein sehr ordentliches kleines Programm, das das Erstellen eigener Hacks fast automatisiert (was bedeutet, dass jeder es verwenden kann). Es ist ziemlich weit fortgeschritten, was es kann, viele Hacks / Cheats, die ich gesehen habe, werden durch dieses oder etwas sehr ähnliches gemacht, was ich gesehen habe (alle Massenmarkt-Hacks). Mit etwas Arbeit, die Sie vor solchen Dingen schützen können, hängt alles davon ab, wie beliebt das Spiel ist und ob sich jemand genug für die Mühe macht.

Opps, vergessen zu erwähnen, eine gute Bibliothek für die Verschlüsselung (in C ++) ist LibTomCrypt .

Roger Perkins
quelle