YAK Pro - Php Obfuscator : cachez ce code que je ne saurais voir.

Par:
pk

mer, 04/11/2015 - 10:10

Lorsque vous désirez distribuer un projet écrit en php, comme php est un langage interprété, vous distribuez aussi tous les sources de votre logiciel !
Il se peut que vous ne désiriez pas, quelle qu'en soit la raison, que d'autres personnes comprennent le fonctionnement, modifient ou bien adaptent votre logiciel.

Comme votre programme doit pouvoir être compris par l'interprète php, mais doit rester incompréhensible (ou bien très difficilement compréhensible) par les personnes humaines, l'obfuscation est un très bon moyen de parvenir à vos fins.

Disponible gratuitement sur GitHub en licence MIT à l'adresse
https://github.com/pk-fr/yakpro-po
une mini démo est en ligne à l'adresse
http://www.php-obfuscator.com/?demo
et vous permet de modifier un sous-ensemble des options disponibles dans le produit, et vous pourrez choisir le type d’éléments à obfusquer, ainsi que le mode de génération des identificateurs.

Pourquoi un Obfuscateur php de plus ?

J'ai commencé par tester quelques outils d'obfuscation php, mais je n'en ai trouvé aucun qui répondait à tous mes besoins.
Je voulais un outil sous la forme d'une simple ligne de commande, basé sur un fichier de configuration personnalisable à l'extrème, qui :

  • Serait rapide, et ne ré-obfusquerait que les fichiers ayant été modifiés depuis la dernière obfuscation.
  • Permettrait de ne pas obfusquer certains fichiers et/ou répertoires.
  • Permettrait de ne pas inclure dans le résultat de l'obfuscation, certains fichiers et/ou répertoires qui existent dans le source du projet.
  • Accepterait des listes de noms ou de préfixes de noms à ne pas obfusquer.

Le fichier de configuration par défaut est disponible à l'adresse
https://github.com/pk-fr/yakpro-po/blob/master/yakpro-po.cnf

 YAK Pro - Php Obfuscator en détails

yakpro-po a été développé sous linux et utilise l'excellent PHP Parser de nikic pour analyser le php.
Pour faire court, l'obfuscation d'un fichier se déroule en trois phase :

  1. PHP Parser transforme le code source en un arbre syntaxique abstrait.
  2. yakpro-po modifie cet arbre syntaxique, en fonction de son fichier de configuration.
  3. Le source obfusqué est généré à partir de l'arbre syntaxique modifié.

De plus, lorsque l'obfuscation porte sur une arborescence de fichier contenus dans un répertoire (mode projet) :

  1. Un contexte est gardé permettant d'obfusquer de la même manière les éléments du projet quel que soit le fichier.
  2. Un mécanisme de type makefile est utilisé pour ne ré-obfusquer que les fichiers ayant été modifiés depuis la dernière obfuscation.
  3. Il est possible de préciser une  liste de fichiers/répertoires à ne pas obfusquer
  4. Il est possible de préciser une liste de fichiers/répertoires à ne pas inclure dans le répertoire cible, résultat de l'obfuscation.

On peut bien sur définir dans le fichier de configuration, des listes de noms/préfixes de noms à ne pas obfusquer.
(qui peuvent être l'interface d'une bibliothèque par exemple)

 Installation

  1. Pré-requis : commande git installée, ainsi que php-cli (command line interface).
    sous ubuntu : (adaptez selon votre distribution)
    # apt-get install git
    # apt-get install php5-cli
  2. Placez vous dans le répertoire ou vous voulez installer yakpro-po (par exemple dans /usr/local ) :
    #  cd /usr/local
  3. Puis récupérez à partir de GitHub :
    # git clone https://github.com/pk-fr/yakpro-po.git
  4. Placez-vous dans le répertoire de yakpro-po :
    # cd yakpro-po
  5. Puis récupérez à partir de GitHub :
    # git clone --branch=1.x https://github.com/nikic/PHP-Parser.git
  6. Donnez les droits d'exécution à yakpro-po.php
    # chmod a+x yakpro-po.php
  7. Créer un lien symbolique dans /usr/local/bin
    # cd /usr/local/bin
    # ln -s /usr/local/yakpro-po/yakpro-po.php yakpro-po
  8. Vous pouvez maintenant exécuter yakpro-po
    # yakpro-po --help 
    # yakpro-po test.php