Code scrambler gesucht
Ich suche ein script dass einen fertigen python code unlesbar macht, indem es variablennamen usw ändert, um den source code zu schützen. Sowas hab ich für HTML und java gefunden, für python gibts das sicher auch. Ich wäre für nen link dankbar.
mfg nwp
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Ist auch ziemlich unnötig!
Schau dir mal folgende Threads an:
http://www.python-forum.de/viewtopic.php?t=4973
http://www.python-forum.de/viewtopic.php?t=4333
http://www.python-forum.de/viewtopic.php?t=4892
Fazit: Codeklau geht eigentlich immer, also lass es einfach. Nutzte GLP und fertig! Dazu noch einen Link: http://wiki.python.de/Warum_ist_quellof ... _b%C3%B6se
Schau dir mal folgende Threads an:
http://www.python-forum.de/viewtopic.php?t=4973
http://www.python-forum.de/viewtopic.php?t=4333
http://www.python-forum.de/viewtopic.php?t=4892
Fazit: Codeklau geht eigentlich immer, also lass es einfach. Nutzte GLP und fertig! Dazu noch einen Link: http://wiki.python.de/Warum_ist_quellof ... _b%C3%B6se
Gibt's für Python nicht, weil Python zu dynamisch ist und dadurch Code kaputtgehen kann.nwp hat geschrieben:Ich suche ein script dass einen fertigen python code unlesbar macht, indem es variablennamen usw ändert, um den source code zu schützen. Sowas hab ich für HTML und java gefunden, für python gibts das sicher auch. Ich wäre für nen link dankbar.
Code: Alles auswählen
class Knight
def kill_dragon(self, dragon):
print 'killed %s' % dragon
knight = Knight()
a = 'kill'
b = 'dragon'
func = getattr(knight, a + '_' + b)
func('Walter')
Schade dass es sowas nicht gibt. Ich werde das programm dann also doch selber schreiben müssen. Vielleicht poste ich das fertige.
mfg nwp
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Warum zum Teufel willst Du sowas überhaupt machen? Aufgrund der aufgeräumten Programmierweise von Python (sprich: Einrückung) ist es sinnlos sowas zu schreiben, da die Variablennamen nur ein Teil des ganzen sind... Vielleicht, wenn Du ein bissel genauer Deinen Anwendungsrahmen beschreiben würdest, könnte man Dir eher helfen.
--- Heiko.
Du könntest dein Programm einfach kompileren:
Und dann wie gewohnt starten:
hf
Code: Alles auswählen
import compiler
compiler.compileFile("test.py")
Code: Alles auswählen
> python test.pyc
--
http://www.weltenwerk.net
^^
http://www.weltenwerk.net
^^
-
- User
- Beiträge: 670
- Registriert: Sonntag 15. Januar 2006, 18:42
- Wohnort: Celle
- Kontaktdaten:
Ohne jetzt irgendjemandem auf die Füße treten zu wollen: compilieren ist auch keine Hilfe, weil schlicht und ergreifend der Quelltext des Python-Programms ohne größere Anstrengung wiederhergestellt werden kann, sogar mit Variablennamen die ursprünglich benutzt wurden. Überleg Dir gut ob Du überhaupt diesen Weg gehen willst; es bringt im Endeffekt alles nichts und macht Dein Programm nur fehleranfälliger (weil Quelltext != eigentliches Programm, siehe auch das Beispiel mit getattr...)
--- Heiko.
Sinn der Sache war, dass ich verhindern wollte, dass ein Spiel von mir verändert wird. Es soll mal einen multiplayer modus übers internet unterstützen. Ich wollte ausschließen, oder es zumindest schwerer machen einfach die Punkte zu verändern. (Ein einfaches punkte=999999999 reicht dafür aus). Noch wichtiger ist, dass die Daten des verbindungsspielers geschützt werden. Ich will eine mögliche Sicherheitslücke verstecken. Nicht dass jeder der mal n pythontutorial gelesen hat die lücke für viren oder ähnliches nutzen kann. danke für die antworten!
mfg nwp
-
- User
- Beiträge: 21
- Registriert: Sonntag 26. Februar 2006, 03:09
- Wohnort: Penzberg
- Kontaktdaten:
Meinst Du Sicherheitslücken, die es erlauben, Code auf fremden Rechnern auszuführen?
Natürlich ist Python nicht gegen alle Sicherheitslücken gefeit. Das liegt freilich immer am Programmierer und seinem Gespür für Sicherheitsprobleme. Wenn Du Dich aber von eval, exec und Konsorten fernhältst, sollte es Dir um einiges leichter fallen, Pythoncode sicher zu machen, als C-Code. Das Nummer-Eins-Netzwerksicherheitsproblem, der Pufferüberlauf, wird jedenfalls vom Pythoninterpreter in jedem mir im Moment denkbaren Fall effektiv abgefangen und verhindert (außer Du schreibst zusätzlich C-Erweiterungen, aber für die brauchst Du wohl auch keinen Python-Obfuscator).
Letztlich liegt es aber wohl an Deinem Mehrspielerkonzept. Wenn Du die Teilnehmer lediglich gut beschränkte Daten austauschen läßt (Zahlen, Tupel, Listen oder Dictionaries, deren Gültigkeit im Rahmen des Spiels klar definiert ist) und keinen Code (z.B. Objekte über Pyro), sowie die Daten beim Empfang auf Plausibilität prüfst, sollte es keine großen Sicherheitsprobleme geben.
Gib auch darauf acht, Zeichenketten (z.B. Spielernamen) immer richtig zu quoten (am einfachsten ist es, sie einfach alle in Base64 umzuwandeln), wenn Du sie beispielsweise in eine Datenbank schreiben möchtest, sonst wird Dein Code bzw. Deine Datenbank gegenüber SQL Injection Attacks und ähnlichem verwundbar.
Du siehst: geht alles ohne Python-Code-Obfuscator
Natürlich ist Python nicht gegen alle Sicherheitslücken gefeit. Das liegt freilich immer am Programmierer und seinem Gespür für Sicherheitsprobleme. Wenn Du Dich aber von eval, exec und Konsorten fernhältst, sollte es Dir um einiges leichter fallen, Pythoncode sicher zu machen, als C-Code. Das Nummer-Eins-Netzwerksicherheitsproblem, der Pufferüberlauf, wird jedenfalls vom Pythoninterpreter in jedem mir im Moment denkbaren Fall effektiv abgefangen und verhindert (außer Du schreibst zusätzlich C-Erweiterungen, aber für die brauchst Du wohl auch keinen Python-Obfuscator).
Letztlich liegt es aber wohl an Deinem Mehrspielerkonzept. Wenn Du die Teilnehmer lediglich gut beschränkte Daten austauschen läßt (Zahlen, Tupel, Listen oder Dictionaries, deren Gültigkeit im Rahmen des Spiels klar definiert ist) und keinen Code (z.B. Objekte über Pyro), sowie die Daten beim Empfang auf Plausibilität prüfst, sollte es keine großen Sicherheitsprobleme geben.
Gib auch darauf acht, Zeichenketten (z.B. Spielernamen) immer richtig zu quoten (am einfachsten ist es, sie einfach alle in Base64 umzuwandeln), wenn Du sie beispielsweise in eine Datenbank schreiben möchtest, sonst wird Dein Code bzw. Deine Datenbank gegenüber SQL Injection Attacks und ähnlichem verwundbar.
Du siehst: geht alles ohne Python-Code-Obfuscator

Ich glaub der TE meint eher, wie er "sicher" die Highscore, die jemand bei einem Client-Python-Spielchen erreicht hat, zu einem Online-Highscore-Server schicken kann, ohne dass jeder Spieler einfach die py-Datei anpassen kann.
Eine einfache Antwort gibt es darauf nicht. Ich habe mir vor einiger Zeit mal ein paar Gedanken gemacht, wie man ganz allgemein in ein OpenSource-Spiel eine solche Online-Highscore einbauen könnte. Zwei Möglichkeiten sind mir eingefallen:
1. Du errechnest die Punktzahl ausschliesslich auf dem Server. Dazu muss serverseitig das gleiche Spiel quasi mitgespielt werden. Es müssen also alle Befehle vom Spieler an den Server geschickt und dort verarbeitet werden. Hier ist kaum Manipulation möglich, lediglich die, dass am Client kein Mensch spielt, sondern ein anderes Skript die Befehle berrechnet (Bot)
2. Du machst etwas ähnliches mit einem Stück ausgelagertem C/C++ Code, der als DLL oder so dabei liegt. Dieses Stück muss ebenfalls die komplette Spiellogik enthalten und "nachspielen", was der Benutzer tut. Dort wird dann auch die Kommunikation mit dem Highscoreserver umgesetzt. Diese DLL ist dann auch nicht unter Opensource.
Insgesamt ziemlich kompliziert und es bietet auch keine 100%ige Cheat-Sicherheit.
Doofe Cheater
Eine einfache Antwort gibt es darauf nicht. Ich habe mir vor einiger Zeit mal ein paar Gedanken gemacht, wie man ganz allgemein in ein OpenSource-Spiel eine solche Online-Highscore einbauen könnte. Zwei Möglichkeiten sind mir eingefallen:
1. Du errechnest die Punktzahl ausschliesslich auf dem Server. Dazu muss serverseitig das gleiche Spiel quasi mitgespielt werden. Es müssen also alle Befehle vom Spieler an den Server geschickt und dort verarbeitet werden. Hier ist kaum Manipulation möglich, lediglich die, dass am Client kein Mensch spielt, sondern ein anderes Skript die Befehle berrechnet (Bot)
2. Du machst etwas ähnliches mit einem Stück ausgelagertem C/C++ Code, der als DLL oder so dabei liegt. Dieses Stück muss ebenfalls die komplette Spiellogik enthalten und "nachspielen", was der Benutzer tut. Dort wird dann auch die Kommunikation mit dem Highscoreserver umgesetzt. Diese DLL ist dann auch nicht unter Opensource.
Insgesamt ziemlich kompliziert und es bietet auch keine 100%ige Cheat-Sicherheit.
Doofe Cheater

--
http://www.weltenwerk.net
^^
http://www.weltenwerk.net
^^
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Zum Thema Sicherheit gibt es auch eine Wiki Seite: http://wiki.python.de/Thema_Sicherheit
Verstecken ist der vollkommen falsche Denkansatz. Leute, die nach sowas suchen, werden die Lücke auch finden, wenn sie da ist. Mit oder ohne Python-Kenntnisse.nwp hat geschrieben:Ich will eine mögliche Sicherheitslücke verstecken.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Außerdem gibt es eine irrationale.
Wie man Fragen richtig stellt
Das ändert auch nichts; das Protokoll mitsniffen und gut ist.synopia hat geschrieben:2. Du machst etwas ähnliches mit einem Stück ausgelagertem C/C++ Code, der als DLL oder so dabei liegt. Dieses Stück muss ebenfalls die komplette Spiellogik enthalten und "nachspielen", was der Benutzer tut. Dort wird dann auch die Kommunikation mit dem Highscoreserver umgesetzt. Diese DLL ist dann auch nicht unter Opensource.
Wie gesagt, um 95% cheatersicher zu sein, muss dein Programm den Spielverlauf aufnehmen, und die Spieler schicken diesen dann an den Server, wenn die Punktzahl fragwürdig ist.