797 Stimmen

Wie schütze ich Python-Code davor, dass er von Benutzern gelesen werden kann?

Ich entwickle eine Software in Python, die an die Kunden meines Arbeitgebers verteilt werden soll. Mein Arbeitgeber möchte die Nutzung der Software mit einer zeitlich begrenzten Lizenzdatei einschränken.

Verteilt man die .py Dateien oder sogar .pyc Dateien ist es einfach, den Code, der die Lizenzdatei prüft, zu (dekompilieren und) zu entfernen.

Ein weiterer Aspekt ist, dass mein Arbeitgeber nicht möchte, dass der Code von unseren Kunden gelesen wird, da er befürchtet, dass der Code oder zumindest die "neuen Ideen" gestohlen werden könnten.

Gibt es eine gute Möglichkeit, dieses Problem zu lösen?

525voto

S.Lott Punkte 371691

"Gibt es einen guten Weg, dieses Problem zu lösen?" Nein. Nichts kann gegen Reverse Engineering geschützt werden. Sogar die Firmware von DVD-Maschinen wurde schon zurückentwickelt und die AACS-Verschlüsselungsschlüssel ausgesetzt. Und das, obwohl das DMCA dies zu einer Straftat macht.

Da keine technische Methode Ihre Kunden davon abhalten kann, Ihren Code zu lesen, müssen Sie die üblichen kommerziellen Methoden anwenden.

  1. Lizenzen. Verträge. Bedingungen und Konditionen. Das funktioniert auch dann noch, wenn die Leute den Code lesen können. Beachten Sie, dass Sie für einige Ihrer Python-basierten Komponenten möglicherweise Gebühren zahlen müssen, bevor Sie Software verkaufen, die diese Komponenten verwendet. Außerdem verbieten einige Open-Source-Lizenzen, dass Sie den Quellcode oder die Herkunft der Komponente verheimlichen.

  2. Bieten Sie einen erheblichen Wert. Wenn Ihre Produkte so gut sind - zu einem Preis, den man nicht ablehnen kann - gibt es keinen Anreiz, Zeit und Geld für Reverse Engineering zu verschwenden. Reverse Engineering ist teuer. Machen Sie Ihr Produkt etwas weniger teuer.

  3. Bieten Sie Upgrades und Verbesserungen an, die jedes Reverse Engineering zu einer schlechten Idee machen. Wenn die nächste Version das Reverse Engineering zunichte macht, hat es keinen Sinn mehr. Dies kann bis ins Absurde getrieben werden, aber Sie sollten neue Funktionen anbieten, die die nächste Version wertvoller machen als Reverse Engineering.

  4. Bieten Sie Anpassungen zu so attraktiven Preisen an, dass die Kunden lieber Sie für die Erstellung und den Support der Erweiterungen bezahlen würden.

  5. Verwenden Sie einen Lizenzschlüssel, der abläuft. Das ist grausam und wird Ihnen einen schlechten Ruf einbringen, aber es führt mit Sicherheit dazu, dass Ihre Software nicht mehr funktioniert.

  6. Bieten Sie es als Webdienst an. SaaS beinhaltet keine Downloads für Kunden.

424voto

Ned Batchelder Punkte 342778

Python ist als bytecode-kompilierte, interpretierte Sprache sehr schwer zu sperren. Selbst wenn Sie einen Exe-Packager wie py2exe Das Layout der ausführbaren Datei ist bekannt, und die Python-Byte-Codes werden gut verstanden.

In der Regel muss man in solchen Fällen einen Kompromiss eingehen. Wie wichtig ist es wirklich, den Code zu schützen? Enthält er echte Geheimnisse (z. B. einen Schlüssel für die symmetrische Verschlüsselung von Banküberweisungen), oder sind Sie einfach nur paranoid? Wählen Sie die Sprache, mit der Sie das beste Produkt am schnellsten entwickeln können, und seien Sie realistisch, was den Wert Ihrer neuen Ideen angeht.

Wenn Sie sich entscheiden, dass Sie die Lizenzprüfung wirklich sicher durchsetzen müssen, schreiben Sie sie als kleine C-Erweiterung, so dass der Lizenzprüfungscode besonders schwer (aber nicht unmöglich!) zurückentwickelt werden kann, und lassen Sie den Großteil Ihres Codes in Python.

329voto

e-satis Punkte 547539

Python ist nicht das Werkzeug, das Sie brauchen

Man muss das richtige Werkzeug verwenden, um das Richtige zu tun, und Python wurde nicht dafür entwickelt, verschleiert zu werden. Ganz im Gegenteil: In Python ist alles offen oder leicht zu enthüllen oder zu verändern, denn das ist die Philosophie der Sprache.

Wenn Sie etwas wollen, das Sie nicht durchschauen können, suchen Sie sich ein anderes Werkzeug. Das ist nichts Schlechtes, es ist wichtig, dass es mehrere verschiedene Werkzeuge für verschiedene Zwecke gibt.

Verschleierung ist wirklich schwer

Sogar kompilierte Programme können zurückentwickelt werden, daher sollten Sie nicht glauben, dass Sie jeden Code vollständig schützen können. Sie können verschleiertes PHP analysieren, den Flash-Verschlüsselungsschlüssel knacken usw. Neuere Versionen von Windows werden immer wieder geknackt.

Eine gesetzliche Verpflichtung ist ein guter Weg

Sie können nicht verhindern, dass jemand Ihren Code missbraucht, aber Sie können leicht herausfinden, ob es jemand tut. Daher ist es nur eine beiläufige Rechtsfrage.

Der Schutz des Codes wird überbewertet

Heutzutage tendieren Geschäftsmodelle zum Verkauf von Dienstleistungen anstelle von Produkten. Man kann eine Dienstleistung nicht kopieren, rauben oder stehlen. Vielleicht ist es an der Zeit, darüber nachzudenken, mit dem Strom zu schwimmen...

182voto

Macke Punkte 23640

Kompilieren Sie Python und verteilen Sie Binärdateien!

Vernünftige Idee:

Utilice Cython , Nuitka , Haut abstreifen oder etwas Ähnliches, um Python in C-Code zu kompilieren und Ihre Anwendung stattdessen als Python-Binärbibliotheken (pyd) zu verteilen.

Auf diese Weise bleibt kein Python-(Byte-)Code übrig, und Sie haben ein vernünftiges Maß an Verschleierung erreicht, das jeder (d. h. Ihr Arbeitgeber) von normalem Code erwarten kann. (.NET oder Java sind weniger sicher als in diesem Fall, da dieser Bytecode nicht verschleiert ist und relativ leicht in einen vernünftigen Quellcode dekompiliert werden kann).

Cython wird immer kompatibler mit CPython, also sollte es funktionieren. (Ich bin tatsächlich erwägt dies für unser Produkt. Wir bauen bereits einige Drittanbieter-Libs als pyd/dlls, so dass der Versand unserer eigenen Python-Code als Binärdateien ist kein allzu großer Schritt für uns).

Ver Dieser Blogbeitrag (nicht von mir) für eine Anleitung, wie man es macht. (thx @hithwen)

Verrückte Idee:

Du könntest Cython wahrscheinlich dazu bringen, die C-Dateien für jedes Modul separat zu speichern, sie dann einfach zu verketten und sie mit starkem Inlining zu erstellen. Auf diese Weise ist Ihr Python-Modul ziemlich monolithisch und schwer zu Chip auf mit gängigen Tools.

Mehr als verrückt:

Sie könnten in der Lage sein, eine einzige ausführbare Datei zu erstellen, wenn Sie mit der Python-Laufzeitumgebung und allen Bibliotheken (dlls) statisch verknüpfen (und optimieren) können. Auf diese Weise wäre es sicher schwierig, Aufrufe zu/von Python und den von Ihnen verwendeten Framework-Bibliotheken abzufangen. Dies ist jedoch nicht möglich, wenn Sie LGPL-Code verwenden.

62voto

bhadra Punkte 12767

Ich verstehe, dass Sie möchten, dass Ihre Kunden die Leistungsfähigkeit von Python nutzen können, aber den Quellcode nicht offenlegen wollen.

Hier sind meine Vorschläge:

(a) Schreiben Sie die kritischen Teile des Codes als C- oder C++-Bibliotheken und verwenden Sie dann SIP o swig um die C/C++-APIs in den Python-Namensraum zu übertragen.

(b) Verwendung cython anstelle von Python

(c) Sowohl bei (a) als auch bei (b) sollte es möglich sein, die Bibliotheken als lizenzierte Binärdateien mit einer Python-Schnittstelle zu vertreiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X