"Python code verstecken" Server, Client

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

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.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Warum lässt du nicht nur den Server das Ergebnis berechnen?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Sr4l hat geschrieben:Clientscript errechnet aufgrund der Aktionen und der Werte wer gewinnt und übermittelt diese. So und das muss geheim beiben.
Hi Sr4l!

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. :D
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
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.
BlackJack

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.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ist WinZIP kosten Pflichtig?
Ich nutze WinRAR das ist Shareware unendlich lang nutzbar man bekommt nur bei jedem start nen Hinweis. Windows hat ab XP ZIP Function inlcludet.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:Ist WinZIP kosten Pflichtig?
Ja, es ist genauso Shareware wie WinRAR.
Sr4l hat geschrieben:Windows hat ab XP ZIP Function inlcludet.
Dessen Funktionen sind erbärmlich. Da ist 7-Zip schon interessanter, zudem freie Software.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Sr4l hat geschrieben:Ich nutze WinRAR das ist Shareware unendlich lang nutzbar man bekommt nur bei jedem start nen Hinweis.
Technisch unendlich lang nutzbar, aber nicht legal. Du darfst es 40 Tage lang ausprobieren. Danach musst Du eine Lizenz erwerben.
Benutzeravatar
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 :-D
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Sr4l hat geschrieben: Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen :-D
Bitte nicht noch ein Packformat ;) Danke :D

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 ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

BlackJack hat geschrieben:
Sr4l hat geschrieben:Ich nutze WinRAR das ist Shareware unendlich lang nutzbar man bekommt nur bei jedem start nen Hinweis.
Technisch unendlich lang nutzbar, aber nicht legal. Du darfst es 40 Tage lang ausprobieren. Danach musst Du eine Lizenz erwerben.
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...
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Ok, wo wir sowieso schon offtopic sind:
birkenfeld hat geschrieben:Und das ergibt auch Sinn, vor allem bei RAR, wo WinRAR/Kommandozeilen-RAR lange Zeit der einzige Packer war.
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.

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.
BlackJack

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. :-)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Y0Gi hat geschrieben:
birkenfeld hat geschrieben:Und das ergibt auch Sinn, vor allem bei RAR, wo WinRAR/Kommandozeilen-RAR lange Zeit der einzige Packer war.
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.
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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Aah, ich beginne langsam deine Aussage zu verstehen.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Mad-Marty hat geschrieben:
Sr4l hat geschrieben: Projekt PyZip by me is born ^^ wollte mich eh mit dem Thema compremieren befassen :-D
Bitte nicht noch ein Packformat ;) Danke :D

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 ;)
Back2Topic ;-)

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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:kannst du mir erklären wie ich die exe encrypte kann?
Mit GnuPG zum Beispiel. Solltest aber darauf achten, dass du einen guten Schlüssel hast.
Sr4l hat geschrieben:SSL schützt die Verbindung nicht die Daten an sich.
Und was wird in der Verbindung übertragen? Richtig! Die Daten! :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
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.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sr4l hat geschrieben:Die Daten die über die Leitung gehen sind mir egal ^^.
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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten