| Autor |
Beitrag |
pigfacejoe
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 13:59
Guten tag,
Ich habe in mein Programm (ein kleines Spiel) mal eine Highscore Funktion eingebaut (Da ich mal so ein bisschen PHP angefangen habe zu lernen). Am Ende des Spiel übergebe ich die variable Punkte über idhttp1.post an das PHP Script un dieses verarbeitet das dann, das klappt auch so weit. Jetz hat ein freund von mir mit einem Programm (ich nehme mal an , ein HEX editor) auf die variable Punkte zugegriffen und sie verändert.
Das kann ich mir natürlich nicht gefallen lassen..^^
Meine Idee wäre jetzt, in Delphi die variable zu verschlüsseln und im PHP Script zu entschlüsseln..Nur: Wie macht man sowas?
Gruss
Max
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Mo 14.07.08 14:02
Nimm irgendeinen Standard-Verschlüsselungsalgorithmus wie z.B. AES, da findest du sicher fertige Implementierungen sowohl für Delphi als auch für PHP.
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 14.07.08 14:36
für AES brauchst du aber wieder ein passwort mit dem es verschlüsselt wird und das kann man wieder auslesen.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.07.08 14:44
Moin!
pigfacejoe hat folgendes geschrieben: | Jetz hat ein freund von mir mit einem Programm (ich nehme mal an , ein HEX editor) auf die variable Punkte zugegriffen und sie verändert.
[...]
Meine Idee wäre jetzt, in Delphi die variable zu verschlüsseln und im PHP Script zu entschlüsseln. |
Um es kurz zu machen - vergiss es.  Bei einer Verschlüsselung kann man nur dann Vertraulichkeit herstellen, wenn sowohl Sender als auch Empfänger als Vertrauenswürdig zu bezeichnen sind. Das ist bei dir aber nicht gegeben, denn der Sender ist in diesem Fall nicht vertrauenswürdig.
Wie genau die Manipulation vonstatten geht, ist dabei noch nicht mal erheblich, aber sagen wir mal so: da der Wert von deiner CPU errechnet wurde, kann man ihn auch (mit entsprechende viel oder wenig Aufwand) auf diesem System manipulieren (sonst hätte man den Wert ja erst garnicht erst bestimmen können). Du solltest dir also klar darüber sein, dass du nur die Höhe der Hürde festlegen kannst, egal wieviel Aufwand du treibst - ausschließen lässt sich eine Manipulation idR nicht (wenn Jemand das wirklich manipulieren will, dann hast du schon verloren - kannst ja mal uall@ogc fragen...  ).
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 14:53
Aber wie machen es dann "große" Unternehmen bei ihren Spielen? das muss doch irgendwie gehen..
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.07.08 14:55
Moin!
pigfacejoe hat folgendes geschrieben: | | Aber wie machen es dann "große" Unternehmen bei ihren Spielen? das muss doch irgendwie gehen.. |
Die bauen halt ziemlich hohe Hürden auf - aber eben nicht unüberwindbare (warum gibt es wohl sonst dauernd irgend welche neuen Cheats, Cracks, Hacks, etc.pp)...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Xentar
      
Beiträge: 2077
Erhaltene Danke: 2
Win XP
Delphi 5 Ent., Delphi 2007 Prof
|
Verfasst: Mo 14.07.08 15:13
Für ein "kleines" Spiel sollte AES doch vollkommen ausreichen?
Ich denke nicht, dass sich da jemand die Mühe macht, das Passwort aus dem Speicher auszulesen o.ä.
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 15:17
Ja , nur ich finde kein so richtiges Tutorial zu AES... Ich hab mir da mal ein paar Units runtergalden, aber die funktionieren nicht. Kennt jemand vlt eine gute Einführung in AES?
|
|
PeterPain
      
Beiträge: 83
|
Verfasst: Mo 14.07.08 15:19
Gibt da ne schöne sammlung an komponenten DCPCrypt oder so, einfach mal googlen.
gruss
|
|
nagel
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Mo 14.07.08 15:24
Also eine relativ ausführliche Beschreibung von AES findest du hier oder auch auf [url]cryptool.org[/url].
Außerdem kannst du dir DEC anschauen.
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 15:41
Danke! Hab mir diese sammlung runtergealden und installiert.
Aber wie genau verschlüssel ich jetzt daten?
So wohl kaum, oder?
Delphi-Quelltext 1: 2:
| DCP_rijndael1.Init('13',256,nil); edit2.text:=DCP_rijndael1.DecryptString(edit1.text) ; |
Gruss
Max
|
|
PeterPain
      
Beiträge: 83
|
Verfasst: Mo 14.07.08 16:17
Wie wärs, wenn du dir mal die Demos / hilfe anguckst, da sind ansich recht anschauliche beispiele dabei (wenn ich mich recht entsinne).
gruss
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 16:45
Ich hab mir die Demo angeschaut, hänge aber bei einem wert fest:
Delphi-Quelltext 1: 2:
| DCP_rijndael1.InitStr('13',?????); |
was muss ich dahin schreiben anstatt "?????"?
Gruss
Max
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.07.08 22:17
Moin!
Ist vielleicht noch nicht ganz "angekommen", der Gedanke, deshalb nochmal:
Ich unterstelle mal, es geht um den Punktestand (d)eines Spieles.  Damit man keine "einfachen" Manipulationen daran vornehmen kann, musst du den Inhalt der Variablen zur Laufzeit permanent verschlüsselt halten!  Das ist natürlich unmöglich, irgendwann musst du ja mal Punkte draufzählen, sonst könnte man keinen Highscore erlangen. Also musst du nur zum Addieren der Punkte den Inhalt der Punktestand-Variablen entschlüsseln, die Änderung vornehmen, und dann sofort wieder verschlüsseln (am besten "in-place", also ohne Hilfsvariablen). Leider haben wir dann immer noch einen Angriffspunkt, die Ent-/Verschlüsselung und das Modifizieren des Punktestandes. Wer schonmal einen Debugger gestartet hat, kann auch relativ schnell eine globale Verschlüsselungsmethode ausfindig machen - und hier wieder ansetzen. Fazit: das "Problem" ist also, authorisierte von nicht-authorisierten Punktestandsänderungen zu unterscheiden.
Das Problem ist aber auf (nur) einer (einzelnen) Maschine leider unlösbar.  Hier gibt´s eben nur die Möglichkeit, die Hürden für das Auffinden der entscheidenden Stellen möglichst schwer zu machen oder den Ansatzpunkt für Werkzeuge (=Debugger) abzudichten. Beides läuft aber auf "Security-through-Obscurity" hinaus - kein guter Ansatz...
Fazit: Das Ganze ist Zeitverschwendung. Wenn Jemand das Spiel hacken will, dann wird er es auch früher oder später schaffen.  Spätestens Jemand, der mehr Ahnung vom "Entdecken" als du vom "Verstecken" hast, wird deinen "Schutz" aushebeln.
Etwas anders sieht es aus, wenn man einen zweiten Rechner einsetzt, der nicht im Zugriff des "Spielers-mit-unlauteren-Absichten" ist (Server im INet z.B.). Hier könnte man diverse Methoden einsetzen, um das Erreichen eines Highscores "plausibler" zu machen (z.B. in regelmäßigen Abständen den Score/Delta übermitteln; ist eine Änderung nicht im möglichen/erlaubten Bereich, wird gemogelt  ). Aber das ist idR so viel Auffand, das lohnt auch schon kaum wieder - und 100%ig ist es obendrein auch noch nicht mal...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
pigfacejoe 
      
Beiträge: 332
Erhaltene Danke: 1
Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
|
Verfasst: Mo 14.07.08 22:28
Ja, ich glaube du hast Recht.
Ich denke ich werde einfach skurile Highscores selbst "von hand" löschen und damit hat sich die Sache!
Dennoch Vielen Dank für die Bemühungen an alle!
Gute Nacht!
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 14.07.08 22:32
Kann es nicht eher sein dass dein freund das PHP script selber mit den daten aufruft? dann würde dir ne verschlüsselung schon helfen.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.07.08 22:36
Moin!
Tilman hat folgendes geschrieben: | | Kann es nicht eher sein dass dein freund das PHP script selber mit den daten aufruft? dann würde dir ne verschlüsselung schon helfen. |
Nein, würde sie effektiv auch nicht, weil:
Narses hat folgendes geschrieben: | | Bei einer Verschlüsselung kann man nur dann Vertraulichkeit herstellen, wenn sowohl Sender als auch Empfänger als Vertrauenswürdig zu bezeichnen sind. Das ist bei dir aber nicht gegeben, denn der Sender ist in diesem Fall nicht vertrauenswürdig. |
Der Schlüssel muss im Programm enthalten sein, sonst könnte das Programm ja auch nicht damit arbeiten  alles Käse...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Mo 14.07.08 22:37
Du kannst es verschlüsseln und dann den Einsatz von debuggern verhindern. Hier ist ein Tutorial in assembler dafür, bei bedarf helfe ich gerne beim integrieren in dass Pascal-Programm. Einige Teile wie dass Tastatur-ausschalten funktionirt zwar nicht, aber sachen wie in den Protected mode umschalten müsste klappen.
schule.salzburg.at//...aszwort/FBARUHS.html
EDIT:
Sicherlich würde eine Manipulation nicht verhindert, aber deutlich erschwert, sodass sich die Mühe normal nicht lohnt.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Mo 14.07.08 22:41
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 14.07.08 22:41
Moin!
Boldar hat folgendes geschrieben: | | Du kannst es verschlüsseln und dann den Einsatz von debuggern verhindern. |
Wenn ihr es fertig habt, dann tut euch den Spaß an und fragt uall@ogc, ob er mal "einen Blick drauf wirft". Solltet ihr ihn tatsächlich davon überzeugen können, das es "die Zeit wert ist", dann wird er euch vermutlich in erstaunlich kurzer Zeit vorführen, wie man das trotzdem machen kann...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|