Perl-Code schützen
Astrid
- perl
0 Knud Schröder0 Stefan Muenz0 Astrid
0 Andreas Bierhals
Hallo Forumsbesucher,
ich habe ein recht komplexes Perl-Script geschrieben, das ich gerne auf einigen Servern für Kunden installieren möchte. Allerdings will ich verhindern, daß irgendjemand den Code einfach so modifizieren kann. Gibt es eine Möglichkeit Perlscripts zu schützen?
Dankeschön
Astrid
PS: Es geht nicht darum, Perlscripts vor dem Download zu schützen, sondern, vor der Modifikation auf dem Server selbst.
Hallo Astrid !
Installiere das Script doch erst gar nicht auf den Servern der Kunden, sondern lasse Dein Script vom
Kunden auf Deinem Server aufrufen, dort hast nur Du Zugriff.
Gruß,
Knud
Hallo Astrid !
Installiere das Script doch erst gar nicht auf den Servern der Kunden, sondern lasse Dein Script vom
Kunden auf Deinem Server aufrufen, dort hast nur Du Zugriff.Gruß,
Knud
Hi Knud,
daran dachte ich auch schon. Aber das Script erzeugt einiges an Daten auf dem Server und das will ich natürlich nicht alles bei mir haben bzw. der Kunde will das auch nicht unbedingt. Kann man das Script so einrichten, daß es auf meinem Server ausgeführt wird und Datendateien beim Kunden anlegen bzw. ändern kann ?
Grüsse
Astrid
Moin Astrid!
Kann man das Script so einrichten, daß es auf meinem Server ausgeführt wird und Datendateien beim Kunden anlegen bzw. ändern kann ?
Naja, theoretisch ist das schon moeglich, nur muessen dann ja die gesamten Daten ueber ein geeignetes Protokoll ueber's Netzwerk geschaufelt werden, was weder fuer Performance noch fuer Ausfallsicherheit besonders vorteilhaft ist.
Das einzige, was mir dazu einfaellt, ist perl2exe. Dies laeuft nur auf Windows und bindet im Prinzip Deinen Perl-Interpreter zusammen mit Deinem Script und ein paar anderen Sachen zu einer EXE-Datei zusammen. Wenn Dein Server auf nem richtigen OS laeuft, nuetzt Dir das natuerlich nichts. Ich finde das jetzt leider nicht wieder, eine Suchmaschine hat http://www.demobuilder.com/ ausgespuckt, aber der Server ist von mir aus momentan nicht erreichbar.
So lange, Calocybe
Moin,
Das einzige, was mir dazu einfaellt, ist perl2exe. Dies laeuft nur auf Windows [...] Wenn Dein Server auf nem richtigen OS laeuft, nuetzt Dir das natuerlich nichts.
Da ich hierüber im hiesigen Archiv neulich zufällig etwas gelesen hatte und dem dortigen Link gefolgt war: Unter http://www.dynamicstate.com/perl2exe.htm steht, das Programm würde (jetzt?) auch auf verschieden Unix-maschinen laufen.
Swen
Hallo Calocybe,
perl2exe müsste doch auch auf anderen Plattformen funktionieren. Jedenfalls gibt‚s bei www.dynamicstate.com Versionen für Windows/Unix/Linux uvm.
Hab ich vorhin irgendwo weiter unten im Forum gelesen.
Astrid
Hallo Astrid
ich würde den zugriff auf des verzeivhnis mit deinem Script einfach verbieten.
So, daß es nur von dir geändert werden kann. (Gegen den Admin hilft das natürlich nicht)
Es gibt auch noch im CPAN einen Perl to C compiler. Er hat alerdings ein paar einschrenkungen und
für win32 gibts keine binnaries. Ich hab ihn nicht zum laufen gebracht.
Sonst kannst du nur so Perl schreiben, daß es keiner mehr versteht, was in Perl durchaus möglich ist...
Tschüs
Daniel
Hallo Astrid,
ich habe ein recht komplexes Perl-Script geschrieben, das ich gerne auf einigen Servern für Kunden installieren möchte. Allerdings will ich verhindern, daß irgendjemand den Code einfach so modifizieren kann. Gibt es eine Möglichkeit Perlscripts zu schützen?
Wenn der Server ein Unix-Rechner ist, ist mit der ueblichen Rechte-Kennung 755 fuer CGI-Scripts eigentlich gewaehrleistet, dass nicht einfach "irgendwer" die Scriptdateien neu schreiben kann.
Und wenn es einfach um deine Absicherung geht, weil du befuerchtest, der Kunde wurschtelt an den Scripts herum und macht dir hinterher Vorwuerfe wenn was nicht funktioniert: dann heb dir einfach die ausgelieferte SW-Version auf (solltest du sowieso), dann hast du jederzeit die Grundlage zum Vergleich.
Oder welche andere konkrete Befuerchtung hast du?
viele Gruesse
Stefan Muenz
Hallo Stefan,
Oder welche andere konkrete Befuerchtung hast du?
es geht eigentlich um eine Art Kopierschutz. Das Script ist sehr universell und eignet sich für viele verschiedene Sites, da man nur ein paar Templates ändern muss. Ich habe auch Kunden, die dieses Script einsetzen möchten, aber auch selbst im Webpublishing tätig sind. Da habe ich dann schon Angst, daß sie meine Software unter eigenem Namen weitervertreiben. Ich dachte, daß ich den Sourcecode schütze und die Scriptaufrufe auf meinem eigenen Server logge (natürlich werden die Kunden über dieses Vorgehen informiert). Dann hätte ich eine Kontrolle, wo mein Script läuft.
Oder gibt es andere Möglichkeiten solche Arbeiten effektvoll zu schützen?
Astrid
Hallo Astrid,
Oder gibt es andere Möglichkeiten solche Arbeiten effektvoll zu schützen?
Ich denke, mit dem Erstellen und auf Rechnung basierten Ausliefern erwirbst du einfach die Rechte an der Software, es sei denn, es ist mit dem zahlenden Kunden anders vertraglich anders ausgemacht und die Rechte gehen mit dem Erwerb an ihn ueber.
Die Tatsache, dass man etwas technisch gesehen leicht kopieren kann, musst du den juristischen Anspruechen gegenueberstellen, die an der Software herrschen. Musik-CDs kann man auch leicht kopieren, aber trotzdem gibt es Rechte, die eingefordert werden koennen, wenn ein Verstoss bekannt wird.
Es hat wenig Sinn zu versuchen, offenen Quellcode technisch zu schuetzen. Wer will, findet immer einen Weg. Wichtiger ist die juristische Absicherung.
viele Gruesse
Stefan Muenz
Hallo Stefan,
»»Wichtiger ist die juristische Absicherung.
Ich misch mich mal kurz rein bei euch. Welche Möglichkeiten hat man denn sich juristisch abzusichern? Da ich als "Freelancer" auch ab und zu Software schreibe, die man universell einsetzen kann, möchte ich auch die Rechte daran nicht verlieren. Bisher hab ich das mit einer Art "Lizenzvertrag" geregelt. Reicht das, oder solltekann man sich noch anders schützen? Wie kann ich nachweisen, wenn ich auf z.B. modifizierten Code stosse, daß der ursprüngliche Code von mir ist?
CU
speedy
es geht eigentlich um eine Art Kopierschutz.
Das Script ist sehr universell und eignet sich
für viele verschiedene Sites, da man nur ein paar
Templates ändern muss.
Das spricht für Dein Skript - und eigentlich willst
Du doch auch, daß viele Leute es verwenden, solange
Dein wirtschaftlicher Erfolg dadurch nicht geschmälert
wird, oder?
Ich habe auch Kunden, die dieses Script einsetzen
möchten, aber auch selbst im Webpublishing tätig
sind. Da habe ich dann schon Angst, daß sie meine
Software unter eigenem Namen weitervertreiben.
Wie Stefan schon schrieb, ist das eher ein juristisches
als ein technisches Problem.
Ich dachte, daß ich den Sourcecode schütze
Bei Open Source? Und zwar wie?
Alles, was Du erfindest, um den Zugang zu erschweren,
kann jemand anderes re-engineeren.
Du kannst es ihm natürlich ein bißchen erschweren,
beispielsweise ein Programm drüberlaufen lassen, das
alle Kommentare entfernt, Einrückungen und Zeilen-
umbrüche eliminiert, sprechende Namen für Identifier
durch numerierte Namen ersetzt usw. - einen Obfuscator
eben. (Schlechter Programmierstil "hilft" ebenfalls. ;-)
Aber Du kommst letztlich nicht wirklich weiter als bei
der Diskussion, ob man HTML-Source verstecken kann.
Es dürfte die Arbeit also nicht wert sein.
und die Scriptaufrufe auf meinem eigenen Server
logge (natürlich werden die Kunden über dieses
Vorgehen informiert). Dann hätte ich eine Kontrolle,
wo mein Script läuft.
Wer an Deinem Skript herumschrauben kann, der findet
auch Deine Logging-Funktion (suche nach "http" ... ?)
und baut sie aus.
(Schon deshalb, weil sie ihn Performance kostet ... ;-)
Oder gibt es andere Möglichkeiten solche Arbeiten
effektvoll zu schützen?
Ich würde damit beginnen, den Softwarevertrag entsprechend
abzufassen.
Als nächstes würde ich überlegen, ob Perl die richtige
Sprache für Dein Projekt ist. Verwendest Du massiv
reguläre Ausdrücke bzw. Hashes? Falls nicht, ist eine
Übertragung z. B. nach C oder C++ wahrscheinlich nicht
schwer, und dann könntest Du (plattformspezifische)
Binaries ausliefern. Es ist Deine Entscheidung, ob Du
einen Quelltext oder eine Black Box verkaufen willst.
Ich als Kunde würde ggf. für die Source-Lösung mehr
zahlen - nicht, weil ich sie mißbrauchen will, sondern
weil sie transparenter und damit besser bedienbar oder
gar anpaßbar ist, falls sich meine Anforderungen ändern.
Es könnte ja sein, daß ich als Kunde aufgrund der Kennt-
nis des Quelltextes eine Idee für eine Änderung habe
Daniel hat ja bereits auf einen Cross-Compiler nach
C verwiesen - vielleicht reicht der ja, um dessen Aus-
gabe als neuen Quelltext für die Weiterentwicklung zu
nehmen und manuell zu ergänzen?
Was Du haben willst, das wäre ein Perl-Compiler, der
plattformspezifische binaries generiert.
Die Lösung über "perl2exe" halte ich allerdings für
nicht wirklich elegant, sie kostet Platz und wahrschein-
lich auch Performance. Aber falls es nichts Besseres
gibt ...
Moin,
Daniel hat ja bereits auf einen Cross-Compiler nach
C verwiesen - vielleicht reicht der ja, um dessen Aus-
gabe als neuen Quelltext für die Weiterentwicklung zu
nehmen und manuell zu ergänzen?
Du meinst, den Output eines Perl->C Converters nehmen
und den dann weiterprogrammieren? Viel Vergnügen - das, was
perlcc aus einem helloworld.pl machte, reichte zumindest
mir zur Abschreckung ;-)
Was Du haben willst, das wäre ein Perl-Compiler, der
plattformspezifische binaries generiert.
Die Lösung über "perl2exe" halte ich allerdings für
nicht wirklich elegant, sie kostet Platz und wahrschein-
lich auch Performance. Aber falls es nichts Besseres
gibt ...
Das dürfte aber nur dann Performance kosten, wenn
andererseits mod_perl o.Ä. verwendet wird.
Bei einem Webserver mit "konventioneller" perl/cgi-Schnittstelle
dürfte es nicht auffallen, da der Perl-Interpreter an sich
ja ebenfalls um 500 kB groß ist.
Bis dannundwann
Andreas
Die Lösung über "perl2exe" halte ich allerdings für
nicht wirklich elegant, sie kostet Platz und wahrschein-
lich auch Performance. Aber falls es nichts Besseres
gibt ...
Das dürfte aber nur dann Performance kosten, wenn
andererseits mod_perl o.Ä. verwendet wird.
Bei einem Webserver mit "konventioneller" perl/cgi-Schnittstelle
dürfte es nicht auffallen, da der Perl-Interpreter an sich
ja ebenfalls um 500 kB groß ist.
Aber der normale perl-Interpreter muß vom Betriebssystem
nur ein einziges Mal im Platten-Cache gehalten werden.
Die vielen CGIs mit eingebundenem Perl dagegen alle einzeln ...
Hi Michael,
ich glaube Du hast Recht! Perl ist für mein Projekt wirklich am geeignetsten (wie Du schon sagtest: Hashes und regexps im Übermass <g>). Ich glaube ich werde das mit einem Softwarevertrag machen und dem Kunden auch die Möglichkeit geben, das ganze selbst zu "verfeinern". Vielleicht bringt das sogar mehr, als das ganze Paket zuzunageln (Das wäre, wie diese Diskussion zeigt, eh ein Klimmzug).
Vielen Dank für Deine Hilfe (und auch die der anderen)
Astrid
Hallo Stefan,
Oder welche andere konkrete Befuerchtung hast du?
es geht eigentlich um eine Art Kopierschutz. Das Script ist sehr universell und eignet sich für viele verschiedene Sites, da man nur ein paar Templates ändern muss. Ich habe auch Kunden, die dieses Script einsetzen möchten, aber auch selbst im Webpublishing tätig sind. Da habe ich dann schon Angst, daß sie meine Software unter eigenem Namen weitervertreiben. Ich dachte, daß ich den Sourcecode schütze und die Scriptaufrufe auf meinem eigenen Server logge (natürlich werden die Kunden über dieses Vorgehen informiert). Dann hätte ich eine Kontrolle, wo mein Script läuft.
Wenn diese Qunden nicht viel Ahnung von Unix haben, kannst du das Script mit UPX komprimieren, dann ist es nicht mehr plain text. Ist aber nur eine Frage der Zeit, wie die Kunden dahinter kommen.
mfg
Eduard.
Moin Astrid,
Hallo Forumsbesucher,
ich habe ein recht komplexes Perl-Script geschrieben, das ich gerne auf einigen Servern für Kunden installieren möchte. Allerdings will ich verhindern, daß irgendjemand den Code einfach so modifizieren kann. Gibt es eine Möglichkeit Perlscripts zu schützen?
Unter Linux finde ich hier gerade ein Programm namens
"perlcc". Dieses wandelt ein Perl-Script offenbar in C-Code
um, in dem ein Perl-Runtime-Modul einbunden wird, danach wird
aus dem ganzen Kram mit Hilfe von gcc
ein binäres ausführbares File gemacht. Das ganze sieht dann
in etwa so aus:
~ $ perlcc hello.pl
Compiling hello.pl:
Making C(hello.pl.c) for hello.pl!
perl -I/usr/lib/perl5/5.00503/i386-linux -I/usr/lib/perl5/5.00503 -I/usr/lib/perl5/site_perl/5.005/i386-linux -I/usr/lib/perl5/site_perl/5.005 -I. -MO=CC,-ohello.pl.c hello.pl
hello.pl syntax OK
Compiling C(hello) for hello.pl!
perl -I/usr/lib/perl5/5.00503/i386-linux -I/usr/lib/perl5/5.00503 -I/usr/lib/perl5/site_perl/5.005/i386-linux -I/usr/lib/perl5/site_perl/5.005 -I. /tmp/hello.pl.tst
cc -Dbool=char -DHAS_BOOL -I/usr/local/include -O2 -I/usr/lib/perl5/5.00503/i386-linux/CORE /usr/lib/perl5/5.00503/i386-linux/auto/Fcntl/Fcntl.so -o hello hello.pl.c -L/usr/local/lib -L/usr/lib/perl5/5.00503/i386-linux/CORE -lperl -lnsl -ldl -lm -lc -lposix -lcrypt
~ $ strip hello
~ $ ./hello
Hello World
Ein simples Hello-World-Skript wird hierbei natürlich
auf >400 kB aufgebläht, allerdings dürfte es schon deutlich
schwerer fallen, den Original-Quellcode aus dem compilierten
File zu rekonstruieren. Garantieren kann einem das natürlich
wie immer niemand ;-)
Bis dannundwann
Andreas