Autor Beitrag
pigfacejoe
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 14:44 
Moin!

user profile iconpigfacejoe 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. :nixweiss:

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 user profile iconuall@ogc fragen... :zwinker:).

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
pigfacejoe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mo 14.07.08 14:53 
Aber wie machen es dann "große" Unternehmen bei ihren Spielen? das muss doch irgendwie gehen..
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 14:55 
Moin!

user profile iconpigfacejoe 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)... :P

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: Mo 14.07.08 15:19 
Gibt da ne schöne sammlung an komponenten DCPCrypt oder so, einfach mal googlen.

gruss
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: 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?
ausblenden Delphi-Quelltext
1:
2:
DCP_rijndael1.Init('13',256,nil);
edit2.text:=DCP_rijndael1.DecryptString(edit1.text) ;


Gruss
Max
PeterPain
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 83



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: Mo 14.07.08 16:45 
Ich hab mir die Demo angeschaut, hänge aber bei einem wert fest:
ausblenden Delphi-Quelltext
1:
2:
DCP_rijndael1.InitStr('13',?????);
//procedure InitStr(const Key: string; HashType: TDCP_hashclass);

was muss ich dahin schreiben anstatt "?????"?

Gruss
Max
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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! :idea: 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.
:think:
Das Problem ist aber auf (nur) einer (einzelnen) Maschine leider unlösbar. :nixweiss: 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 :idea:). 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 332
Erhaltene Danke: 1

Win 10, Ubuntu
Delphi,Javascript, PHP, Java, Python
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 22:36 
Moin!

user profile iconTilman 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:
user profile iconNarses 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 :arrow: alles Käse...

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 14.07.08 22:41 
user profile iconNarses hat folgendes geschrieben:
Moin!

user profile iconTilman 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:
user profile iconNarses 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 :arrow: alles Käse...

cu
Narses


Ich wollte damit sagen es könnte sein dass der Freund zwar weiß, dass er das php-script mit punkt.php?wert=2000 aufrufen muss, aber vom Programm selbst keinen schimmer hat (kein hex-Editor etc). In diesem Fall wäre ne verschlüsselung effektiv.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 14.07.08 22:41 
Moin!

user profile iconBoldar 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 user profile iconuall@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.