Code verschleiern

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.
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

hallo zusammen,

Ich habe eine Python Skript geschrieben desen Code man nicht umbedingt sehen können sollte. Hat einer von euch eine Idee wie ich den Code verschlüssle oder unauffindbar mache?

Gruß
lambert
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Generell kann man nur davon abraten Code
zu verschleiern, nicht sonderlich professionell und seriös.
wenn du aber nicht willst das jemand deinen code
sieht, gib doch einfach deine pyc Datei raus
Zuletzt geändert von pr0stAta am Montag 16. Oktober 2006, 15:36, insgesamt 1-mal geändert.
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

das ist kein scherz:
mach es über das internet.
nehme einen server und lasse den code darauf laufen,
dann kann der anwender den code nicht sehen...
die textdatei kannst du lesen, die *.pyc oder *.pyo kann man mit der stdlib wieder in text umwandeln, und alle anderen ansätze sind auch leicht knackbar.
http://www.cs.unm.edu/~dlchao/flake/doom/
Anfänger1911
User
Beiträge: 62
Registriert: Donnerstag 17. November 2005, 16:25

Was ist mit py2exe? Da kann man den Code doch auch nicht mehr sehn oder?
Zap
User
Beiträge: 533
Registriert: Freitag 13. Oktober 2006, 10:56

meines Wissens ist das compilieren von Pythonskripten auch wieder
Rückgängig zu machen.
Es gibt im web zb decompyle Services. Also ist das auch keine Möglichkeit.
Zudem widerspricht das meines Wissens auch der Philosophie von Python,
Code für jeden Zugänglich zu halten.
Was hast du zu verstecken !? ;)
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

bei py2exe wird der interpreter nur in eine exe-datei gepackt,
die automatisch mit dem skript als parameter gestartet wird.
also, was ich damit sagen will, ist, dass in der exe eine text-datei mit deinem code rumschwimmt, daher muss man einfach nur an der richtigen stelle kucken...
und sonst über internet, das ist das sicherste.
http://www.cs.unm.edu/~dlchao/flake/doom/
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Um was für eine Anwendung handelt es sich denn genau? Wenn du eine schlechte Sicherheitsprüfung wie "if password == 'geheim'" eingebaut hast, ist das Problem nicht die potentielle Sichtbarkeit des Codes, sondern der "Algorithmus" dahinter ;)
Costi
User
Beiträge: 545
Registriert: Donnerstag 17. August 2006, 14:21

<quatsch>
die frage ist welchen aufwand nhemand zur entschluessung geben wuerde,
ich denke aber, das wenn du den ganzen script in einen string speicherst, verschluesschelst und ihm zur executierung moeglichst kryptisch entschtschluesselst, das ganze ding dan mit jython in java script umwandelst, kompilierst, das ganze nochmal mit diesen shareare programmen, die angeblich sogar windows-eigene programme schneller laufen lassen durchlaufen lasst und


puuhh, sry ich blick da oben aber nicht mehr durch :lol: :lol: :lol: die kern-ausage ist aber hoffe ich ersichtlich: haaaaa sry hab jetzt vollig den faden verloren, wieder nen sinnlosen beitrag, lol
</quatsch>


wenn du uns aber genauer sagst woran es sich im script handelt, finden wir vieleicht eine alternative!
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Kann es sein, daß hier motivationslos rumgerätselt wird, was Lambert eigentlich will? Haben wir solche Fragen nicht schon x-mal beantwortet?

Gruß,
Christian (der die Fragen rein rhetorisch verstanden wissen will!)

edit: Entschuldigung - hatte den falschen Namen zitiert.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Costi hat geschrieben:[...] das ganze ding dan mit jython in java script umwandelst, [...]
Ja, das ist in der Tat ziemlicher Quatsch. Den klaffenden Unterschied zwischen Java (Jython: Java<->Python) und JavaScript kennst du nicht zufällig?
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

Also um das ganze mal aufzuschlüsseln. Ich bräuchte die Verschlüsselung meines Codes weil ich ein Programm für ein, schon bestehendes, Roboterprogram in meinem Praktikum geschrieben habe. Und das geht jetzt an den "Kunden", Kunde trifft es nicht ganz weil es ein Forschungsprojekt ist. Und damit nur wir alleine Änderungen vornehmen können, und nicht jeder der 40 Beteiligten alleine, muss der Code eben geschützt werden. Das Problem ist ganz einfach: Das Simulationsprogramm ruft aus einem bestimmten Ordner heraus alle Pythonskripte auf die "__init__.py" heißen. Und nur mit Python lassen sich die speziellen Klassen des Simulationsprogrammes aufrufen. Das heißt Python ist unabdingbar. Und in eine Exe umwandeln geht auch nicht. Ich habe nämlich nur die 2.1 Version von Python zur verfügung. Die ist ein fester bestandteil des Simulationsprogrammes.

Schöne Grüße
lambert
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

Die antwort ist ganz einfach: Es geht nicht

Ich seh auch das Problem nicht. Wenn die anderen da nicht dran rumpfuschen sollen, dann sagt ihnen das gefälligst. Falls es dir um sowas wie Haftung geht, dann schreib eben einen Haftungsausschluss rein, dass du lediglich für das unveränderte Programm haftest (tust du ohnehin nur).

Erläuter doch mal bitte, wieso andere die Sourcen nicht bearbeiten/sehen dürfen?
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Na ja, ich kenne schon ähnliche Probleme: In der Forschung ticken die Uhren halt manchmal anders. Aber womöglich reicht es schon alle Dateien an einem Ort zu entwickeln, an einem anderen zu installieren und prompt alle .py-Dateien zu löschen und die .pyc-Dateien weiterzuverwenden. Wenn man ein paar Skripte schreibt, die das erledigen ist auch ein Update nicht so furchtbar arbeitsintensiv.
Ich könnte mir schon vorstellen, das eine solche Strategie ausreichend ist, da es ja offenbar nicht um den Schutz proprietären Codes geht.

Gruß,
Christian
BlackJack

Alternativ könnte man eine Prüfsumme (Module `md5` oder `sha`) über die Quellen berechnen und das auch in den Package-Code einbauen. Wenn die Prüfsummen abweichen dann einfach das Programm beenden.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Lambert hat geschrieben:Und damit nur wir alleine Änderungen vornehmen können, und nicht jeder der 40 Beteiligten alleine, muss der Code eben geschützt werden.
Also, wenn ich das richtig verstehe: Du möchtest verhindern, dass eine andere funktionalität, als genau die, die du programmiert hast, von einem anderen Programm genutzt wird.

Selbst wenn du es schaffst, deine Skripte 100% unverständlich zu machen, würde dieses Ziel immer noch nicht erfüllt, da man deine Skripte ja einfach gegen komplett fremde austauschen kann.

Wenn die Annahme getroffen wird, dass die Angreifer zwar in der Lage wären, veränderungen zu machen, aber nicht genug wissen hätten, um ein eigenes Skript zu scheiben, sollte man imho auch davon ausgehen können, dass sie mit dem Unkommentierten Code, den ein disassemblieren (afaik) ergeben würde, nicht viel anfangen können.

Für die Problematik
Und damit nur wir alleine Änderungen vornehmen können, und nicht jeder der 40 Beteiligten
wurden Dateisysteme mit Rechtevergabe erfunden. Die einfache Lösung wäre, dass niemand ausser dir ein schreibrecht hat.

Wenn das Problem ist, dass das Programm vor denen, die diese Rechte vergeben, geschützt werden soll, so liegt das Problem ausserhalb der Informatik: Wenn root nicht vertrauenswürdig ist, ist man aufgeschmissen.
Alternativ könnte man eine Prüfsumme (Module `md5` oder `sha`) über die Quellen berechnen und das auch in den Package-Code einbauen. Wenn die Prüfsummen abweichen dann einfach das Programm beenden.
Was hindert den Angreifer daran, einfach diese Prüfsumme gegen eine eigene auszutauschen?
BlackJack

keppla hat geschrieben:
Alternativ könnte man eine Prüfsumme (Module `md5` oder `sha`) über die Quellen berechnen und das auch in den Package-Code einbauen. Wenn die Prüfsummen abweichen dann einfach das Programm beenden.
Was hindert den Angreifer daran, einfach diese Prüfsumme gegen eine eigene auszutauschen?
Nichts. Das war als Alternative oder Ergänzung gedacht den Haftungsauschluss in jeder Datei als Kommentar oben in den Quelltext zu schreiben. Wenn das Programm mit einer deutlichen Meldung abbricht, dann kann keiner sagen er hätte es überlesen.

Ich gehe grundsätzlich davon aus, dass man so etwas über eine entsprechende Lizenz löst. Wenn die Leute rumhacken *wollen*, dann schaffen sie das letztendlich immer irgendwie.

Wenn man seine Kunden als "Angreifer" sieht, dann hat man ein ernsthaftes Vertrauensproblem. :-)
Lambert
User
Beiträge: 40
Registriert: Montag 20. Februar 2006, 09:32

Ich denke das ich es wohl so probiere das ich auf den "fremden" Computern *.pyc erzeugen lasse und die *.py lösche.

Ich brauche kein ultra sicheres Konzept. Es darf nur nicht jeder leihe dazu in der Lage sein das Skript zu ändern.

Nochmal mein Problem. Ich drücke mich wahrscheindlich etwas unklar aus. Aber wenn man in so einem Projekt tief drin steckt verliert man halt ein bisschen den klaren blick.
In dem Projekt arbeiten etwa 40 verschiedene Firmen und Institute zusammen. Das heißt ich kann den keine Benutzerrechte auf ihren PCs vorschreiben. Aber es ist äußerst wichtig das die 40 alle mit der gleichen Version arbeiten. Den die 40 bekommen Dateien zugeschickt mit denen sie arbeiten müssen. Und einer der ersten Schritte ist mein Program. Ganz zum Schluss laufen die bearbeiteten Dateien dann wieder zusammen (großteils). Wenn jetzt jemand mit einer anderen Version schon startet, läuft es eben irgendwann aus dem Ruder.

Schöne Grüße
Lambert
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

Mal blöd gefragt: warum sollten die das Programm ändern? Sind die nicht dazu angehalten und bereit zusammen zu arbeiten? Es wird einfach darauf hingewiesen, dass das Programm nicht geändert werden darf. Wenn es jemand trotzdem tut und dadurch Probleme auftreten bekommt er vom Projektleiter einen derartigen Fön, dass er sich das erstmal ne Weile merkt.
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Lambert hat geschrieben:...meinem Praktikum... ...ein Forschungsprojekt... ...damit nur wir alleine Änderungen vornehmen können...
Forschungsprojekt ? Uni/FH ?

Mach es doch einfach als OpenSource! Fertig. Können alle mithelfen. Damit hättest du dir einige Probleme von der Welt geschaft...

[wiki]Warum ist quelloffene Software nicht böse[/wiki]

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Mein Gott nun hackt doch nicht alle auf ihm rum blos weil er eben
KEIN OPEN SOURCE WILL - was sein gutes Recht ist, ihr müsst nicht jeden totlabern mit "blah blah ... sag ihnen sie dürfens nicht blah".

ByteCode reicht völlig aus um jeden ahnungslosen auszuschliessen.
Ansonsten evtl noch ein bischer XOR.

Java ist übrigens das gleiche Problem das auch jeder den ByteCode zurücktransformieren könnte. MAschinensprache ist das schon etwas aufwendiger.

Py2Exe hilft auch recht gut gegen Ahnungslose "ich fummel mal rum" Typen.
Antworten