Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

28.05.2013, 16:57

Container für Dateien (zip, cab, etc.)

Hallo zusammen,

aktuell stehe ich vor dem Problem, Dateien (insbesondere Grafiken, aber auch Sound und XML) dem Nutzer unzugänglich zu machen. Dies geschieht aktuell, indem ich die Ressourcen zippe und die Datei-Endung ändere (nicht wirklich sicher). Die verwendeten Ressourcen werden beim Kompilieren in entsprechende Container gepackt und in den entsprechenden Release/Debug-Ordner kopiert.

Nun kann aber jeder halbwegs clevere Mensch meinen Container öffnen und die Dateien verändern. Dies betrifft nicht nur die Grafiken, sondern auch Spielregeln, da er die XMLs verändern kann. Dies möchte ich aber gerne unterbinden!

Ich suche also eine Möglichkeit, in C# Audio/Grafik/XML in Container packen zu können (möglichst automatisiert beim Bauen) und so absichern zu können, dass niemand einfach diese ändern kann. Welche Methoden kennt ihr? Wird der Container verschlüsselt? Gibt es Checksums? Welche libs bieten sich da an? Wie setzen andere Spiele dieses Problem um?

Viele Dank schon mal im voraus.

rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

2

28.05.2013, 17:08

Warum willst du dir den Aufwand machen? Wenn du es verschlüsselst, musst du zwangsläufig auch den Schlüssel dazu irgendwo in deinem Programm unterbringen. Sobald du das tust, hältst du nur noch Ließchen Müller davon ab, deinen Container zu öffnen. Jemand mit ein bißchen Erfahrung im Cracken von Software wird das ziemlich schnell aufmachen, sofort danach hast du dann im Netz einen Packer und Entpacker für deinen Container. Vorausgesetzt natürlich, das Spiel wird populär genug. Wenn nicht, brauchst du dir allerdings auch keine Sorgen darum machen, dass jemand damit rumspielt.

Und warum solltest du das verbieten? Am Ende kriegst du vielleicht noch ein paar Mods von Fans gebaut, was sich auch nur positiv auswirken kann.

Natürlich kannst du den Aufwand betreiben, bedenke aber auch dass dadurch zwangsläufig auch die Ladezeit (zumindest ein bißchen) steigen wird, wenn du erstnoch entschlüsseln musst. Ich würde es einfach lassen, wenn du keinen sehr guten Grund dafür hast.

3

28.05.2013, 17:13

Wir möchten 'Modding' (Cheaten) unterbinden!

Spieler A und B spielen ein Spiel gegeneinander, nachdem ein Server sie einander zugewiesen hat. Am Ende des Spiels melden sich beide wieder beim Server und Spieler A hat gewonnen, weil er in der *.xml-Datei eine Regel geändert hat. Dies hat zu einem asynchronen Spiel bei B geführt (möglicherweise). In jedem Fall bekommt Spieler A nun XYZ Coins als Preis.

Ich habe also entweder die Wahl, dies serverseitig zu unterbinden, oder direkt es dem Spieler zu erschweren, überhaupt solche Änderungen zu unternehmen.

€: Kann ich die Dateien eventuell (digital/asynchron) signieren?

Schrompf

Alter Hase

Beiträge: 1 470

Wohnort: Dresden

Beruf: Softwareentwickler

  • Private Nachricht senden

4

28.05.2013, 17:15

Etwas kniffliger als "Umbenennen" wäre "Archiv mit Passwort". Die Ladezeiten werden dadurch länger, wie rnlf schon schrieb, und die Leute müssten zumindest mit einem Hexeditor durch Deine Exe gehen und nach etwas suchen, was wie ein Passwort aussieht. Wenn Du das hinreichend kryptisch machst, wird die optische Erkennung nahezu unmöglich und man müsste decompilen, um herauszukriegen, wo das Passwort herkommt. Das macht es alles nicht absolut sicher - sowas gibt es bekanntermaßen nicht - aber Du schränkst die Zahl der Leute, die da noch rankommen, immer weiter ein.

Aber das ist eine rein theoretische Betrachtung. Praktisch sehe ich das wie rnlf: Du schadest Dir und Deinem Spiel mehr, als es Dir bringt, die Daten zu verstecken.
Häuptling von Dreamworlds. Baut aktuell an nichts konkretem, weil das Vollzeitangestelltenverhältnis ihn fest im Griff hat. Baut daneben nur noch sehr selten an der Open Asset Import Library mit.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

28.05.2013, 17:20

Wenn nur Modding verhindert werden soll, sollte eine Signierung genau das tun, was du brauchst. Nur das, was mit dem private Key signiert wurde, nimmt Dein Spiel an. Da niemand den private Key kennt, kannst nur du authentische Inhalte erstellen. Natürlich könnte man ein neues public/private Keypair erstellen und den public-key aus dem Game ersetzen. Aber das bedarf eben etwas Cracker-Arbeit, indem man den public key zuerst findet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (28.05.2013, 17:25)


rnlf

Frischling

Beiträge: 85

Beruf: Softwareingenieur Raumfahrt

  • Private Nachricht senden

6

28.05.2013, 17:41

Die einzige wirkliche Sicherheit bekommst du, wenn deine gesamte Kommunikation über den Server läuft. Der muss dann eben prüfen, ob alles was die Spieler tun auch regelkonform ist. Alles andere ist, grade wenn bei Onlinespielen, verschwendete Zeit, weil jemand, der cheaten will auch jede Lücke finden wird, die es gibt. Und wenn die Lücke darin besteht, dass die Regeln nur clientseitig überprüft werden (was hält einen ernsthaften Cheater davon ab, gleich den ganzen Client zu ersetzen oder den Netzwerkverkehr abzuändern?), wird sie wahrscheinlich sehr schnell gefunden.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

28.05.2013, 17:43

So ist es. Wem die Client-Logik nicht, der schreibt sich notfalls einen Bot. Der Server sollte bei so kritischen Dingen immer alles kontrollieren.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

8

29.05.2013, 09:48

Also die Idee ist mir jetzt einfach nur mal so gekommen :D, eventuell könnte dein Spiel ja Snapshots vom Spielverlauf / Zügen oder so anfertigen. Am Ende werden die mit zum Server geschickt und der überprüft anhand dieser ob das Ergebnis/Punktestand plausibel ist anhand der Aufzeichnungen. Ist nicht so sicher aber eventuell eine brauchbare Zwischenlösung. ( Also zu dem sichern deiner Archive )

Sicherheit gibt es nie, man muss eben einfach abwägen welcher Aufwand vertretbar für einen ist und ab welchem Punkt das Interesse zu schummeln dabei maximal reduziert ist.
:love: := Go;

simsusim

Frischling

Beiträge: 18

Wohnort: In einem kleinen Städtchen in Bayern

Beruf: Schüler(Gymnasium) 9. Klasse

  • Private Nachricht senden

9

29.05.2013, 14:43

Die Dateien einfach zu verschlüsseln ist auch nicht die beste lösung, da mit programmen, wie z.b. "strings" der schlüssel innerhalb weniger sekunden aus dem programm gezogen werden kann, du brauchst also eine lösung, bei der der schlüssel nicht im Programm steht. Könntest beispielsweiße den Schlüssel aus dem Dateinamen berechnen lassen (Irendwelche hashes, oder ohnliches), dass muss der Schlüssel immerhin schonmal aus dem RAM gezogen werden (was für Profis auch kein Problem ist, das ist aber schonmal ein ganzes stück schwerrer, als ihn aus dem Programmcode zu ziehen). Aber 100%-tige Sicherheit wirst du nie bekommen, da brauchst du schon ne Hardwareverschlüsselung mit Chipkarten, die kapput gehen, wenn man den Schlüssel abfragen will oder so. Was die Netzwerkkommunikation angeht, berechne doch einfach einen Schlüssel aus der IP oder so, um so komplizierter die Formel, desto länger dauert es, bis einer Drauf kommt. :D

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

29.05.2013, 14:58

Wie schon mehrfach gesagt wurde, dass ist alles ganz nett aber bringt nicht viel. Am meisten bringt es halt wenn der Server die Regeln bestimmt. Wenn es dir wirklich um Sicherheit geht dann schreib deinen Code so um, dass der Server alles vorgibt. Der Server ist König und dann musst du dir keine Gedanken mehr um so halbherzige Cheatschutze machen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige