Problemfall:
Ich habe eine Frage mein Problem ist das Python immer seine Code zeigt, ich habe natürlich kein Problem damit meinstens zumindest. Jetzt habe ich aber einen Fall wo dies ein Problem mit der Sicherheit gibt.
Ein Server verwaltet alle Daten.
Der Client macht einen Kampf: Held (der Spieler) gegen verschiedenen Monster ("KIs").
Clientscript errechnet aufgrund der Aktionen und der Werte wer gewinnt und übermittelt diese. So und das muss geheim beiben.
Bsp:
Server sendet: 25 #Zufallszahl von 10-99
Client empfängt Zahl "25"
Client gewinnt möchte Server mitteilen das er gewonnen hat.
Client errechnet SicherheitsID. "25*TAG*1337" = 300825
Client sendet SicherheitsID.
Server empfängt SicherheitsID und rechnet selber ("25*TAG*1337" = 300825)
Server kommt auf selbes Ergebnis und akzeptiert das der Client gegen Monster gewonnen hat Erfahrunng des Helden wird geupdatet.
Die Rechnung der SicherheitsID (25*TAG*1337) darf jetzt aber vom Client nicht gesehen werden.
"25*TAG*1337" ist ein besipiel ich kann auch viele andere Methoden nutzen die bei jedem request ein neue Zahl ergeben, Wikipedias Einträge bietet dort viele Varianten.
Fragen:
- Wie kann ich diese Rechnung der SicherheitsID verstecken? (Muss nur unter Windows Funktionieren)
- Kann ich das vergessen und steige auf ein Serverbasierendes System um?
- Einfach hoffen das in der Menge des Codes die Wichtigkeit dieses Eintrages verloren geht?
- Wie schwer ist es .exe von Py2exe zurück zuwandeln? (Für pyc2py ist dies einfach habe da schon tools gesehen)
Es tut mir Leid das es so ein schwieriger Text gewurden ist.
"Python code verstecken" Server, Client
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi Sr4l!Sr4l hat geschrieben:Clientscript errechnet aufgrund der Aktionen und der Werte wer gewinnt und übermittelt diese. So und das muss geheim beiben.
Das ist, meines Erachtens, eines der größten Probleme quelloffener Software. Man kann einen Kunden vertraglich daran hindern, den Quellcode weiterzugeben, aber man kann keine Game-Kiddies daran hindern, den Gameserver zu bescheißen.
Es genügt auch nicht, nur den Teil, der die Berechnungen durchführt, in C (ich nehme einfach mal C als Alias für alle kompilierbaren Programmiersprachen) zu schreiben, denn irgendwie muss dieses C-Programm ja auch an die Daten kommen, die es übermitteln soll. Niemand hindert mich daran, dieses C-Programm mit falschen Daten zu füttern. Es müsste also alles in C geschrieben sein, damit es keinen (einfachen) Einstiegspunkt für ein externes Programm gibt.
Über ein ähnliches Problem hatte ich mal nachgedacht, als ich mir überlegte, Shareware-Programme zu schreiben.
Ich habe auch über Dongel-Systeme nachgedacht, aber dann müsste das Programm auf dem Dongel laufen, denn sonst gibt es ja immer wieder einen Einstiegspunkt den man nutzen kann.
Ich habe noch keine Möglichkeit gefunden, kleine, günstige Programme mit Python zu schreiben, um damit Geld zu verdienen, denn gerade bei den kleinen Programmen zahlt dir ja niemand etwas. Dass die WinZip-Entwickler reich geworden sind, ist für mich unerklärlich.
Ob ich jetzt die volle Funktionalität in einem Shareware-Programm freischalten will, oder verhindern will, dass mir jemand gefälschte Informationen an den Server schickt -- irgendwie klingt das für mich nach einem ähnlichen Problem.
Vielleicht findet sich eine cryptografische Lösung für dein Problem. Damit wär mein Problem auch gelöst und ich könnte endlich Shareware-Programme schreiben um damit über die Runden zu kommen.
mfg
Gerold
PS: Ab und zu glaube ich, dass ich mich selber gerne auf der Tastatur tippen höre. Das hätte man alles auch mit weniger Worten schreiben können. Wie man hier sieht ---> Habe ähnliches Problem; will Shareware-Programme mit Python schreiben. Wenn dein Problem cryptografisch gelöst werden kann, dann ist mein Problem auch gelöst.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Der Punkt ist bei Serverkommunikation quasi immer gegeben - Man in the Middle. Das kann zwar mit sicheren Übertragungsprotokollen abgesichert werden - aber wasserdicht ist das nicht.gerold hat geschrieben:Es genügt auch nicht, nur den Teil, der die Berechnungen durchführt, in C (ich nehme einfach mal C als Alias für alle kompilierbaren Programmiersprachen) zu schreiben, denn irgendwie muss dieses C-Programm ja auch an die Daten kommen, die es übermitteln soll. Niemand hindert mich daran, dieses C-Programm mit falschen Daten zu füttern. Es müsste also alles in C geschrieben sein, damit es keinen (einfachen) Einstiegspunkt für ein externes Programm gibt.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
hehe nette antworten.
Ich denke eher daran das wenn jmd an den Quellcode sieht nach welchem System der schlüssel generiert wird dadurch kann er dem Serverdaten schicken und seinne Helden "hochleveln" ohne wirklich nach Monestern zu suchen.
Ein Freund hat ne reine C umsetzung gemacht und es in ne 256bit verschlüsselte Exe gepackt, aber das Problem beschäftigt mich doch.
Ich kann keinen daran hindern in das Script zugehen und die variable Erfahrung auf eine fest Wert zu setzen oder einfach ein *10 zuadden jetzt nur mal als bsp. Man kann es nur erschweren.
Begrenzung vom Server her max Erfahrung / Stunde
Oder das System alles geht in der Masse unter. MD5 check auf sich selbst o.ä., hilft natürlich nichts wenn der MD5 checker entfernt wird
Oder Programm arbeitet nur mit Internet connection und checken zur Laufzeit auch wieder irgendwas aber auch das hilftnichts wenns raus gecutted wird. Ich bin verzweifelt
Ich werde mal ne Googlesuchnight machen zu dem Thema.
Ich denke eher daran das wenn jmd an den Quellcode sieht nach welchem System der schlüssel generiert wird dadurch kann er dem Serverdaten schicken und seinne Helden "hochleveln" ohne wirklich nach Monestern zu suchen.
Ein Freund hat ne reine C umsetzung gemacht und es in ne 256bit verschlüsselte Exe gepackt, aber das Problem beschäftigt mich doch.
Ich kann keinen daran hindern in das Script zugehen und die variable Erfahrung auf eine fest Wert zu setzen oder einfach ein *10 zuadden jetzt nur mal als bsp. Man kann es nur erschweren.
Begrenzung vom Server her max Erfahrung / Stunde
Oder das System alles geht in der Masse unter. MD5 check auf sich selbst o.ä., hilft natürlich nichts wenn der MD5 checker entfernt wird
Oder Programm arbeitet nur mit Internet connection und checken zur Laufzeit auch wieder irgendwas aber auch das hilftnichts wenns raus gecutted wird. Ich bin verzweifelt
Ich werde mal ne Googlesuchnight machen zu dem Thema.
Solche Berechnungen gehören einfach nicht in den Client. Jeder vernünftige Gameserver macht das selbst.
@gerold: Zu WinZip: Es gibt weltweit gesehen wohl genug ehrliche Anwender die bezahlen, zum Beispiel viele Firmen die einfach auf der legalen Seite stehen wollen und besonders teuer ist das Programm aus dieser Sicht ja auch nicht. Ich bezahle zum Beispiel auch die Programme, die ich benutzen möchte. Damals unter DOS hatte ich zum Beispiel eine RAR-Lizenz. Heute benutze ich fast ausschliesslich kostenlose OpenSource-Software. Eine zeitlang hatte ich für meinen alten Tintenstrahler eine TurboPrint-Lizenz.
@gerold: Zu WinZip: Es gibt weltweit gesehen wohl genug ehrliche Anwender die bezahlen, zum Beispiel viele Firmen die einfach auf der legalen Seite stehen wollen und besonders teuer ist das Programm aus dieser Sicht ja auch nicht. Ich bezahle zum Beispiel auch die Programme, die ich benutzen möchte. Damals unter DOS hatte ich zum Beispiel eine RAR-Lizenz. Heute benutze ich fast ausschliesslich kostenlose OpenSource-Software. Eine zeitlang hatte ich für meinen alten Tintenstrahler eine TurboPrint-Lizenz.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Ja, es ist genauso Shareware wie WinRAR.Sr4l hat geschrieben:Ist WinZIP kosten Pflichtig?
Dessen Funktionen sind erbärmlich. Da ist 7-Zip schon interessanter, zudem freie Software.Sr4l hat geschrieben:Windows hat ab XP ZIP Function inlcludet.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Technisch unendlich lang nutzbar, aber nicht legal. Du darfst es 40 Tage lang ausprobieren. Danach musst Du eine Lizenz erwerben.Sr4l hat geschrieben:Ich nutze WinRAR das ist Shareware unendlich lang nutzbar man bekommt nur bei jedem start nen Hinweis.
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
lol ich habe gearde das erstemal den Text richtig gelsen.
Please note that WinRAR is shareware.
After a 40 day trail period you must either.
register it or remove it from your computer.
Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen
Please note that WinRAR is shareware.
After a 40 day trail period you must either.
register it or remove it from your computer.
Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen
Bitte nicht noch ein Packformat DankeSr4l hat geschrieben: Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen
Zur Gameserver Thematik:
Klar kannst du die Kommunikation per SSL etc verschlüsseln und das Proggi
compilen und die exe encrypten etc.
Trotzdem crackt dir jeder mit etwas skill den mist in kurzer zeit weg!
Solche Berechnungen gehören in den Server wie Blackjack schon sagte, das ist einfach so.
Dann bleibt nur noch eine plausibilitätsprüfung der state übertragungen des clients.
Das ist der beste kompromiss, und das der auch nicht perfekt geht siehst du an praktisch allen Multiplayer Games
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Und das ergibt auch Sinn, vor allem bei RAR, wo WinRAR/Kommandozeilen-RAR lange Zeit der einzige Packer war. Schließlich soll sich das Format verbreiten...BlackJack hat geschrieben:Technisch unendlich lang nutzbar, aber nicht legal. Du darfst es 40 Tage lang ausprobieren. Danach musst Du eine Lizenz erwerben.Sr4l hat geschrieben:Ich nutze WinRAR das ist Shareware unendlich lang nutzbar man bekommt nur bei jedem start nen Hinweis.
Ok, wo wir sowieso schon offtopic sind:
Die Tatsache, dass RAR - auch heute noch - ein proprietäres Format ist und nur die Dekompression offen und dokumentiert vorliegt, verschließt ihm natürlich einen großen Anwenderkreis. Selbst schuld. Schade, hat es doch so einige Vorteile.
Ja? Nicht in der Vergangenheit, die ich hatte Da gab es LHA, ARC, ARJ, ZOO, UHA, ZIP, ... die meisten davon dürften chronologisch gut passen.birkenfeld hat geschrieben:Und das ergibt auch Sinn, vor allem bei RAR, wo WinRAR/Kommandozeilen-RAR lange Zeit der einzige Packer war.
Die Tatsache, dass RAR - auch heute noch - ein proprietäres Format ist und nur die Dekompression offen und dokumentiert vorliegt, verschließt ihm natürlich einen großen Anwenderkreis. Selbst schuld. Schade, hat es doch so einige Vorteile.
Einer der Vorteile ist, dass die Dateien (unter anderem) nach Dateiendung sortiert werden, bevor sie komprimiert werden, wodurch Ähnlichkeiten in Dateistrukturen bei Dateien des gleichen Typs besser ausgenutzt werden können, da sie im Datenstrom näher beieinander liegen.
Das habe ich spasseshalber mal in Python für '*.tar.bz2'-Archive implementiert: rtar
Keine Ahnung ob's etwas oder viel bringt, aber ich benutze es oft wegen der `-a`Option und weil es eine Fortschrittsanzeige hat.
Das habe ich spasseshalber mal in Python für '*.tar.bz2'-Archive implementiert: rtar
Keine Ahnung ob's etwas oder viel bringt, aber ich benutze es oft wegen der `-a`Option und weil es eine Fortschrittsanzeige hat.
- birkenfeld
- Python-Forum Veteran
- Beiträge: 1603
- Registriert: Montag 20. März 2006, 15:29
- Wohnort: Die aufstrebende Universitätsstadt bei München
Nein, gemeint war dass WinRAR der einzige Packer für das RAR-Format ist. Wenn sich also das Format verbreitet, verbreitet sich auch das Programm.Y0Gi hat geschrieben:Ja? Nicht in der Vergangenheit, die ich hatte Da gab es LHA, ARC, ARJ, ZOO, UHA, ZIP, ... die meisten davon dürften chronologisch gut passen.birkenfeld hat geschrieben:Und das ergibt auch Sinn, vor allem bei RAR, wo WinRAR/Kommandozeilen-RAR lange Zeit der einzige Packer war.
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Back2TopicMad-Marty hat geschrieben:Bitte nicht noch ein Packformat DankeSr4l hat geschrieben: Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen
Zur Gameserver Thematik:
Klar kannst du die Kommunikation per SSL etc verschlüsseln und das Proggi
compilen und die exe encrypten etc.
Trotzdem crackt dir jeder mit etwas skill den mist in kurzer zeit weg!
Solche Berechnungen gehören in den Server wie Blackjack schon sagte, das ist einfach so.
Dann bleibt nur noch eine plausibilitätsprüfung der state übertragungen des clients.
Das ist der beste kompromiss, und das der auch nicht perfekt geht siehst du an praktisch allen Multiplayer Games
kannst du mir erklären wie ich die exe encrypte kann?
es geht nicht um die Wichtigkeit der Rechnung sondern um das Prinzip irgendwelche Berechnungen vor dem User der am Clienten sitzt geheim zuhalten.
Genau wie auch gerold geschrieben hat mit der shareware.
SSL schützt die Verbindung nicht die Daten an sich.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Mit GnuPG zum Beispiel. Solltest aber darauf achten, dass du einen guten Schlüssel hast.Sr4l hat geschrieben:kannst du mir erklären wie ich die exe encrypte kann?
Und was wird in der Verbindung übertragen? Richtig! Die Daten!Sr4l hat geschrieben:SSL schützt die Verbindung nicht die Daten an sich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
- Sr4l
- User
- Beiträge: 1091
- Registriert: Donnerstag 28. Dezember 2006, 20:02
- Wohnort: Kassel
- Kontaktdaten:
Die Daten die über die Leitung gehen sind mir egal ^^.
Ich möchte die Berechnungsformel im Script für die Daten die übertragen werden nicht sichtbar machen und das ist denk ich nicht möglich in Python wo bei der singelexe von Py2EXE so direkt keine Daten preis gibt.
Ich möchte die Berechnungsformel im Script für die Daten die übertragen werden nicht sichtbar machen und das ist denk ich nicht möglich in Python wo bei der singelexe von Py2EXE so direkt keine Daten preis gibt.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Sind sie dir nicht. Denn solange die Daten auf dem Server nicht manipuliert werden, ist das völlig egal was einer mit seinem Client anstellt.Sr4l hat geschrieben:Die Daten die über die Leitung gehen sind mir egal ^^.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice