high scores in exe speichern

  • VB.NET

Es gibt 20 Antworten in diesem Thema. Der letzte Beitrag () ist von Niko Ortner.

    high scores in exe speichern

    Hallo,
    für ein kleines Spiel das ich derzeit programmiere habe ich einen Highscore -
    die ersten 5 sollen mit namen und punktezahl gespeichert werden.
    das habe ich derzeit mit einer textfile die im folder der exe liegt gelöst.
    die scores lassen sich also leicht von außen editieren.

    ich habe jetzt 4 möglichkeiten:
    1. textfile IRGENDWO auf andwender pc verstecken (doof)
    2. textfile mit einem algorithmus verschlüsseln (schießt übers ziel hinaus)
    3. in die registry schreiben (ist aber auch editierbar)
    4. Die scores irgendwie in die exe einbinden

    Hat wer eine ahnung wie das geht?
    Vielen Dank!

    Dr_Gre schrieb:

    2. textfile mit einem algorithmus verschlüsseln (schießt übers ziel hinaus)

    So würde ich es machen und den Schlüssel hardcodet in der exe speichern.
    Ich denke, für den "Normalbetrieb" reicht das aus, ansonsten online speichern, da kann keiner so leicht dran fummeln.
    @Dr_Gre Nimm statt der ersten realen 5 lieber Dummy-Namen und Punkte, die kannst Du einfach generieren und auf Platte speichern. Die realen Werte überschreiben dann einfach die Dummy-Werte.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Pasta schrieb:

    Dr_Gre schrieb:

    2. textfile mit einem algorithmus verschlüsseln (schießt übers ziel hinaus)

    So würde ich es machen und den Schlüssel hardcodet in der exe speichern.
    Ich denke, für den "Normalbetrieb" reicht das aus, ansonsten online speichern, da kann keiner so leicht dran fummeln.

    welchen verschlüsselungsalgorithmus würdest du da nehmen? Vigenere code hätte ich mal ausprogrammiert, oder ist der zu leicht zu knacken?Man muss bedenken dass diescore datei aus nur etwa 60 Zeichen besteht.

    @RodFromGermany was meinst du mit auf der Platte speichern? Die 5 dummie namen liegen bereits auf einer textfile auf der festplatte in dem gleichen ordner wie die exe. ich hätte diese file bzw dessen inhalt halt gerne in die exe eingebettet, sodass die werte nicht von außen editierbar sind.

    Dr_Gre schrieb:

    in die exe eingebettet
    geht nicht.
    Wen interessiertr es, wenn sich klein Fritzchen 100000 Zusatzpunkte einträgt?
    Spielst Dü über Internet?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Dr_Gre schrieb:

    verschlüsselungsalgorithmus
    halte ich für oversized.
    Wenn Du die Parameter und die HighScore-Liste in den Standard-Settings ablegst, sind sie sehr gut geschützt, denn die liegen in einem kryptischen und hidden Pfad im User-Verzeichnis.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Echt jetzt Fakiz? Dem TE ist "eine textfile mit einem algorithmus verschlüsseln" eigentlich schon zu groß und du schlägst ne Passwort geschützten Datenbank vor?

    Naja bei den Settings musst du nur bedenken, dass diese jedes mal verloren gehen, wenn die Exe verschoben oder umbenannt wird.
    ich ver- und entschlüssle jetzt die Scores einfach mit einem simplen Vigenere Algorithmus. ist bei der kleinen anzahl an zeichen glaube ich kaum zu knacken:

    Quellcode

    1. Private Function vigenere(text As String, key As String, decrypt As Boolean) As String
    2. Dim text_char() As Char = text.ToCharArray()
    3. Dim key_char() As Char = key.ToCharArray()
    4. Dim d As Integer 'zwischenspeicher für char
    5. Dim new_text As String = ""
    6. For i As Integer = 0 To text_char.Length - 1
    7. If decrypt Then 'entschlüssle
    8. d = Convert.ToInt16(text_char(i)) - Convert.ToInt16(key_char(i Mod key_char.Length))
    9. Else 'verschlüssle
    10. d = Convert.ToInt16(text_char(i)) + Convert.ToInt16(key_char(i Mod key_char.Length))
    11. End If
    12. If d < 0 Then d += 128
    13. If d > 127 Then d -= 128
    14. new_text &= Convert.ToChar(d)
    15. Next
    16. Return new_text
    17. End Function
    @Dr_Gre
    kaum zu knacken


    Ich biete 10 Minuten.

    Verschlüsseln ist ja schön und gut, aber das nützt überhaupt nichts, wenn der Schlüssel im Code steht.
    Man muss immer nachdenken, was man vor wem schützen will. Da hier der User nur mit sich selbst alleine spielt, schadet er sich schlimmstenfalls nur selbst, wenn er die Highscore-Liste manipuliert. Deshalb ist es nur bedingt sinnvoll, überhaupt Schutzmechanismen einzubauen.
    Falls es denn überhaupt möglich ist, denn: Wenn Dein Programm die Highscore-Liste verändern kann, dann kann das der User auch. Deshalb bringt eine Verschlüsselung hier nicht wirklich was.
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils

    Niko Ortner schrieb:

    Deshalb bringt eine Verschlüsselung hier nicht wirklich was.

    Es geht ja nur darum, es nicht zu einfach zu machen, dafür reicht das aus. "Sichere" Highscores, sind wohl nur online machbar.
    Der Vorschlag von SpaceyX reicht dafür aber auch und ist weniger aufwändig.
    Und selbst wenn der Schlüssel nicht im Code steht kann man die Sub einfach schnell selber laufen lassen und den Wert in der Textdatei überschreiben....

    Es gibt auch keine 100% sichere Möglichkeit weil man dem Client nie vertrauen kann und in VB.Net es sehr einfach zu decompiliren ist. Zur Sache mit dem Server: 1. Problem: man muss immer online sein. 2. Problem man kann eine andere exe bauen die einfach selbstständig eine Highscore hochläde...

    Die Frage ist, ist es den Aufwand wert? Man kann die Datei einfach verstecken, dann ist es für die meisten schonmal nicht so einfach das Ganze zu editieren weil sie nicht ins Auge springt.

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Ok, danke für die zahlreichen Antworten!
    die ursprüngliche Frage ist ja jetzt beantwortet - also thema erledigt :)
    Ich glaub ich belass es jetzt einfach bei der vigenere verschlüsselung - ist zwar knackbar wenn man das programm dekompiliert, aber was solls - sind ja keine hochsensiblen Daten :D

    Eine Interessante Frage ergibt sich mir jetzt aber aus euren Antworten: Wenn man nun ein Programm hätte das hochsensible Daten verwaltet (offline), oder ein Programm von dem man nicht will das dessen Code nachgemacht wird - kann man das irgendwie vor dem dekompilieren schützen?
    Jaein. Es gibt zwar eine Method, dass Ganze nennt sich obfuscating, aber das ist sozusagen Sicherheit durch Chaos (um hier James Bond zu zitieren xD), dadurch wird der Code nur ranziger/langsamer und es kostet den Angreifer nur mehr Zeit und Aufwand. Um sensible Daten zu schützen kann man diese z.B. mit einem Passwort vom Nutzer verschlüssel/ Hardware mit einbauen (Dongle)(nich sehr sicher) oder die Daten an einen sicheren Ort bringen (Server).

    Lg Mokki
    ​Smartnotr - ein intelligentes Notizprogramm
    zum Thread

    Mokki schrieb:

    ranziger/langsamer
    Ne, wie kommt du da drauf? Der CLR ist es egal, dass Methoden mit kryptischen Chinesischen Zeichen benannt sind und auch kaputte Metadaten sind ihr völlig gleich. Wenn du den Obfuscator nicht all zu Aggressiv einstellst merkst du als Programmierer und Endnutzer davon nix, nur manche Reflection Konstrukte funktionieren dann nicht mehr. Aber ich will das auch nicht schönreden, Sicher ist es dadurch trotzdem nicht. Wie du schon sagst: kostet den Angreifer nur mehr Zeit und Aufwand.

    Mokki schrieb:

    ​Obfuscate => mehr Zeilen Code
    Selbe Frage: Wie kommst du da drauf? Es gibt ja unglaublich viele arten, auf die man Obfuskieren kann, aber die meisten packen den Programmcode gar nicht an sonder zerstören Header/Metadaten oder benennen alle Variablen und Methoden um. Der Programmcode wird nicht länger.