Wie kann ich den SQL-Daten vertrauen

G

Gastuser

Ambitioniertes Mitglied
5
Da dies mein erster Post hier ist, erstmal ein Hallo an alle :)

Seit einigen Monaten habe ich mich in Android eingearbeitet und mich wurmt immer ein Problem:
Szenario:
Spieleapp, 2 Spieler, verschiedene Skills, Skills upgradebar.

Die Daten sind in einer SQL DB hinterlegt. Wenn ich die beiden Spieler jetzt mit einander interagieren lasse, würde ich gern sichergehen, dass die Werte in der SQL-DB nicht manipuliert wurden.

Es ist mir bewusst, dass sich diesen Aufwand mit großer Sicherheit niemand machen würde. Aber rein theoretisch wär es mit etwas Aufwand möglich an die DB der App zu kommen und die Werte darin händisch zu manipulieren?

Gibt es einen Weg wie ich den Daten vertrauen kann?
Und in welcher Form werden "normalerweise" Spielewährungen gespeichert?


Hoffe vom Kontext ist mein Problem nachvollziehbar?

Danke euch im Voraus
 
Sind die Daten auf den jeweiligen Geräten gespeichert?
Oder zentral auf einem Server?

Wenn pro Gerät, dann kann man da (mit root rechten) wohl relativ problemlos dran rum manipulieren, eigentlich gar kein Aufwand, DB kopieren mit dem passenden Tool öffnen und wie eine ExcelTabelle bearbeiten ;)

Die Frage ist was man machen will und wie sicher man das ganze machen will.
Grundsätzlich würde ich Daten nur auf einem zentralen Server vorhalten und zugriff dort nur über eine Rest-Api mit User Authentifizierung, so dass jeder user nur seine daten bearbeiten darf.
Dann natürlich noch plausibiltätsprüfungen bei änderungen mit einbauen.

Ansonsten kann man es versuchen den Leuten natürlich schwierig zu machen.
beispielsweise mit einer Hashberechnung für die Skills auf Serverseite.

Also wenn 2 Spieler gegeneinander spielen prüfen sie gegenseitig ihre Skills auf dem server und nur wenn der Sagt: "Is OK" kommt ein Spiel zustande oder ähnliches.

Man sollte die Clients halt niemals direkt die Daten schreiben lassen, sondern immer eine Schicht dazwischen setzen, mit der man nochmal die Daten prüft.
 
vielen Dank schon mal für deine Antwort.

Die Daten sollen jeweils lokal auf dem jeweiligen Gerät gespeichert werden.
Das ganze auf einem Server zu speichern und... ist die Alternative.

Jedoch hätte ich es schön gefunden, wenn ich den Daten auf dem Gerät vertrauen könnte.
 
Naja, altes Problem für das es bissher keine Lösung gibt.

Du kannst die kritischen Werte ja verschlüsseln. Dann kann sie niemand einfach mal so ändern. Aber wenn jemand in deiner apk rumfummelt (um den Schlüssel zu finden oder immer voll Gold zu patchen) kannst du eh nix machen.

cu
 
Man kann sogar prinzipiell festhalten, dass es niemals möglich sein kann, dass Daten, die von einer Maschine unter fremdem Zugriff bearbeitet werden, sicher sein können, denn alle Schlüssel, die auf einer Maschine unter fremden Zugriff liegen (oder bearbeitet werden), können von einem Menschen gefunden werden. Nur Daten, die von einem Menschen im Kopf gehalten werden, oder von einer Maschine die nur unter eigenem Zugriff steht, sind sicherbar.
 
  • Danke
Reaktionen: hallodri
Ja das ist auch das was ich befürchtet hab. Ich kann es zwar schwerer machen aber nicht unterbinden.

Nochmal zurück zu den Bezahlwährungen. Was ist dort "Best Practice"?

Ich mein sobald es eine Rangliste gibt oder die Spieler miteinander interagieren muss es ja irgendwo "fair" zu gehen?
Grad wenn man Spiele sowohl online als auch offline spielen kann.
 
Also da bleibt eigentlich nur die Daten auf dem Server zu speichern und halt irgendwie zu prüfen.
Reine Ranglisten von eigentlichen Offline-Spielen sind oftmals halt auf den ersten Plätzen mit der Maximalpunktzahl belegt, weil da halt ein paar Spieler "Schummeln"
(siehe unten)

Und was meinst du mit Bezahlwährung? Das geht meiner Meinung nach überhaupt nicht mit Offline Spielen sinnvoll.
Offline spielen kann möglich sein, aber ab und zu müssen die Daten mit dem Server abgeglichen werden.

Ein gutes (wenn auch etwas älteres) Beispiel dazu ist/war Diablo 2.
Da gab es Offline Charaktere mit denen man zwar auch online spielen konnte, aber die konnte man problemlos "frisieren" und dann gab es das Battle.net.
Dort wurden die Charaktere auf den Battle.net servern gespeichert um solche Manipulationen zu unterbinden. Und nur damit konnte man halt an den offiziellen Ranklisten etc teilnehmen.

Anders ist das nicht Möglich bzw du kannst höchsten Extremwerte rausfiltern (wenn du z.B. weißt dein Spiel erlaubt eigentlich eine Maximalpunktzahl von 1000, aber jemand schickt dir für die Rangliste einen Wert von 10.000), alles andere kannst du nicht verhindern.

Beispiel "Flappy Bird": Wenn du da in die öffentliche Rangliste guckst haben da alle bis Platz 16 9.223.372.036.854.776.000 Punkte. (ungefähr Maximalwert von einem long java wert)

Beim echten spielen bräuchte man dafür über 292471208677 Jahre bei 1Punkt/Sekunde.
(Übrigens haben noch mehr Leute dort 2.147.483.647 Punkte was "zufälliger" weise die maximale Zahl in einem java int Wert ist ;))

Vermutlich haben die auf den ersten Plätzen an der App rumgefummelt und noch den eigentlichen int Zähler in long geändert ;)

Aber das ist halt ein gutes beispiel, das man Daten aus einem fremden System NIEMALS trauen kann (eigentlich nicht mal den eigenen Systemen) und man jeden Eingabewert in irgendeiner Form verifizieren muss.
 
Ich klinke mich jetzt einfach mal ein...
Wie macht google das mit dem play service?
Irgendjemand ne idee?

lg. Dagobert
 
Was genau meinst du?
Flappy Bird nutzt die Playservices für die Highscores, Google prüft da gar nichts.
 
das ist grundsätzlich ein interessantes thema.

erstmal würde ich keinen client ohne logik davor in meine server datenbank schreiben lassen!

meistens läuft es heute so das der user seine eingaben an der server schickt, dieser sie validiert und nach dem die engine drüber lief die passenden antworten zurück liefert.

was ich meine ist ....
wie stellt man sicher das in einem rpg mit ingame-zeugs der spieler auch wirklich bezahlt ?!?!?!?!
nur in dem sein item zeugs nicht auf dem client gespeichert wird sondern auf dem server. sollte man z.B. aus serverhardware gründen, traffic, rechen power oder nicht die performance zur Verfügung haben um alles auf dem server zu speichern kann man etwas auf dem client umlenken. die daten auf dem client werden dann gespeichert und aus allem im speicher (alles was spiele relevant ist) wird eine checksum gebieldet, nur diese übertrage ich an den server und vergleiche sie mit den auf dem server gespeicherten werten. absolut gang und gebe.
 
Wie auch sonst. Alle Daten auf einen Handy mit Rootrechten sind erstmal Freiwild.

Die gespeicherten Daten und das apk kann man sich ansehen und gegebenenfalls verändern. Außerdem kann man die Speicheradressen zur Runtime der App auslesen und manipulieren.

Man kann nur versuchen, Manipulationen so aufwendig wie möglich zu machen. Zum Beispiel, Logik auf den Server auszulagern.
 
Ja aber irgendwie muss google doch die play Game Services vor solchen offline Manipulationen schützen... Oder werden die Einträge nicht übertragen wenn ich offline bin?

LG.

Gesendet von meinem GT-I9300 mit der Android-Hilfe.de App
 
DagobertDokate schrieb:
Ja aber irgendwie muss google doch die play Game Services vor solchen offline Manipulationen schützen...[/SIZE]

Was bringt dich dazu das zu glauben?

Und schau mal in die reale Welt der Software und Medien. Nirgends gibt es einen wirksamen Schutz. Egal ob es um DRM geht oder um Schutz gegen Raubkopien.

Man kann so etwas schlicht und einfach nicht verhindern.

cu
 
Was bringt dich dazu das zu glauben?
Das ich doch hoffe das Google über so etwas nach gedacht hat... bevor sie so ein Dienst raus hauen...^^
 
google setz auf online zwang bei seinen diensten. kurzes beispiel, ist mir wirklich passiert !
sitze im zug, zug steht in einem provinz bahnhof, ich starte pvz2 (cloud message: herzlich willkommen user), starte level, zug fährt los, erreiche erfolg. weil ich aber keine verbindung mehr hatte wurde der erfolg nicht gewertet! ich musste um 100% archivments zu erreichen einen zweiten pvz player erstellen und alles bis dahin noch mal spielen um den erfolg gewertet zu bekommen.

grundsätzlich kann man die hürde für client manipulationen nur höher setzen, es aber nie ganz sicher bekommen. man könnte.:
-client seitig speicherstände verschlüsseln und
- server seitig die die komplette spielmechanik berechnen (so das der client nur noch eingabe controller und grafik ausgabe ist)

so bald es um echtgeld geht, muss man sich echt gedanken machen wie man den spieler daran hindert zu cheaten.
 
Hm.. okay so genau ist mir das noch nicht aufgefallen...
Weil ich ja auch "offline" voll lesend auf den Service zugreifen kann..
Ich dachte immer die Inhalte werden local gecacht.. und werden dann gesync wenn android denkt es ist ein guter Zeitpunkt...

lg.
 
DagobertDokate schrieb:
Ich dachte immer die Inhalte werden local gecacht.. und werden dann gesync wenn android denkt es ist ein guter Zeitpunkt...

das kann man auch alles machen wenn man möchte, das muss man halt so progeln(steht dir ja frei deinen client so zu progeln das bei fehlschlag einer übertragung die daten nochmal gesendet werden). man sollte halt nur drüber nachdenken wenn es um richtige kohle geht.
 
Eigentlich sollten die Google Services auch offline funktionieren und bei der nächsten Verbindung alles hochladen.

Aber woher soll der Google Service wissen, welche Daten erlaubt sind und welche nicht?
Nimm das Flappy Birds Beispiel:
Der extrem hohe wert kann ja theoretisch auch ein echter Wert sein, den man erspielen kann.

Hab die Play Services noch nicht aktiv genutzt daher ka ob und was man da noch einstellen kann.
 
Der extrem hohe wert kann ja theoretisch auch ein echter Wert sein, den man erspielen kann.
Ja das ist mir schon klar... aber ich dachte die play serivces verschlüsseln das.. ändern den key alle 2 stunden... oder schlag mich tot... weißt du .. iwas was die maupulation sehr sehr schwer macht...

lg.
 
Wenn Sie verschlüsseln dann braucht die App den Schlüssel. Und wenn die App den hat, dann hat den auch der Nutzer. Man kann so etwas nicht 100%ig sicher machen.

Und wenn man es schwer macht dann braucht es nur eine Person die es hackt, alle anderen können das Ergebnis des hacks dann einfach nutzen.

cu
 

Ähnliche Themen

M
  • mafoma63
Antworten
2
Aufrufe
760
swa00
swa00
B
Antworten
3
Aufrufe
1.306
swa00
swa00
M
Antworten
3
Aufrufe
151
moin
M
Zurück
Oben Unten