2023-08-17 07:40 Temps de lecture : 11 min

Protégez vos scripts Python contre l'ingénierie inverse avec Pyarmor

Le langage Python est réputé pour sa lisibilité et sa large adoption. Toutefois, cette facilité de lecture, bien qu'elle favorise la collaboration, accroît également le risque d'accès non autorisé et d'utilisation malveillante. Des concurrents ou des individus malintentionnés peuvent aisément reproduire vos algorithmes et votre logique propriétaire si les protections adéquates ne sont pas mises en place. Cela compromettrait l'intégrité de votre logiciel et la confiance de vos utilisateurs.

MISE EN AVANT VIDÉO DU JOUR

FAITES DÉFILER POUR CONTINUER LA LECTURE

L'implémentation de mesures de sécurité robustes, telles que l'obscurcissement du code et la vérification des licences, renforce considérablement votre logiciel face à ces menaces potentielles. La protection de vos scripts Python n'est pas une simple formalité ; c'est une démarche cruciale pour préserver la confidentialité de vos innovations et maintenir la confiance de vos utilisateurs dans l'environnement numérique actuel.

Comprendre Pyarmor

Pyarmor est un outil en ligne de commande qui sert à sécuriser et à masquer le code source de scripts et de packages Python. Il transforme le code Python d'origine en une forme rendue plus complexe à déchiffrer tout en conservant son fonctionnement. Le processus d'obscurcissement implique le renommage des variables, des fonctions et des classes en des noms non descriptifs. Il retire également les commentaires et réorganise le code, ce qui complique considérablement toute tentative de rétro-ingénierie, de modification ou de copie illégale.

Pyarmor peut être utilisé pour sécuriser des scripts Python uniques, des ensembles de packages, et même intégrer des systèmes de vérification de licence dans votre code.

Installation de l'outil Pyarmor

Pyarmor est disponible sur le Python Package Index (PyPI). Il peut être installé facilement en utilisant pip, via la commande suivante:

 pip install pyarmor

L'installation de Pyarmor n'est pas limitée au répertoire de votre projet. Vous pouvez l'installer n'importe où sur votre ordinateur et protéger n'importe quel script Python, quel que soit son emplacement.

Toutefois, si vous souhaitez exécuter des scripts sécurisés sans avoir à installer Pyarmor sur la machine cible, il est nécessaire de l'installer dans le même répertoire que votre projet. En effet, les scripts sécurisés contiennent des références au runtime de Pyarmor, qui doit être présent pour leur bon fonctionnement.

Sécurisation de scripts Python individuels

La protection de scripts individuels avec Pyarmor est simple. Prenons comme exemple le script suivant, qui additionne deux nombres.

 def add_numbers(num1, num2):
   result = num1 + num2
   print("La somme de {} et {} est: {}".format(num1, num2, result))


num1 = float(input("Entrez le premier nombre: "))
num2 = float(input("Entrez le deuxième nombre: "))
add_numbers(num1, num2)

Accédez au répertoire où vous avez installé Pyarmor via la ligne de commande. Puis, exécutez la commande ci-dessous pour chiffrer et obscurcir votre script. Remplacez main.py par le nom de votre script.

 pyarmor gen --output dist main.py

Après exécution, Pyarmor crée un nouveau répertoire nommé dist. À l'intérieur se trouve votre script protégé.

Ouvrez ce script pour en examiner le contenu.

L'image ci-dessus illustre le résultat après l'obscurcissement et le chiffrement du script d'addition par Pyarmor. Il est désormais impossible de comprendre la fonction du script en le lisant.

Pour exécuter le script protégé, ouvrez votre terminal ou votre invite de commandes et naviguez jusqu'au répertoire contenant le répertoire dist. Ensuite, utilisez la commande suivante pour lancer le script:

 python dist/main.py 

Remplacez main.py par le nom de votre script. Le script doit fonctionner de la même manière qu'avant l'obscurcissement. Effectuez des tests minutieux pour vous assurer que toutes les fonctionnalités fonctionnent correctement.

Protection de packages Python entiers

Les packages peuvent contenir un petit nombre de modules, ou des centaines, en fonction de leur objectif. La protection de chaque module individuellement peut être fastidieuse. Heureusement, Pyarmor peut sécuriser un package complet sans que vous ayez à spécifier chaque module séparément.

Supposons que vous ayez un simple package Python nommé sample_package, avec la structure suivante:

 sample_package/
|-- __init__.py
|-- module1.py
|-- module2.py

Vous pouvez ajouter autant de modules que vous le souhaitez.

Pour chiffrer et masquer le package, ouvrez le terminal ou l'invite de commande et naviguez jusqu'au répertoire où se trouve votre package. Ensuite, exécutez la commande ci-dessous :

 pyarmor gen -O dist -r -i sample_package 

Remplacez sample_package par le nom de votre package. Cette commande va chiffrer et masquer votre répertoire de packages, et enregistrera le résultat protégé dans le répertoire dist. Vous pouvez utiliser le package protégé comme n'importe quel autre package Python.

Par exemple, pour utiliser le package d'exemple ci-dessus, créez un nouveau script dans le répertoire dist:

 from my_package import module1, module2

module1.say_hello()
module2.do_something()

Lorsque vous exécutez le code, le package doit fonctionner comme avant la sécurisation.

Contrôle de l'accès à votre script

Vous pourriez vouloir limiter la durée pendant laquelle un utilisateur peut exécuter votre script, par exemple pendant une période d'essai.

Pour limiter la durée d'exécution d'un script, utilisez la commande suivante lors de son obscurcissement :

 pyarmor gen -O dist -e 30 main.py 

Remplacez 30 par le nombre de jours pendant lesquels le script sera actif. Vous pouvez également le remplacer par une date précise. Passé ce délai, le script expirera.

Vous pouvez tester cette fonctionnalité en définissant une date passée. Cela devrait provoquer une erreur lors de l'exécution du script. Utilisez la commande suivante pour masquer le script avec une date d'expiration :

 pyarmor gen -O dist -e 2022-01-01 main.py

Puis exécutez le script sécurisé.

L'erreur indique que la clé de licence a expiré et que, par conséquent, le script ne peut pas être exécuté.

Équilibrer sécurité et efficacité

Bien que Pyarmor propose des mécanismes d'obscurcissement efficaces pour renforcer la sécurité de votre code, il est important de trouver un juste équilibre entre les mesures de sécurité et le maintien de l'efficacité et des performances de votre logiciel. Vous pouvez y parvenir en :

  • Évaluant la nécessité de l'obscurcissement : si votre logiciel intègre des algorithmes propriétaires, des données sensibles ou une logique métier unique, l'obscurcissement est vivement recommandé. Cependant, pour des scripts open source avec des problèmes de propriété intellectuelle limités, le compromis entre sécurité et performance penche davantage vers l'efficacité.
  • Évaluant l'impact sur les performances : l'obscurcissement introduit une surcharge d'exécution supplémentaire en raison des opérations et des transformations appliquées au code. Cet impact est négligeable pour les petits scripts mais devient plus significatif pour les projets plus importants. Vous devez évaluer soigneusement les implications de l'obscurcissement sur les performances et effectuer des tests pour assurer que votre logiciel reste réactif et performant.
  • Effectuant des mises à jour et une maintenance régulière : mettez régulièrement à jour votre code, vos licences et vos mécanismes de sécurité obfusqués pour prévenir d'éventuelles vulnérabilités. Équilibrez cela avec la nécessité de minimiser les perturbations pour vos utilisateurs.

Est-il possible de déchiffrer du code obscurci ?

Le "cracking" de logiciels fait référence à l'acte de contourner les protections contre la copie ou les licences d'une application, dans le but d'accéder à toutes ses fonctionnalités sans payer. Il est important de noter que l'obscurcissement de votre logiciel ne le rend pas complètement inviolable.

Avec suffisamment de motivation et de ressources, du code obscurci peut être décodé. C'est pourquoi il est crucial d'effectuer régulièrement des mises à jour et des maintenances afin de corriger les éventuelles failles.

Auteur
France

Rédacteur tech, guides pratiques et astuces numériques.