Spieldateien vor Manipulation schützen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ozzi789

Betreff: Spieldateien vor Manipulation schützen

BeitragMo, Jan 30, 2012 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Nehmen wir an wir haben eine Datei in der alle Zaubertränke für ein Spiel gespeichert sind.
Folgender Aufbau sei gegeben:

Zitat:
Health Potion small
add_health
30
Health Potion big
add_health
50


Nun könnte ein User sehr schnell sowas basteln
Zitat:
Health Potion small
add_health
100

Und schon hätte er einen "Cheat".

Wie verhindere ich solche Dinge am besten?
Wie habt ihr es bei euren Projekten gemacht?
(Mir ist klar das mit genügend Aufwand alles erreicht werden kann.)
Hat jemand eine sehr schnelle Verschlüsselungsfunktion gerade zur Hand?


Grüsse,
Ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Tankbuster

BeitragMo, Jan 30, 2012 14:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Verschlüsseln ist hier wohl die beste Sache. Das geht einfach mit der Caesar-Verschlüsselung, oder mit dem Bit-Flip (indem man alle Bits zu Not(Bit) macht, also Nullen und Einsen vertauscht. Sowas hält den normalen 0815-User davon ab, die gespeicherten Daten zu manipulieren.
Twitter
Download Jewel Snake!
Windows|Android

ozzi789

BeitragMo, Jan 30, 2012 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Dacht ichs mir.. Smile
Ich glaube ich code mir kurz ne Vernam-Chiffre Funktion.. mal schauen ob der Speed taugt.

Mehr Ideen?
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Xeres

Moderator

BeitragMo, Jan 30, 2012 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Eine eigene Dateiendung hält ein Großteil davon ab, in die Datei hinein zu schauen.
2. Statt reintext würde ich Write/ReadInt,String benutzen: Das gibt höchstens wirre Zeichen im Texteditor und bräuchte mehr Zeit zu dechiffrieren als jemand für ein kleines Spiel einsetzen würde.
2a. Falls es unbedingt Text sein muss mit Xor verschlüsseln ist eine simple, schnelle Variante.
Edit-->
BlitzBasic: [AUSKLAPPEN]
Local txt$="Angriff im Morgengrauen!"

Print(txt)
Print("")
txt=Crypt(txt, 42)
Print(txt)
Print("")
txt=Crypt(txt, 42)
Print(txt)
WaitKey()
End

Function Crypt$(txt$, key%)
Local out$, i%
For i=1 To Len(txt)
out=out+Chr(Asc(Mid(txt,i,1)) Xor key)
Next
Return out
End Function

<--Edit
3. MD5/SHA Hashes des Dateiinhalts berechnen und mit soll vergleichen - dann müsste man auch die Exe manipulieren.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Mo, Jan 30, 2012 14:52, insgesamt einmal bearbeitet

Tankbuster

BeitragMo, Jan 30, 2012 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Schreibe die gespeicherten Sachen nicht in eine extra-Datei, sondern packe sie in eineschon bestehende (natürlich auch verschlüsselt), damit man garnicht erst in Versuchung kommt Razz

Allerdings hab ich mich mit sowas noch nicht beschäftigt. Dafür musst du dann die ganzen Formate erstmal durchforsten, ob es dafür irgendeine Möglichkeit gibt....(ich denke da an .pngs oder so) Ist sicherlich viel Arbeit, und ob diese sich dann lohnt, ist die andere Frage.
Twitter
Download Jewel Snake!
Windows|Android

ozzi789

BeitragMo, Jan 30, 2012 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow danke Xeres die Xor Funktion sieht sehr gut aus!
(Es muss wirklich Text sein ja Smile )
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Jan_

Ehemaliger Admin

BeitragMo, Jan 30, 2012 15:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Checksummen, zeigen dir, ob sie verändert wurden.
Also, verschlüßeln + Checksumme, sollte die Bude Rocken.
between angels and insects
 

PhillipK

BeitragMo, Jan 30, 2012 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
In meinen ersten Netzwerk-spiel-tests habe ich immer eine vereinfachte version einer Checksumme genommen.

Jedes Zeichen wurde als ascii-wert addiert, bzw subtrahiert. Je nach muster. Zb wurde jedes 5te Zeichen subtrahiert.
Das ergab dann ein schöne zahl, aufgrund von Integer-überlauf etc und relativ eindeutige zahlen, dafür das es eigentlich simpel war.

Alternative idee:
Speicher eine kopie solcher dateien anders verschlüsselt. Die "hauptdateien" lässt du offen und lesbar in deinem Projekt. Hat nun jemand die datei verändert, erkennst du dies beim laden und ersetzt sie vorher mit der sicherheitskopie. Ist aber nur bei kleineren einstellungsfiles und scripten zu empfehlen.

ZaP

BeitragMo, Jan 30, 2012 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest dich grundsätzlich fragen, ob Du überhaupt Cheatsicherungen einbauen willst. Wenn der Spieler meint, er müsse unbedingt Cheaten, dann sei es drum, stört doch keinen, solange es ein Singleplayer Spiel ist. Bei Multiplayer Spielen ist der Beitrag jetzt natürlich obsolet.
Starfare: Worklog, Website (download)

Pummelie

BeitragMo, Jan 30, 2012 16:37
Antworten mit Zitat
Benutzer-Profile anzeigen
CRC ist bei soetwas meine liebste Wahl, du kannst dir aber auch anders abhelfen, z.B. die Daten bei jedem Start aus dem Netz laden (was auch Manipuliert werden kann, aber schon erheblich schwerer ist) usw...
It's done when it's done.

Jan_

Ehemaliger Admin

BeitragMo, Jan 30, 2012 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder eine Verschlüßelung mit Privat und Public Key Very Happy ok, das ist nicht schnell, aber genau das was du suchst.
between angels and insects
 

René Meyer

BeitragSa, Feb 04, 2012 3:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Viel verbreiteter als solche Dateimanipulationen, an die sich nur wenige herantrauen, sind doch Trainer - kleine Programme, die parallel zum Spiel laufen und solche Werte direkt im Arbeitsspeicher einfrieren.

Dafür gibt es komfortable Programme, mit denen selbst Laien mogeln können.

Viel Sinn hat das Chiffrieren von Dateien also nicht, wenn die Werte erst im RAM manipuliert werden.
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb

ozzi789

BeitragSo, Feb 05, 2012 18:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn sich jemand die Mühe macht einen Trainer zu schreiben, dann soll er halt cheaten.
Ist ja kein Multiplayer Spiel.

Ich will bloss nicht im Klartext die ganzen Inhalte rumstehen haben, und dafür genügt eine simple Verschlüsselung
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group