Don P: JavaScript mit Kopierschutz?

Hallo,

Mal eine Frage: Hat jemand eine Idee, wie man das Kopieren eines JavaScript-Programms verhindern kann?

Hintergrund: Ich habe ein recht aufwändiges Programm entwickelt (bzw. bin noch dabei), das ich vielleicht auch weitergeben will, aber nicht gratis.

Ist es irgendwie machbar, dass nur diejenigen das Programm benutzen können, die es auch bezahlt haben?

Gruß, Don P

  1. Hallo,
    kurze Antwort:
    Nein es ist nicht möglich.

    JS wird ganz normal auf dem Client ausgeführt und somit kann jeder Besucher (nicht nur jeder Kunde) den JS Code nach belieben kopieren und weitergeben.

    Lösungen wären nur per AJAX, dann könnte man zwar das Frontend kopieren, an das Backend kommt man aber schwerer dran.

    Grüße
    Klaus

  2. Hallo,

    Hat jemand eine Idee, wie man das Kopieren eines JavaScript-Programms verhindern kann?

    Nein, das geht nicht.

    Ich habe ein recht aufwändiges Programm entwickelt (bzw. bin noch dabei), das ich vielleicht auch weitergeben will, aber nicht gratis.

    Der Sinn von einem JavaScript ist, dass deine Kunden es in ihre Website einbinden können? Damit kann es auch potenziell jeder Seitenbesucher kopieren, analysieren und verwenden. Das kannst du höchstens erschweren, indem du den Quelltext komprimierst - wobei die öffentliche API natürlich verständlich sein muss.

    Wenn du den zahlenden Kunden damit große Einschränkungen auferlegst oder die Benutzung erschwerst, hilft das niemandem. Mache dir keine großen Gedanken über möglichen Missbrauch, sondern stecke deine Zeit in das »Marketing« und die komfortable Lizensierung. Wenn sich herumspricht, dass du ein faires Angebot machst und das Programm eine gute Leistung bringt, dann wird sich das für dich auch lohnen. Mit fragwürdigen »Kopierschutzmaßnahmen« und sonstige Restriktionen fällst du dir nur selbst in den Rücken.

    Generell würde ich (auch für kostenpflichtige) Scripte ein offenes Entwicklungsmodell empfehlen - stelle den Nutzern umfangreiche Ressourcen zur Verfügung wie eine öffentliche Dokumentation, Forum, Fehlermelde-Formular usw. Wenn du von vornherein dicht machst, dann bist du im Web 2.0 einfach isoliert und du kannst kein Vertrauen gewinnen.

    Ist es irgendwie machbar, dass nur diejenigen das Programm benutzen können, die es auch bezahlt haben?

    Du meinst einen Lizenzschlüssel? Nein, so etwas wäre nicht möglich, ohne die Benutzbarkeit des Programms krass einzuschränken.

    Mathias

    1. Hallo Mathias,

      Danke für die ausführlichen Tipps.

      Der Sinn von einem JavaScript ist, dass deine Kunden es in ihre Website einbinden können?

      Nein, in diesem Fall nicht. Es ist ein eigenständiges Programm, das einem bestimmten Zweck dient und zwar auch lokal ohne jede Serveranbindung, d.h. der Rechner muss nicht mit einem Intra-/Internet verbunden sein.

      Warum dann überhaupt JavaScript? Naja, ich wollte meine neu erworbenen JavaScript-Kenntnisse mal richtig anwenden, also nicht mit irgendwelchem Test-Schnickschnack, sondern gleich so, dass auch ein brauchbares Programm dabei rauskommt. Dachte zuerst gar nicht an einen Verkauf.
      Weitere Gründe waren, dass HTML+JavaScript problemlos mit den Bordmitteln jedes Betriebssystems läuft, z.B. auch im Browser eines iPhone oder so (was wichtig ist), und mit CSS kann man leicht versch. "Skins" dazu basteln usw. usf.; es gibt ja allgemein viele Gründe, die für JavaScript sprechen...

      Wenn du den zahlenden Kunden damit große Einschränkungen auferlegst oder die Benutzung erschwerst, hilft das niemandem. Mache dir keine großen Gedanken über möglichen Missbrauch, sondern stecke deine Zeit in das »Marketing« und die komfortable Lizensierung. Wenn sich herumspricht, dass du ein faires Angebot machst und das Programm eine gute Leistung bringt, dann wird sich das für dich auch lohnen. Mit fragwürdigen »Kopierschutzmaßnahmen« und sonstige Restriktionen fällst du dir nur selbst in den Rücken.

      Das sehe ich ein, aber ich will es, wenn überhaupt, dann recht teuer verkaufen :-), weil der Käufer damit evtl. auch viel Geld erwirtschaften kann. Ein  Massenprodukt ist es auf keinen Fall. Vielleicht 10 bis 20 Lizenzen würde ich vergeben, mehr nicht. Durch den relativ hohen Preis besteht dann natürlich die Gefahr, dass das Programm einfach kopiert wird. Ein paar-Euro-fünfzig-Script mit Support und allem würde sich natürlich problemloser absetzen lassen.

      Du meinst einen Lizenzschlüssel? Nein, so etwas wäre nicht möglich, ohne die Benutzbarkeit des Programms krass einzuschränken.

      Ja, ein Lizenzschlüssel wäre ideal. Dafür würde ich sogar Einschränkungen in der Benutzbarkeit hinnehmen (bzw. die Kunden müssten das halt hinnehmen), wenn z.B. jeweils ein Login auf einem Server notwendig wäre. Dann wäre es eben doch nur mit Internetverbindung benutzbar. Vielleicht so, dass wesentliche Programmteile erst per AJAX nachgeladen werden, an die man sonst nur sehr schwer (oder besser gar nicht) rankommt. Wie müsste das dann ungefähr aussehen, dass man gar nicht an den Quelltext kommt?

      Gruß, Don P

      1. Hi,

        Wie müsste das dann ungefähr aussehen, dass man gar nicht an den Quelltext kommt?

        So: <script type="text/javascript"></script>

        Gruß, Cybaer

        --
        Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
        (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
        1. Hi Cybaer,

          »» Wie müsste das dann ungefähr aussehen, dass man gar nicht an den Quelltext kommt?

          So: <script type="text/javascript"></script>

          Wow, bin beeindruckt. Ein Scherz? Falls nicht:
          Wie soll ich dem Ding dann ein src verpassen, ohne dass die Quelle früher oder später doch explizit im Frontend lesbar wird und somit vom User dann auch direkt geladen werden kann?

          Das scheint mir unmöglich. Oder geht es vielleicht doch?

          Was AJAX angeht, habe ich noch Nachholbedarf... Aber es reicht, wenn man mir das Grundprinzip aufzeigt, den konkreten Code krieg' ich dann schon gebacken.

          Gruß, Don P

          1. Hi,

            Wie soll ich dem Ding dann ein src verpassen, ohne dass die Quelle früher oder später doch explizit im Frontend lesbar wird und somit vom User dann auch direkt geladen werden kann?

            Du verstehst also langsam ...

            Was AJAX angeht, habe ich noch Nachholbedarf... Aber es reicht, wenn man mir das Grundprinzip aufzeigt, den konkreten Code krieg' ich dann schon gebacken.

            Auch "AJAX" ist im Grunde nur ein popeliges Objekt zur Ausfuehrung von HTTP-Requests aus JavaScript heraus. Dass es damit im vorliegenden Fall keine zusaetzliche "Sicherheit" bietet, liegt damit auf der Hand.

            MfG ChrisB

            --
            „This is the author's opinion, not necessarily that of Starbucks.“
      2. Grüße,
        was der user zum ausführen an den prozessor gibt - muss wohl im speicher sein - was im speicher ist - ist "kopiert".
        was du willst - ist die unlezinsierte VERWENDUNG von deinem programm einzuschrenken. nun - wenn das wirklich gut ginge. denk an Necrosoft oder an Spore - beide zeigen, dass millionenschwere kopierschutzmechanismen nichts bringen bzw. schaden.

        es exisitieren auf dieser Welt keine Schutzmehanismen die von Menschenhand erschaffen und von Menschenhand nicht zu umgehen sind.

        die "gehakte" version kann sogar attrkativer sein, wenn der schutzmechanismus den verbraucher stört.

        also verfass eine eine Lizens - wer es geschäftlich nutzen wollen wird  wird das problem haben, dass es uU mit geldstrafen geahndet wird. wie sehr das hilft sagen dir aber die aktuellen torrentraker.

        MFG
        bleicher

      3. Ein  Massenprodukt ist es auf keinen Fall. Vielleicht 10 bis 20 Lizenzen würde ich vergeben, mehr nicht. Durch den relativ hohen Preis besteht dann natürlich die Gefahr, dass das Programm einfach kopiert wird.

        Okay, deine Kunden wären also ein paar dir bekannte Firmen, mit denen du näher zusammenarbeitest und denen du auch vielleicht etwas maßschneiderst. - Dann kann ich ehrlich gesagt noch weniger deine Angst nachvollziehen. Klar, auf der Ebene wird auch »raubkopiert«, aber wenn ich das recht verstehe, ist damit die Verbreitung des Programmes eher eingeschränkt. Oder verteilen diese Firmen das Programm dann wieder an deren Kunden?

        Ja, ein Lizenzschlüssel wäre ideal. Dafür würde ich sogar Einschränkungen in der Benutzbarkeit hinnehmen (bzw. die Kunden müssten das halt hinnehmen), wenn z.B. jeweils ein Login auf einem Server notwendig wäre.

        Das bringt letztlich gar nichts - selbst wenn da mächtig viel Kryptographie drin ist und alles nur nach Authentifizierung möglich ist, könnte jemand den Quellcode analysieren und die Sperre umgehen. Da müsstest du eine Spezialfirma mit beauftragen müssen, dir nimmt dir abertausende Euro ab, ohne dass sie dir eine Sicherheit geben kann.

        Vielleicht so, dass wesentliche Programmteile erst per AJAX nachgeladen werden, an die man sonst nur sehr schwer (oder besser gar nicht) rankommt. Wie müsste das dann ungefähr aussehen, dass man gar nicht an den Quelltext kommt?

        Was im Browser an JavaScript ausgeführt werden soll, muss ihm an irgendeiner Stelle unverschlüsselt übergeben werden. »Verschlüsselte«, komprimierte oder obsfuscated Scripte »entschlüsseln« sich daher meistens selbst. An der Stelle kann man sich durch Reverse Engineering einklinken und kommt dann mühelos auch an den Code.

        Mathias

  3. Hallo Don

    es gibt scheinbar die Möglichkeit Javascript zu einer Exe zu compilen. Ob das was taugt oder für dich praktikabel ist kann ich nicht beurteilen.

    Gruß
    Ole
    (8-)>

    --
    Das Wort Vegetarier kommt aus dem Indianischen und bedeutet: Zu dumm zum Jagen.
    1. Hi Ole,

      es gibt scheinbar die Möglichkeit Javascript zu einer Exe zu compilen.

      Das wusste ich ja gar nicht. Mal sehen, ob das paktikabel ist, wäre durchaus denkbar. Vielen Dank! Werde das auf jeden Fall testen :-).

      Gruß, Don P

    2. Hallo,

      es gibt scheinbar die Möglichkeit Javascript zu einer Exe zu compilen. Ob das was taugt oder für dich praktikabel ist kann ich nicht beurteilen.

      alternativ erstellt man eben eine kleine C/C++/C#/VB Anwendung, in der man den Internet-Explorer-Control von Windows verwendet.
      Dort kann man dann seinen JS Code direkt ausführen, den User aber davon abhalten, den Quellcode der Seite zu erspähen.

      Gut, per Memory Dump, API Hooking, Reverse Engineering wäre es weiterhin möglich, das wäre dann aber ein recht versierter User.

      Grüße
      Klaus

      1. Gut, per Memory Dump, API Hooking, Reverse Engineering wäre es weiterhin möglich, das wäre dann aber ein recht versierter User.

        Einen minified und obsfuscated JavaScript-Code, den man nur selbst verstehen muss, kann auch kein nicht-versierter User mal eben wiederverwenden.
        Es sind Webanwendungen mit richtig dicken und komplexen JavaScripten im Netz, die im Prinzip alle einsehbar sind. Die Wahrscheinlichkeit, dass sich jemand ohne Erlaubnis dieses »Intellectual Property« bedient (bedienen kann), halte ich aber für sehr gering.

        Irgendwie verstehe ich den Sinn auch nicht. Die Vorteile der Plattform JavaScript zerstöre ich durch kompiliertes JavaScript bzw. das Bundlen mit einer Engine. Wenn sie für mich nur Nachteile bedeuten, dann sollte ich nicht erst in die eine Richtung laufen und dann denselben Weg wieder zurück, um wieder am Ausgangspunkt herauszukommen.

        Mathias

    3. Hallo,

      Ok, jetzt habe zwei solche Compiler getestet. Beide funktionieren im Prinzip, haben aber das gleiche Problem: Der IE wird benutzt und der ist

      a) zu langsam für das rechenintensive Script,
      b) zeigt er's nicht richtig an und
      c) meldet er JavaScript-Fehler.

      In FF, Opera und Safari ist alles ok, aber für diese gibt's wohl keine Compiler.

      Die Punkte b) und c) ließen sich ja vielleicht beheben, wenn man ihnen auf den Grund geht, aber die Langsamkeit und die Tatsache, dass ein IE zwingend nötig ist, macht so eine Lösung für mich unbrauchbar, schade.

      Wäre ja auch zu schön gewesen, um wahr zu sein...

      Gruß, Don P