Astrid: Perl-Code schützen

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.

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

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

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

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

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

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

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

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

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

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

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

        • und diese dann bei Dir in Auftrag geben will?

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

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

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

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

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

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