App vor Hacker / Manipulation sichern?

B

beginner98

Neues Mitglied
0
Hallo,
ich habe eine MySQL-Datenbank, in der alle Users inklusive ihrer Münzen-Anzahl abgespeichert sind.

Ich möchte eine kleine 2D Racing-App entwickeln.
Nach jeder Runde sollen die eingesammelten Credits in die satenbank eingetragen werden. Beispiel: User Max hat auf der Strecke 36 Münzen gesammelt. Seine Münzen-Anzahl in der Datenbank soll sich um 36 erhöhen.

Ich denke oft darüber nach, wie ich dies programmieren soll. Ein Webrequest (z.B. /racing.php?user=Max&credits=50000) könnte zu schnell vom Benutzer abgelesen und manipuliert werden. Muss ich einen (Web)Socket aufbauen, um sicher zu gehen, dass der User seine Münzen-Anzahl micht manipulieren kann? Aber selbst dann wäre es möglich, diese Anzahl zu manipulieren, oder?

Wie könnte ich am sichersten programmieren, dass der Wert in der MySQL Datenbank Tabelle sich um die Anzahl der eingesammelten Münzen erhöht?

Vielen Dank im Voraus! :)
 
google hilft dir da weiter deine frage ist zu generell ich würde mcih an deiner stelle erst mal über verschiedene sachen informieren und dann ein hacker/sicherehits-forum kontaktieren die dir dann im speziellen weiterhelfen können

du kkönntest dich zuerst mal über RSA verschlusselung informieren zum breispiel das ist ein guter start

ist nciht böse gemeint
 
Naja, RSA scheint auch nur begrenzt sicher zu sein.
Würde es helfen, wenn ich am Ende des Spiels einfach die Punktzahl in MD5 verschlüssele und sie dann serverseitig in PHP wieder decrypte (rainbow hash table)?
 
Zuletzt bearbeitet von einem Moderator:
Wikipedia:"MD5 gilt inzwischen nicht mehr als sicher, da es mit überschaubarem Aufwand möglich ist, unterschiedliche Nachrichten zu erzeugen, die den gleichen MD5-Hashwert aufweisen"

Der ursprüngliche Beitrag von 09:24 Uhr wurde um 09:31 Uhr ergänzt:

Hier ein interressanter Bericht für deine Zwecke

Stichworte:
-Kryptographische Verschlüsselung
-RC4
-dynamische Key-erstellung

Obwohl im Bericht steht das es als geknackt gilt ist es sehr unwahrscheinlich das ein User sehr aufwendige Hackprozesse in Gang setzt nur um ein bisschen zu cheaten. es steht ja auch was von "Die von Wissenschaftlern vorgestellte Angriffsmethode ist nicht besonders alltagstauglich"
Also ist wohl RC4 eine gute Anlaufstelle für deine Bedürfnisse!

Der ursprüngliche Beitrag von 09:31 Uhr wurde um 09:37 Uhr ergänzt:

Und hier noch ein Blog eintrag auf Android Developer falls du des englischen mächtig bist

Using Cryptography to Store Credentials Safely | Android Developers Blog
 
MD5 ist eine Message-Digest Allgorythmus. Den kannst Du nicht wirklich entschlüsselen. Eventuell ist es möglich, einen 'Ursprungswert' zu finden, der die gleiche MD5 Checksumme wie der ursprüngliche Wert hat, aber es ist keineswegs sichergestellt, dass es der gleiche Wert ist, dessen MD5-Checksumme versendet wurde.

Das Rainbow-Hash Verfahren ist zwar geeignet, ein (ungesalzenes) Passwort eines Benutzers zu knacken, wenn man den übertragenen MD5 Hashwert abfängt, da man einfach ein beliebige Passwort mit dem selben Hashwert raus bekommt, dass man dann zur Authentifizierung verwenden kann (da der Server das originale Passwort nicht kennt, sondern nur checkt, dass das gesendete Passwort den gleichen Hashwert hat).

Außerdem ist es ein Leichtes, selbst den gewünschten Hashwert zu erzeugen und an den Server zu senden.
 
Schauen wir mal auf die anderen...
Jeder online Highscore enthält Fakes und für in-App Goldkäufe gibt es Hacks. Es dürfte kein populäres Spiel geben was nicht manipuliert wird. Und deren Entwickler kennen sich mit der Materie wesentlich besser aus als du. Es gibt für dieses Problem schlicht und einfach keine Lösung.
Also stecke deine Energie lieber in das Spiel selbst.

cu
 
Ich möchte auch noch an dieser Stelle auf eine (zumindest für mich) recht interessante Diskussion in diesem (Sub-)Forum verweisen, die in diesem Thread stattgefunden hat:

Sichere Anwendung - OpenSource-Fähigkeit

Recht interessant wurde es, nachdem ich im Beitrag 12 einen Implementierungsvorschlag unterbreitet habe, der letztlich immer noch gewisse Angriffspunkte offen lies..
 
Also so sicher, dass es selbst Geheimdienste nicht entschlüsseln können, wäre nicht nötig.

Ich will die App einfach nur vor blutigen Cheatern sichern.
RSA scheint ein gutes Stichwort zu sein.
 
Wie rihntrha bereits erwähnt hat, kannst du einem Cheater nur die Arbeit schwieriger machen, aber das cheaten nicht verhindern. Das liegt (sehr vereinfacht gesagt) unter anderem daran, dass der Anwendungsfall anders aussieht als z.B. bei verschlüsselten Messengern wie Threema oder Telegram.

Bei einem Messenger geht es darum, beliebige Daten sicher von Teilnehmer A zu Teilnehmer B zu übertragen, damit keine Drittperson die Unterhaltung mitlesen kann.

Bei deinem Beispiel gibts auch Teilnehmer A (Cheater) und Teilnehmer B (Server). Du willst aber verhindern, dass Teilnehmer A die Daten manipulieren kann. Da A aber Teilnehmer der Verschlüsselung ist, muss er auch alle benötigten Schlüssel haben. Hat er alle benötigten Schlüssel, kann er auch beliebige Daten senden.

Kurz gesagt: mit einer Verschlüsselung verhinderst du Manipulation von aussen, nicht die Manipulation von innen (z.B. eines Teilnehmers).

Du kannst gewisse Logik einbauen, die versucht festzustellen, ob A die Daten manipuliert hat. Aber ganz sicher sein kannst du nie. Du könntest z.B. die Punktzahl zusammen mit der Spielzeit an den Server schicken. Auf dem Server kannst du dann püfen, ob in der angegebenen Spielzeit überhaupt soviele Punkte erreicht werden können. Wenn der Cheater den Check aber mal kennt, passt er einfach die Spielzeit an oder rechnet sich die Maximalpunktzahl aus.
 
Eine weitere Option, einem Hacker/Cheater ein paar extra Steine in den Weg zu legen, besteht darin, wesentliche Teile der Client/Server Kommunikation und der lokalen Punkte-Wertung über JNI in nativen Code auszulagern, inklusive der Persistierung des lokalen Punkte Standes.

Natürlich können auch ELF-Bibiliotheken modifiziert werden, aber die Anzahl der User, die das drauf haben ist deutlich geringer, als diejenigen, die SMALI-Code (das ist der Code, in den man recht leicht in Java geschriebene Apps dekompilieren/modifizieren und wieder kompilieren kann) bearbeiten können.
 
Also kurz um ich empfehle dir einfach um dir Kopfschmerzen zu ersparen:

-dynamische Key-erzeugung
-RSA oder RC4


mehr kannst du nicht machen um dich zu schützen

(Ausser du erdenkst eine neue bahnbrechende Verschlüsselungstechnik für die man mehrere hochleistungscomputer zum entschlüsseln braucht aber dann solltest du schon einen fundierten background in Kryptographie haben)

Ich würde es jedenfalls so wie oben beschrieben machen und ncoh ein paar obfuskationen also verschleierungen mit einbauen.
und versuch dein code auch mit obfuskationen zu versehen um dekompilationen ein bisschen schwerer zu amchen
 
Was es einem cheater noch etwas schwerer machen würde, sind serverseitige Plausibilitätsprüfungen. Z. B. Wieviele Punkte kann ein Spieler maximal auf Kurs A erreichen? Was ist die mathematisch mögliche Bestzeit? Ist das letzte Statement wenigstens die Dauer Bestzeit her?
 

Ähnliche Themen

M
Antworten
3
Aufrufe
187
moin
M
Manny87
  • Manny87
Antworten
11
Aufrufe
181
swa00
swa00
S
  • sorenn
Antworten
0
Aufrufe
34
sorenn
S
Zurück
Oben Unten