Code scrambler gesucht

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.
Antworten
nwp
User
Beiträge: 3
Registriert: Mittwoch 1. März 2006, 23:58
Kontaktdaten:

Donnerstag 2. März 2006, 00:05

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
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 2. März 2006, 08:49

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Donnerstag 2. März 2006, 08:59

GLP????? :lol:
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Donnerstag 2. März 2006, 08:59

:oops: GPL natürlich :lol:

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
BlackJack

Donnerstag 2. März 2006, 10:22

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.
Gibt's für Python nicht, weil Python zu dynamisch ist und dadurch Code kaputtgehen kann.

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')
Wenn ein Quelltext-Scrambler jetzt die `kill_dragon()`-Methode umbenennt, dann funktioniert das Programm nicht mehr.
nwp
User
Beiträge: 3
Registriert: Mittwoch 1. März 2006, 23:58
Kontaktdaten:

Donnerstag 2. März 2006, 14:01

Schade dass es sowas nicht gibt. Ich werde das programm dann also doch selber schreiben müssen. Vielleicht poste ich das fertige.
mfg nwp
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Donnerstag 2. März 2006, 14:30

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.
synopia
User
Beiträge: 17
Registriert: Mittwoch 1. März 2006, 19:47

Donnerstag 2. März 2006, 15:48

Du könntest dein Programm einfach kompileren:

Code: Alles auswählen

import compiler
compiler.compileFile("test.py")
Und dann wie gewohnt starten:

Code: Alles auswählen

> python test.pyc
hf
--
http://www.weltenwerk.net
^^
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Donnerstag 2. März 2006, 15:59

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.
nwp
User
Beiträge: 3
Registriert: Mittwoch 1. März 2006, 23:58
Kontaktdaten:

Donnerstag 2. März 2006, 23:06

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
Kompottkin
User
Beiträge: 21
Registriert: Sonntag 26. Februar 2006, 03:09
Wohnort: Penzberg
Kontaktdaten:

Freitag 3. März 2006, 02:25

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 ;)
synopia
User
Beiträge: 17
Registriert: Mittwoch 1. März 2006, 19:47

Freitag 3. März 2006, 07:57

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 ;-)
--
http://www.weltenwerk.net
^^
Benutzeravatar
jens
Moderator
Beiträge: 8461
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Freitag 3. März 2006, 08:46

Zum Thema Sicherheit gibt es auch eine Wiki Seite: http://wiki.python.de/Thema_Sicherheit

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Freitag 3. März 2006, 09:14

nwp hat geschrieben:Ich will eine mögliche Sicherheitslücke verstecken.
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.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Freitag 3. März 2006, 16:48

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.
Das ändert auch nichts; das Protokoll mitsniffen und gut ist.

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