.ini verschlüsseln

  • GM 7

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • .ini verschlüsseln

    Guten Abend!

    Es tut mir schon fast selbst weh, dass ich diese Frage stellen muss, obwohl es schon so viele Threads und .Dll's gibt.
    Aber ich komm einfach nicht dahinter wie man eine .ini verschlüsseln soll. Ich verzweifel da seit Stunden dran und werde daran noch verrückt!

    Ich möchte eine variable (global.coinsshop) so speichern, dass diese beim Neustart des Spieles den selben Wert wie vorher hat, dafür speicher ich den Wert in einer
    .ini Datei. Diese kann aber jeder x-beliebige :rage: bearbeiten, was natürlich Mist ist.


    Deswegen hab ich mich in das Thema verschlüsseln bzw. encyrpten/Decyrpten eingelesen, aber egal welche DLL ich verwende ich bekomme nie das richtige Ergebnis hin.
    Sobald das Spiel auf irgendeine weise beendet wird, soll diese variable sicher gesichert werden und beim Neustart geladen werden, so das global.coinsshop beim Neustart nicht wieder 0 ist.


    Tut mir Leid, dass ich ein Thema was schon so oft aufgegriffen wurde erneut aufgegriffen wird, aber ich komm leider nicht dahinter, da mein Wissen eigt. schon fast wieder bei 0 angekommen ist :|
  • Wieso überhaupt verschlüsseln? Bei einem reinen Singelplayerspiel ohne (Online-)Highscore macht das kaum Sinn. Es gibt da die XOR-Verschlüsselung, die bringt aber nichts wenn man den Wert der zu verschlüsseln ist kennt (d.h. kennt man Geheimtext und Klartext kann man den Schlüssel berechnen). Du kannst den Wert zusammen mit einer Prüfsümme in einem eigenen Verfahren verschlüsseln (Zahl um bestimmten Wert addieren, Ziffern umdrehen, Ziffern verschieben...), die Prüfsumme ist nur da um zuüberprüfen ob der entschlüsseltene Wert auch richtig ist.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • henrik1235 hat da schon Recht. Aber wenn du von einer INI weg gehst und die Variabeln einfach in eine Datei speicherst,
    kannst du da nach belieben verschlüsseln.
    Und das könnte dann im einfachen Fall (Bitweise Verschiebung) so aussehen. Mal eben zusammengematscht.
    Das nur als Denkanstoß, weiß ja nicht wie wichtig dir die Verschlüsselung ist.




    GML-Quellcode

    1. global.check = 4711 // Prüfsumme, irgendeine Zahl
    2. global.coinshop = 1234567 // Deine aktuelle Variabel
    3. encrypt_var = 0 // Wird temporär zur Berechnung benutzt
    4. //Prüfsumme verschlüsseln. 7 und 4 nur als Beispiel
    5. global.check=(global.check<<7) + 4 // Bitweise 7 nach links verschieben und die Zahl um 4 erhöhen
    6. //Deine Variabel verschlüsseln. 6 und 3 nur als Beispiel
    7. encrypt_var = (global.coinshop<<6) + 3 // // Bitweise 6 nach links verschieben und die Zahl um 3 erhöhen
    8. // Beide Variabeln Speichern
    9. fileid=file_text_open_write("c:\temp\var.cfg")
    10. file_text_write_real(fileid,global.check)
    11. file_text_write_real(fileid,encrypt_var)
    12. file_text_close(fileid)
    13. // Beide Variabeln Einlesen
    14. fileid=file_text_open_read("c:\temp\var.cfg")
    15. global.check=file_text_read_real(fileid) // Zuerst die Pruefsumme
    16. global.coinshop=file_text_read_real(fileid) // Dann die eigentliche Variabel
    17. file_text_close(fileid)
    18. // Prüfsumme entschlüsseln
    19. global.check=(global.check-4) >>7 // Pruefsumme wieder entschlüsseln
    20. if (global.check==4711) //Wenn Prüfsumme korrekt, dann global.coinshop entschlüsseln
    21. {
    22. global.coinshop=(global.coinshop-3) >>6
    23. }
    24. else
    25. {
    26. show_message("Die Prüfsumme ist falsch, Daten wurden verändert!") // Da hat wohl jemand Daten verändert
    27. }
    Alles anzeigen
    ---------------------------
    http://games.pixas.de
    ---------------------------
  • Man könnte auch super zum score ganz viele control variablen anlegen und mit abspeichern.
    Etwa so:

    GML-Quellcode

    1. control1=score/3
    2. control2=score+639
    3. control3=score-987455
    4. control4=score*-1
    5. control5=score*56
    6. //usw.............


    Und beim lesen dan prüfen ob das alles noch stimmt:

    GML-Quellcode

    1. if control1=score/3
    2. if control2=score+639
    3. //usw..... und dann das Spiel laden.
    4. else{
    5. show_message("Ha ha, ich lade keine veränderten daten!")
    6. file_delite(save.ini)//Und dann noch schnell frech die Datei löschen.
    7. }



    Wenn ich dir ein example machen soll, sag bescheid.
    Kopiere dies in deine Signatur, um es in deiner Signatur zu haben.
    Achtung: Dieser Beitrag läuft ende des Monats ab, bitte lese ihn noch vor dem Monatswechsel...
    Nach langer zeit wieder im Forum aktiv :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Larsi ()

  • Hmm.. das Forum scheint sich mit Apple nicht zu vertragen :S

    Vielen Dank für die schnelle Hilfe, dies versteh ich schon um einiges besser! :)
    Ich werde das ganze gleich mal testen und versuchen anzupassen, falls ich nicht weiterkommen sollte meld ich mich ^^


    Edit:
    @Skywalker: Leider kann man bei deinem Beispiel einfach nur die 2. variable ändern und schon hat man eine erhöhte Punktzahl, ohne das dies das System erkennt.
    Man kann zwar sehr viele variablen erstellen und auch alle verschlüsseln lassen und mit speichern, so dass man zuerst nicht weiss, aber wenn man z.B das Spiel speichert mit 40 Punkten und sich alle Zahlen aus der Datei kopiert und dann auf 800 Punkte spielt guckt man einfach wieder in die Datei und vergleicht alle Zahlen. Eine von denen hat sich nur verändert. :-/

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Prustel ()

  • Prustel schrieb:


    @Skywalker: Leider kann man bei deinem Beispiel einfach nur die 2. variable ändern und schon hat man eine erhöhte Punktzahl, ohne das dies das System erkennt.

    Tja da hast du wahrhaftig recht. :wacko:

    War wohl etwas spät gestern, deshalb hatte ich da gar nicht dran gedacht. Außerdem funktionierte auch das Bitweise verschieben nicht, da die Bits nicht rotieren.
    Also das Bit was links herausfiel, kam rechts nicht wieder rein. Habe den Code nun abgeändert und etwas optimiert. So sollte es nun klappen.

    GML-Quellcode

    1. global.coinshop = 0 // Deine aktuelle Variabel
    2. global.check = 4711 + global.coinshop // Prüfsumme, irgendeine Zahl
    3. encrypt_var = 0 // Wird temporär zur Berechnung benutzt
    4. //Prüfsumme 32bit verschlüsseln. 7 und 4 nur als Beispiel
    5. global.check=(global.check<<7 | (global.check>>31) & $FFFFFFFF) +4 // Bitweise 7 nach links verschieben und die Zahl um 4 erhöhen
    6. //Deine Variabel doppelt verschlüsseln. 6 und 33 nur als Beispiel
    7. encrypt_var = (global.coinshop<<6 | (global.coinshop>>31) & $FFFFFFFF) +33 // Bitweise 6 nach links verschieben und die Zahl um 33 erhöhen
    8. encrypt_var = (encrypt_var<<3 | (encrypt_var>>31) & $FFFFFFFF) // Bitweise 3 nach links verschieben
    9. // Beide Variabeln Speichern
    10. fileid=file_text_open_write("c:\temp\var.cfg")
    11. file_text_write_real(fileid,global.check)
    12. file_text_write_real(fileid,encrypt_var)
    13. file_text_close(fileid)
    14. // Beide Variabeln Einlesen
    15. fileid=file_text_open_read("c:\temp\var.cfg")
    16. global.check=file_text_read_real(fileid) // Zuerst die Pruefsumme
    17. global.coinshop=file_text_read_real(fileid) // Dann die eigentliche Variabel
    18. file_text_close(fileid)
    19. // Prüfsumme entschlüsseln
    20. global.check=global.check -4 // Pruefsumme wieder entschlüsseln Schritt 1
    21. global.check=(global.check>>7 | (global.check<<31) & $FFFFFFFF) // Pruefsumme wieder entschlüsseln Schritt 2
    22. global.coinshop=global.coinshop>>3 | (global.coinshop<<31) & $FFFFFFFF // Variabel wieder entschlüsseln Schritt 1
    23. global.coinshop=global.coinshop -33 // Variabel wieder entschlüsseln Schritt 2
    24. global.coinshop=global.coinshop>>6 | (global.coinshop<<31) & $FFFFFFFF // Variabel wieder entschlüsseln Schritt 3
    25. if (global.check-global.coinshop==4711) //Prüfsumme richtig oder falsch?
    26. {
    27. show_message("Die Prüfsumme ist richtig!") // Prüfsumme ist korrekt
    28. }
    29. else
    30. {
    31. show_message("Die Prüfsumme ist falsch, Daten wurden verändert!") // Da hat wohl jemand Daten verändert
    32. }
    Alles anzeigen
    ---------------------------
    http://games.pixas.de
    ---------------------------

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Skywalker ()

  • Vielen Dank Skywalker - jetzt funktioniert es :)
    Ich musste nur noch sobald die Variablen verschlüsselt wurden vorher erneut global.coinshop zu global.check hinzufügen, weil man ansonsten im Spiel ja keine Punkte dazubekommen konnte, ohne das dies zu einer falschen Prüfsumme führte.
    Ja ich weiß, mit der Cheatengine können die das eh ganz leicht ändern, aber da nicht jeder das Programm besitzt bzw. für so ein Spiel minimalen Aufwand fürs cheaten aufbringen will ist es okay.

    Ich verwende momentan zudem den Online Highscore von Blackspark(?), funktioniert auch alles soweit. Das man diesen ändern kann weiß ich auch, aber einen kleinen Schutz dafür hab ich schon :-)
  • Benutzer online 1

    1 Besucher