Wie kann ich verhindern, dass ein Client meinen Code in einer interpretierten Sprache sieht?

16

Ich erstelle ein ziemlich komplexes interpretiertes Programm in Python. Ich habe den größten Teil dieses Codes einige Monate lang für andere Zwecke bearbeitet und möchte daher nicht, dass mein Kunde ihn einfach kopiert und versucht, ihn zu verkaufen, da er meiner Meinung nach einen angemessenen Betrag wert ist.

Das Problem ist, dass ich das Skript auf einem Server ausführen muss, für den mein Client bezahlt, damit ich einen bestimmten Ordner auf dem Computer vor dem Root-Zugriff schützen oder festlegen kann, dass nur eine bestimmte Verwendung auf das Verzeichnis zugreifen kann ? Das Betriebssystem ist Ubuntu.

Mike Partridge
quelle
13
Welche Art von Vertrag / Vereinbarung besteht zwischen Ihnen und Ihrem Kunden? Besitzen sie den Code oder haben Sie ihnen lediglich die Lizenz zur Verwendung des Codes erteilt? Oder haben Sie nichts davon herausgefunden?
matt b
2
Ich dachte, es sei möglich, Python-Quellcode in Binärdateien zu kompilieren. Ist das bei diesem Projekt möglich? Wenn ja, können Sie stattdessen die Binärdatei bereitstellen.
FrustratedWithFormsDesigner
nightcracker hat meiner meinung nach recht. Eine ordnungsgemäße Lizenzierung und Verträge sollten all dies verhindern, nicht technische Maßnahmen. Vor allem, weil man immer etwas dekompilieren / enttarieren kann und alles machenroot darf .
Bobby
Wenn sie einen Vertrag oder eine Lizenz brechen, können Sie sie verklagen, bis sie weinen
Jakob Bowyer
9
Jeder sagt immer, dass sein Code eine angemessene Summe wert ist.
Kaleb Brasee

Antworten:

40

Lizenz es.

Wirklich, das ist alles!

orlp
quelle
6
Mein erster Gedanke war, dies als keine Antwort abzulehnen, aber verdammt, Sie haben recht. Lizenzierung und Unterzeichnung von Verträgen sind hier der richtige Weg.
Bobby
@ Bobby: Fast der einzige Weg zu gehen. Die Alternative besteht darin, immer wieder reizvolle, nützliche neue Funktionen so schnell hinzuzufügen, dass das Stehlen der alten Version eine Zeitverschwendung wäre.
S.Lott
würde creative commons als lizenz ausreichen?
10
-1 Die Frage fragt nach Möglichkeiten, einen Client daran zu hindern, den Code zu sehen. Menschen halten sich nicht immer an Lizenzen, und es ist möglicherweise nicht möglich, dies rechtlich sicher herauszufinden, um Klage zu erheben.
Orbling
8
Sie können nicht verhindern, dass der Client Python-Code sieht. Das Zerlegen ist zu einfach. DRM funktioniert nicht (wenn sie es ausführen können, können sie es zerlegen). Die einzige Antwort ist also eine legale. Und wenn Sie sich bei der Durchsetzung auf das Gesetz verlassen, ist es sinnlos, sich selbst oder Ihren Kunden das Leben zu erschweren, indem Sie die technische Basis komplizieren.
Ncoghlan
10

Sie können immer alle Ihre Dateien zu Byte-Code pyc kompilieren. Es gibt Dekompilierer, die daraus Quellcode generieren können, aber nichts Ernstes.

Dies löst jedoch nur die Fähigkeit, den Code Ihres Programms zu lesen. Der einzige Weg zum Schutz ist die Lizenzierung, wie Nightcracker sagte, denn selbst wenn Sie Ihren Code kompiliert haben, kann der Maschinencode, wenn Ihre Arbeit nicht durch eine Lizenz geschützt ist, immer noch gegen Ihren Willen kommerzialisiert werden.

Fazit: Kompilieren Sie den Bytecode und lizenzieren Sie ihn, was noch wichtiger ist


quelle
Ich habe eine Frage. Verwendet der Byte-Compiler beliebige Variablennamen oder verwendet er die alten Variablennamen? (Ich würde mir vorstellen, dass es die alten verwenden müsste, da externe Module auf diesen Namespace angewiesen sind).
@ Garrett: Der Bytecode enthält die Variablennamen. Es ist immer noch ein relativ unleserlich Chaos , wenn zerlegt (versuchen Sie die Demontage Verdauen von diesem Rezept ), und es gibt keine (letzte) decompilers.
7

Verwenden Sie Cython. Auf diese Weise können Sie Ihr Programm als native ausführbare Datei kompilieren. Dann sollte es viel schwerer sein zu stehlen.

Der einzige Rat, den ich Ihnen für das Verzeichnis geben kann, ist, sicherzustellen, dass Sie Ihre Berechtigungen korrekt eingerichtet haben. ACLs können Ihre Freunde sein, obwohl ich nicht zu 100% sicher bin, dass sie den Root-Zugriff auf eine Datei einschränken können. Selbst wenn sie könnten, könnte root immer noch die Berechtigung ändern. Er ist Wurzel, er ist Gott - so funktionieren diese Dinge.

http://www.korokithakis.net/node/109

Chris Eberle
quelle
1

Wie der Benutzer oben gezeigt hat, können Disassembler den Code zurückbekommen, aber er ist noch nicht gut lesbar (zumindest nicht für Open-Source-Disassembler).

Ich habe darüber nachgedacht und eine Möglichkeit, dieses Problem zu lösen (wenn Sie erzwungenen Code als Problem bezeichnen), besteht darin, ein automatisches Re-Factoring-Skript zu schreiben. Das wäre eigentlich ziemlich einfach. Sie würden dem Skript einfach Ihr Modul hinzufügen und es würde alle modulspezifischen Variablen umbenennen. Dies würde, zusammen mit der Freigabe der kompilierten Datei, viel dazu beitragen, Ihren Code zu verschleiern.

Bei einer Suche im PyPI habe ich Folgendes gefunden: http://pypi.python.org/pypi/pyfuscate/0.1 . Sie sollten es überprüfen und anderen gefällt es und melden Sie sich zurück: D

Außerdem: Sie sollten es natürlich auch lizenzieren.


quelle
1

Ich würde auch die Lizenzierung vorschlagen. Verschlüsseln Sie zusätzlich zur Lizenzierung den Quellcode der Hauptroutinen mithilfe eines Algorithmus mit asymmetrischem Schlüssel, damit er nur auf dem Computer Ihres Clients ausgeführt werden kann. Einer der Schlüssel in dem Paar ist etwas, das von der Hardware (Beispiel: Seriennummer der Netzwerkkarte) Ihres Client-Computers bezogen wird. Verwenden Sie den anderen Schlüssel des Paars, um den Quellcode beim Ausführen des Programms zu entschlüsseln. Beachten Sie, dass im Klartext nur die Entschlüsselungsroutine verfügbar ist und der Rest im Chiffretext.

Auf diese Weise kann Ihr Client Ihren scheinbar kitschigen Code kopieren und einfügen, aber nicht an anderer Stelle ausführen. Mein Vorschlag ist jedoch nicht vollständig kugelsicher: Der Interpreter speichert das entschlüsselte Programm möglicherweise irgendwo im Speicher. Dann ist es möglich, dass ein Hacker Ihr Programm während der Ausführung im Klartext abruft.

Ich bin damit einverstanden, dass root nicht daran gehindert werden kann, auf Dateien / Ordner zuzugreifen.


quelle
Dies ist nur eine Verschleierung. Mit den richtigen Tools wird es immer einen Zeitpunkt geben, an dem der Code im Klartext vorliegt. Eine einfache Möglichkeit , Ihre Lösung zu besiegen wäre, einfach auslagern ruby/ python/ nodedie Ausführung API mit einem benutzerdefinierten Programm Spiegel und gibt den Code.
Jamo
Darüber hinaus muss der private Schlüssel (für die Entschlüsselung) für die Umgebung verfügbar sein, sodass er einem Angreifer zur Verfügung steht.
Fixee
0

Lizenzierung ist hier die beste Antwort. Das heißt, warum muss es auf ihrer Ausrüstung laufen? Wenn es so wichtig ist, sollten Sie sich auf einen Service einstellen und eine Art Service-API erstellen, damit die Leute nicht einmal Ihr geistiges Eigentum sehen können, um es zu stehlen.

Wyatt Barnett
quelle