Comment empêcher un client de voir mon code écrit dans un langage interprété?

16

Je construis un programme interprété assez complexe en Python. Je travaille sur la plupart de ce code à d'autres fins depuis quelques mois, et je ne veux donc pas que mon client puisse simplement le copier et essayer de le vendre, car je pense qu'il vaut une bonne somme.

Le problème est que j'ai besoin que le script s'exécute sur un serveur pour lequel mon client paie, donc existe-t-il un moyen de sécuriser un dossier particulier sur la machine à partir de l'accès root, ou de faire en sorte qu'une seule utilisation particulière puisse accéder au répertoire ? Le système d'exploitation est Ubuntu.

Mike Partridge
la source
13
Quel type de contrat / accord existe entre vous et votre client? Possèdent-ils le code ou leur avez-vous simplement accordé une licence d'utilisation? Ou n'avez-vous rien trouvé de tout cela?
mat le
2
Je pensais qu'il était possible de compiler la source python en binaire. Est-ce possible pour ce projet? Si c'est le cas, vous pouvez déployer le binaire à la place.
FrustratedWithFormsDesigner
nightcracker a raison à mon avis. Des licences et des contrats appropriés devraient empêcher tout cela, pas des mesures techniques. Surtout parce que vous pouvez toujours décompiler / désobscurcir quelque chose et que vous êtes rootautorisé à tout faire .
Bobby
Pensez-y dans l'autre sens, s'ils rompent un contrat ou une licence, vous pouvez les poursuivre jusqu'à ce qu'ils pleurent
Jakob Bowyer
9
Tout le monde dit toujours que son code vaut une bonne somme.
Kaleb Brasee

Réponses:

40

Autorisez-le.

Vraiment, c'est tout!

orlp
la source
6
Ma première pensée a été de ne pas répondre à cette question, mais bon sang, vous avez raison. La licence et la signature de contrats est la voie à suivre ici.
Bobby
@Bobby: Presque la seule voie à suivre. L'alternative est de continuer à ajouter de nouvelles fonctionnalités délicieuses et utiles si rapidement que voler l'ancienne version serait une perte de temps.
S.Lott
les biens communs créatifs suffiraient-ils comme licence?
10
-1 La question demande des moyens d'empêcher un client de voir le code, cela ne fait pas cela. Les gens n'obéissent pas toujours aux licences, et il peut ne pas être possible de s'en assurer légalement afin de poursuivre.
Orbling
8
Vous ne pouvez pas empêcher le client de voir du code Python, c'est trop facile à démonter. DRM ne fonctionne pas (s'ils peuvent l'exécuter, ils peuvent le démonter). La seule réponse est donc légale. Et une fois que vous comptez sur la loi pour l'application, il est inutile de rendre la vie plus difficile pour vous ou vos clients en compliquant la base technique.
ncoghlan
10

Vous pouvez toujours compiler tous vos fichiers en code octet pyc. Il existe des décompilateurs qui peuvent générer du code source mais rien de grave.

Cependant, cela résoudra simplement la possibilité de lire le code de votre programme. Pour protéger, le seul moyen est de le concéder sous licence, comme le dit Nightcracker, car même si vous avez compilé votre code, pour dire le code machine, si votre travail n'est pas protégé par une licence, il peut toujours être commercialisé contre votre volonté.

En résumé, compilez en code octet et, plus important encore, accordez-lui une licence


la source
J'ai une question. Le compilateur d'octets utilise-t-il des noms de variables arbitraires ou utilise-t-il les anciens noms de variables? (J'imagine qu'il devrait utiliser les anciens, car les modules externes dépendent de cet espace de noms).
@Garrett: Le bytecode contient les noms des variables. C'est toujours un gâchis relativement illisible lors du démontage (essayez de digérer le démontage de cette recette ), et il n'y a pas de décompilateurs (récents).
7

Utilisez Cython. Cela vous permettra de compiler votre programme en tant qu'exécutable natif. Ensuite, il devrait être beaucoup plus difficile de voler.

En ce qui concerne le répertoire, le seul conseil que je puisse vous donner est de vous assurer que vos autorisations sont correctement configurées. Les ACL peuvent être votre ami, bien que je ne sois pas sûr à 100% qu'ils peuvent empêcher root d'accéder à un fichier. Même s'ils le pouvaient, root pourrait tout simplement modifier l'autorisation. Il est racine, il est dieu - c'est comme ça que ces choses fonctionnent.

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

Chris Eberle
la source
1

Comme l'a montré l'utilisateur ci-dessus, les désassembleurs peuvent récupérer le code, mais pour l'instant il n'est pas très lisible (du moins pas pour les désassembleurs open source).

J'y pensais, et une façon que je pense que vous pourriez résoudre ce problème (si vous appelez un code à ouverture forcée un problème) est d'écrire un script de refactorisation automatique. Ce serait assez simple en fait. Vous alimenteriez simplement le script de votre module, et il renommerait toutes les variables spécifiques au module. Cela, en plus de ne publier que le fichier compilé, ferait beaucoup pour brouiller votre code.

En faisant une recherche sur le PyPI, j'ai trouvé ceci: http://pypi.python.org/pypi/pyfuscate/0.1 . Vous devriez le vérifier et d'autres comme ça et faire rapport: D

Aussi: Vous devez également le concéder sous licence, bien sûr.


la source
1

Je suggère également l'octroi de licences. En plus des licences, chiffrons le code source des routines principales à l'aide d'un algorithme à clé asymétrique afin que seule la machine de votre client puisse l'exécuter. L'une des clés de la paire doit provenir du matériel (exemple: numéro de série de la carte réseau) de la machine de votre client. Utilisez l'autre clé de la paire pour déchiffrer le code source lors de l'exécution du programme. Notez que le seul livrable en texte brut serait la routine de décryptage et le reste serait en texte chiffré.

De cette façon, votre client peut copier-coller votre code apparemment charabia mais ne peut pas l'exécuter ailleurs. Ma suggestion n'est cependant pas complètement à l'épreuve des balles: l'interprète peut stocker le programme décrypté quelque part en mémoire. Ensuite, il est possible que certains pirates récupèrent votre programme en texte clair pendant l'exécution, je suppose.

Quant à empêcher les dossiers d'accéder à root, je conviens que root ne peut pas être empêché d'accéder à tous les fichiers / dossiers.


la source
C'est juste de l'obscurcissement, avec les bons outils, il y aura toujours un moment où le code sera en texte brut. Un moyen simple de vaincre votre solution serait de simplement échanger ruby/ python/ nodeavec un programme personnalisé qui reflète l'API d'exécution et génère le code.
Jamo
De plus, la clé privée (pour le déchiffrement) devra être disponible pour l'environnement, donc disponible pour un attaquant.
Fixee
0

La licence est la meilleure réponse ici. Cela dit, pourquoi doit-il fonctionner avec leur équipement? S'il est si important, vous voudrez peut-être créer un service et créer une sorte d'API de service autour des choses afin que les gens ne puissent même pas voir votre propriété intellectuelle pour la voler.

Wyatt Barnett
la source