# Highscore online speichern



## fleckdalm (17. Okt 2011)

Ich würde gerne bei meinem Spiek den Highscore online speichern.
Ich weiß nur nicht wie ich da am besten vorgehen soll 
Eine php datei am server die die fragen entgegennimt geht nicht da die ja von jedem aufgerufen werden könnte der dann seinen highscore eingibt. Per ftp z.B eine txt datei mit den punkzen hochladen geht nicht weil ich dann ja mein passwort angeben müsste das dann ausgelesen werden kann.
wie kann ich das also am besten machen?

Danke, Grüße fleckdalm


----------



## moccajoghurt (17. Okt 2011)

Wenn du die Highscore-Abfrage und Eingabe in dein Java Programm integrierst, dann kann ja keiner sehen wo du den Highscore gespeichert hast und wie du auf ihn zugreifst. Der Login kann doch nach jedem Spiel von deinem Programm abgefragt / eingegeben werde.


----------



## fleckdalm (17. Okt 2011)

Das problem ist nur das man die login daten 1. Mit wireshark auslesen kann und 2. Sieht man sie ja im quellcode...


----------



## SlaterB (17. Okt 2011)

du kannst noch im Quellcode verschlüsseln, mit beliebigen Lösungen, von einfach bis kompliziert,
nur wenn man "tiuiouo5470567ruruu" sendet, macht der Server etwas daraus, 
evtl. von Dingen wie Tag/ Uhrzeit/ vorherige Nachricht des Server abhängig, um selbst Wiederverwendung eines einmal gültigen Eintrags zu verhindern,

auch das könnte man letztlich alles aus dem Quellcode herauslesen und kopieren, 
aber so gesehen könnte man ja auch das Spiel ändern und sich mit einem Klick 1 Mio. Punkte geben.. 
(+ legalen Upload dieses Scores  )


----------



## fleckdalm (24. Okt 2011)

Ich habs jetzt so ähnlich gemacht (das mit der zeit ist blöd weil viele eine falsche systemzeit haben, deshalb habe ichs so gemacht das ein code aus den ascii werten des benutzernamens und dem passwort errechnet wird!). Es funktioniert auch, nur leider ist es nicht sicher Ich wurde schon mehrmals gehackt und langsam reichts mir da dauernd die falschen scores rauslöschen zu müssen! Hat nicht jemand noch eine bessere Idee?? Das mit der Zeit ist glaube ich auch nicht sicherer da es ja auf gleiche hinausläuft! Man muss nur ein paar passwörter mit z.B. wireshark auslesen und dann gibt es programme die herausfinden wie man auf die passwörter kommt...

Danke, Grüße Fleckdalm


----------



## schalentier (24. Okt 2011)

Die kurze Antwort: Es geht nicht sicher. Wenn der Client Punkte hochladen kann, kann man es auch manipulieren.

Die laengere: Du kannst es so schwer wie moeglich machen, dass man Fakes hochlaed. Verschluesseln ist der erste Schritt, aber nicht sehr sicher. Am besten waere es, wenn man nur auf Onlineservern spielen kann, die jede Aktion des Spielers empfangen und auswerten, um dann selbst die Punkte zu berechnen und einzutragen. Alternativ schickst du ein Replay zum Server, mit allen Maus- und Tastendruecken zum Server, der das dann quasi nachspielt und das Ergebnis eintraegt. Oder du versuchst irgendwie die Fakepunkte automatisiert zu erkennen und zu loeschen (machst du ja grad irgendwie manuell, das halt in Code giessen). 

Ziemlich schwieriges Thema, wenn du eine universale und geniale Loesung findest, lass es uns wissen ;-)


----------



## SlaterB (25. Okt 2011)

> Man muss nur ein paar passwörter mit z.B. wireshark auslesen und dann gibt es programme die herausfinden wie man auf die passwörter kommt...
schwer vorzustellen, aber wenn es so ist..,
wie bist du denn bisher aus Username Passwort vorgegangen, was konkret hast du damit gemacht?

vielleicht kannst du die Datenmenge dennoch schwerer machen, und noch unvorhersehbarer:
für jede Übertragung einen neuen Schlüssel, analysieren kann man den kaum, man müsste schon das Verfahren exakt nachrechnen,
als Input brauchst du auch nicht irgendwas vom User eingegeben, können beliebige Zufallswerte sein, mit Random vor dem Senden erstellt,
beliebige Anzahl an Bits, je mehr desto schwieriger hoffentlich, wenn sinnvoll genutzt,
evtl. kannst du paar Regeln einbauen, Bit 5 kleine als Bit 4, Bit 9 kleiner Bit 8 usw., das macht das Verwenden einer zufälligen Bitfolge um Wahrscheinlichkeit x inkorrekt,
die aktuelle Zeit würde ich immer noch reinnehmen, die kann auch vorher vom Server abgefragt werden, dessen Zeit,
bzw. dort ein Unique-Zähler, jede Anfrage bekommt eine neue eindeutige Id als Startwert,
oder gleich die kompletten 0-1000 Bytes Schlüssel vom Server senden lassen, nur für die nächsten 10 sec für eine Antwort gültig,
ein professionelles Tool mit automatisierter Verarbeitung wird das sicher nicht schocken, aber wer weiß wie manuell die Vorgänge sind

im Programm dann auf mehr oder weniger komplexe Weise den Schlüssel evtl. noch modifizieren, und letzlich mit den Nutzdaten verknüpfen, 
allein gegen Analyse sollte ein nicht vorhersehbarer Schlüssel eigentlich reichen, dann nur Daten mit XOR verknüpfen, 
ok, vielleicht nicht ganz so leicht

um gegen Nachbau des Codes zu schützen sollte es vielleicht komplizierter sein, aber da kann man auch viel falsch machen,
tausend scheinbar komplizierte Operationen sind letzlich nur eine Veränderung, kenne ich auch nicht so genau


----------



## fleckdalm (25. Okt 2011)

SlaterB hat gesagt.:


> > Man muss nur ein paar passwörter mit z.B. wireshark auslesen und dann gibt es programme die herausfinden wie man auf die passwörter kommt...
> schwer vorzustellen, aber wenn es so ist..,
> wie bist du denn bisher aus Username Passwort vorgegangen, was konkret hast du damit gemacht?


summe der ascii werte des benutzernamens und die punkte und mit den beiden dann recht viele sinnlose berechnungen... Es ist eben nur das problem das es programme gibt bei denen man nur die beiden werte und die (mit wireshark ausgelesenen) passwörter angibt und es errechnet dann wie die passwörter berechnet werden=> man kann dann das passwort von einer beliebigen benutzername, punkte kombination errechnen lassen und dann eben damit den Highscore manipulieren


SlaterB hat gesagt.:


> vielleicht kannst du die Datenmenge dennoch schwerer machen, und noch unvorhersehbarer:
> für jede Übertragung einen neuen Schlüssel, analysieren kann man den kaum, man müsste schon das Verfahren exakt nachrechnen,


wie bereits oben beschrieben ist dieses nachrechnen leider nicht so schwer...


SlaterB hat gesagt.:


> als Input brauchst du auch nicht irgendwas vom User eingegeben, können beliebige Zufallswerte sein, mit Random vor dem Senden erstellt,


das wäre auch zu einfach man gibt dann der php dateien einfach immer den gleichen wert (von dem weiß man dann ja das passwort).


SlaterB hat gesagt.:


> beliebige Anzahl an Bits, je mehr desto schwieriger hoffentlich, wenn sinnvoll genutzt,
> evtl. kannst du paar Regeln einbauen, Bit 5 kleiner als Bit 4, Bit 9 kleiner Bit 8 usw., das macht das Verwenden einer zufälligen Bitfolge um Wahrscheinlichkeit x inkorrekt,
> die aktuelle Zeit würde ich immer noch reinnehmen, die kann auch vorher vom Server abgefragt werden, dessen Zeit,
> bzw. dort ein Unique-Zähler, jede Anfrage bekommt eine neue eindeutige Id als Startwert,
> ...


Danke, ich werde noch ein bisschen herumprobieren Falls noch wer tipps hat immer nur her damit!

Grüße Fleckdalm


----------



## SlaterB (25. Okt 2011)

> Es ist eben nur das problem das es programme gibt bei denen man nur die beiden werte und die (mit wireshark ausgelesenen) passwörter angibt und es errechnet dann wie die passwörter berechnet werden

das ist aber nun wirklich vom eigenen Verfahren abhängig, nicht allgemein der Fall,
ich nehme an du hast selber nicht diese Programme, so dass es jetzt schwer wird Beispiele auszuprobieren,

aber wie gesagt: schon neue Schlüssel, so dass nicht ein und derselbe Key mit mehreren Scores (10000 Punkte, 100001 Punkte, 100002 Punkte) ausprobiert werden kann, und nach 5 Stunden Test dann mit ausgedachten Score benutzt wird, bringt viel,
dass das aber überhaupt jemand macht erscheint mir äußerst abwegig


----------



## TheDarkRose (25. Okt 2011)

Weil hier die Problematik mit Wireshark angesprochen wurde. Eine verschlüsselte Verbindung ist hier normalerweise schon Pflicht.


----------



## fleckdalm (26. Okt 2011)

Wie verschlüsselt man die Verbindung denn am besten?

Grüße Fleckdalm


----------



## SlaterB (26. Okt 2011)

ich vermute z.B. SSL mit entsprechenden Aufwand
SSL Socketverbindung mit Java @ tutorials.de: Tutorials, Forum & Hilfe

alles andere was hier versucht wird ist mehr oder weniger dasselbe, nur selber gebaut und damit schlechter


----------



## Tobse (26. Okt 2011)

Du könntest einen Timestamp mitschicken, der z.B. maximal um eine Sekunde der Serverzeit abweichen darf. Damit ist das manuelle eintragen von highscores schonmal fast unmöglich. Wenns dann aber ein programm gibt das da heisst "Highscore-Maker for XY" hast du eh verloren xD


----------



## TheDarkRose (26. Okt 2011)

Um 1 Sekunde? Weißt eh wie viele Systeme um mehrere Minuten gerne abweichen?


----------



## SlaterB (26. Okt 2011)

wie gesagt Doppelanfrage, 
erst Timestamp oder Ticket oder was auch immer vom Server abfragen und damit dann was anstellen


----------

