IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Protéger du code Python


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Consultant fonctionnel
    Inscrit en
    Septembre 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant fonctionnel

    Informations forums :
    Inscription : Septembre 2017
    Messages : 7
    Par défaut Protéger du code Python
    Bonjour à tous,

    J'ai développé une application sous forme de fichiers .py enregistrés sur un répertoire réseau partagé, qui a vocation à être utilisée par un grand nombre de personnes au sein de mon organisation (chacun disposera de Python sur son poste).

    Seulement, même si les fichiers doivent rester exécutables par chacun, je souhaiterais que personne ne puisse lire et surtout modifier le code sans en avoir l'autorisation. Or mon environnement de développement - Spyder - ne semble pas permettre de protéger les fichiers. Et je m'en étonne car, par exemple dans VBA que j'ai l'habitude d'utiliser, il est très simple de protéger un projet en mettant un mot de passe dessus.

    Sauriez-vous comment je peux m'y prendre s'il vous plaît ? En sachant que je ne cherche pas une solution ultra sophistiquée pour empêcher le reverse engineering, mais juste à faire en sorte que l'utilisateur lambda ne puisse pas mettre les mains dans le cambouis dans un élan de curiosité.

  2. #2
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 199
    Par défaut
    hello,
    tu pourrais utiliser par exemple pyinstaller pour créer un exécutable qui sera plus difficile à lire et à modifier que des scripts python.
    ami calmant J.P

  3. #3
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Les fichiers .py ne sont pas indispensables, tu peux te contenter de ne distribuer que les fichiers .pyc.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Les pyc sont reversibles. J'ai eu un souci analogue il y a quelques années et j'avais testé un reverse pyc. Je savais que le reverse est possible dans l'absolu mais je pensais que le bouzin me mettrait des variables comme "var0001", "var0002" etc mais non, le merdier a su me récupérer mon source ".py" intégral avec les vraies variables. J'étais vert !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    A part la solution de livrer un exécutable, tu pourrais avoir un moyen un peu détourné. L'utilisateur hyper curieux pourrait quand même regarder le code, mais pour le modifier il faudrait de bonnes connaissances python, et tu pourrais revenir à la version d'origine facilement.

    Ce moyen ce serait de rendre ton code packageable. Ainsi tes différents utilisateur pourrait installer ton code avec pip, comme n'importe quel autre package. Ils pourront regarder le code et le modifier (mais c'est dans un dossier (sites-packages souvent) dans l'install python, donc ca peut dissuader d'y toucher), et si vraiment qqn y touche, un coup de pip et tu réinstalles le package.

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Citation Envoyé par Yalissan Voir le message
    Seulement, même si les fichiers doivent rester exécutables par chacun, je souhaiterais que personne ne puisse lire et surtout modifier le code sans en avoir l'autorisation.
    Pour modifier le code, il faudra avoir le droit de créer des fichiers ou les mettre à jour alors que pour les exécuter un accès en lecture (ce sont des scripts) suffira.

    Après si vous voulez que votre code rendre votre code plus difficile à lire, vous pouvez toujours le compiler avec des outils comme Cython ou Nuitka.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Bien qu'il n'y ait pas de solution "absolue", je trouve que la solution avec pyinstaller est très bonne.

    Avec l'option "onefile", il est créé un seul fichier ".exe" (sous Windows) qui contient tout: codes et packages compilés "bytecodes", l'interpréteur Python et les bibliothèques .dll nécessaires. Cette solution "onefile" n'est pas miraculeuse, puisqu'il s'agit d'une sorte d'archive exécutable: à l'exécution, les fichiers sont désarchivés dans un répertoire temporaire (genre C:\Users\utilisateur\AppData\Local\Temp\_MEI57242), et c'est là que l'exécution se fait. Ces fichiers ne sont là que pendant l'exécution du programme et sont effacés à l'arrêt du programme. Et les tentatives de désarchiver le fichier exe avec les moyens habituels (comme 7zip) échouent.

    Avec pyinstaller, on peut en plus utiliser l'option key="motdepasse" qui fera un cryptage "AES" et qui devrait compliquer encore plus le "reverse engineering" des utilisateurs indiscrets. Explication de la doc de pyinstaller: "The key used to encrypt Python bytecode". Et plus d'infos ici: https://0xec.blogspot.com/2017/02/ex...installer.html.

    Pour que pyinstaller accepte l'option de cryptage AES, il est nécessaire d'installer pycryptodome (pip install pycryptodome) ainsi que tinyaes (pip install tinyaes). Pour la petite histoire, je déconseille l'installation de pycrypto (dont pycryptodome n'est qu'un fork) qui nécessite d'avoir un bon compilateur C/C++. J'ai essayé d'installer Visual Studio express 2017 (gratuite), et cette installation m'a désinstallé mon Python!!!. Ça semble une pratique de plus en plus courante chez microsoft de virer les programmes "non-microsoft" qui ne lui plaisent pas. A mon avis, il va converger vers un système de type Apple où les seuls programmes faciles à installer sont les programmes officiels (et le plus souvent payants)...

    Avec tout ça, ça devrait être très compliqué de lire le code et encore plus de le modifier. Et le programme lui-même devrait vraiment valoir le coup pour se donner autant d'effort...

  8. #8
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 827
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 827
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    J'ai essayé d'installer Visual Studio express 2017 (gratuite), et cette installation m'a désinstallé mon Python!!!.


    Citation Envoyé par tyrtamos Voir le message
    A mon avis, il va converger vers un système de type Apple où les seuls programmes faciles à installer sont les programmes officiels (et le plus souvent payants)...
    Moi je privilégie maintenant les trucs portables autant que je peux.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  9. #9
    bm
    bm est déconnecté
    Membre extrêmement actif

    Homme Profil pro
    Freelance
    Inscrit en
    Octobre 2002
    Messages
    874
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Freelance
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2002
    Messages : 874
    Billets dans le blog
    6
    Par défaut
    https://bioinfo-fr.net/cython-votre-...100x-plus-vite

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def mafonction():
        print "Bonjour!"
    hexdump -C script.o

    A ouvert le fichier binaire script.o, qui sera dur à décoder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    00009e10  00 00 00 00 00 00 00 00  00 00 00 00 01 00 53 00  |..............S.|
    00009e20  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 01  |................|
    00009e30  00 53 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |.S..............|
    00009e40  00 00 01 00 53 00 00 00  00 00 00 00 00 00 00 00  |....S...........|
    00009e50  00 00 00 00 00 04 00 f3  01 54 9f 00 00 00 00 00  |.........T......|
    ...

  10. #10
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    @ bm:

    Bonjour,

    La solution avec Cython est très bonne et méritait d'être citée ici, mais elle a tout de même de sérieuses limites.

    Convertir tout un programme Python en C ou C++ me semble une très grosse tâche, puisqu'il faut ajouter tout ce qui est nécessaire au compilateur dont l'interpréteur Python n'a pas besoin, et en particulier toutes les déclarations de variables et de types. Il faut réserver cette solution aux fonctions critiques à mettre dans un module à importer, ce qui en diminue l'intérêt pour la question posée ici.

    Par ailleurs, on annonce souvent un énorme gain de temps qu'on ne retrouve jamais, en particulier parce que tous les objets Python qui n'ont pas d'existence en C ou C++ (list, dict, etc... et même int si on a besoin des entiers longs) demandent au code compilé de faire de nombreux appels à l'API Python ce qui ralentit sérieusement le programme. Il m'est même déjà arrivé que le code compilé en C++ demande plus de temps que le code en pur Python!

    Par contre, l'article dont tu donnes le lien est très bon, et cite la méthode peu connue que j'utilise systématiquement: les déclarations par décorateurs, ce qui permet de ne pas avoir à modifier (ou très peu) le code en pur Python, à part l'ajout des décorateurs.

Discussions similaires

  1. Comment protéger son code du reverse engineering ?
    Par progfou dans le forum Débats sur le développement - Le Best Of
    Réponses: 120
    Dernier message: 12/01/2011, 18h12
  2. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19
  3. Protéger son code source ?
    Par supergrey dans le forum C++
    Réponses: 32
    Dernier message: 05/12/2006, 09h05
  4. Réponses: 5
    Dernier message: 20/07/2006, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo