Protéger son code source PHP avec bcompiler

maxime.ohayon

Il est possible de protéger son code source PHP des petits malins qui pourraient le récupérer, car parfois on peut vendre ou donner des scripts, mais on ne souhaite pas que le destinataire possède les sources. La bibliothèque Bcompiler vous aidera dans cette tâche.

- Titre : Protéger son code source PHP avec bcompiler

- Auteur : maxime.ohayon

- Parution : 1 juin 2007

- Mise à jour : 12 décembre 2019

- Licence : Ce document est issu de https://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Bcompiler c'est quoi ?

- I-A. Description

- I-B. Comment ça marche ?

- II. Avec un exemple

- II-A. Prérequis

- II-B. Transformation du code

- II-B-1. Explications

- II-B-2. Résultat

- III. Finition

- IV. Conclusion

I - Bcompiler c'est quoi ?

I-A - Description

Bcompiler est une bibliothèque PHP créée à l'origine :

1. Pour encoder un script complet dans une application PHP propriétaire ;

2. Pour encoder des classes et/ou des fonctions dans une application PHP propriétaire ;

3. Pour permettre d'utiliser des applications PHP-GTK sur des bureaux clients sans avoir besoin du fichier php.exe ;

4. Pour rendre faisable de convertir un code PHP en C.

Nous ne resterons que sur le premier but. Il faut activer l'extension php_bcompiler.dll sous Windows ou télécharger, décompresser et recompiler PHP sous Linux (explication ici :http://us2.php.net/manual/fr/ref.bcompiler.php).

I-B - Comment ça marche ?

En réalité Bcompiler transforme votre code en ByteCode (similaire à Java ou C#) non lisible par un utilisateur, mais seulement par PHP, il s'agit d'un code intermédiaire plus abstrait que le code machine, non directement exécutable. Il est contenu dans un fichier binaire un peu plus lourd qui représente un script, tout comme un fichier objet produit par un compilateur, ce ByteCode est directement interprété par PHP et il n'est pas possible de retrouver le code PHP original.

II - Avec un exemple

II-A - Prérequis

Imaginons deux scripts hello.php et function.php que nous voulons protéger.

hello.php

<?php
include "function.php";
echo hello();
?>

function.php

<?php
function hello()
{
return "hello";
}
?>

II-B - Transformation du code

Tout d'abord il faut transformer nos deux scripts en ByteCode, nous allons passer par un script en PHP qui permettra de les transformer.

transform.php

<?php

$fh = fopen("hello.phb", "w");

bcompiler_write_header($fh);

bcompiler_write_file($fh, "hello.php");

bcompiler_write_footer($fh);

fclose($fh);

?>

II-B-1 - Explications

On crée par cette transformation le fichier hello.phb :

$fh = fopen("hello.phb", "w");

On écrit dans ce fichier un en-tête de type Bcompiler pour que l'interpréteur PHP puisse comprendre qu'il s'agit de ByteCode :

bcompiler_write_header($fh);

On écrit dans ce fichier le Byte Code du script hello.php :

bcompiler_write_file($fh, "hello.php");

On écrit le pied du script :

bcompiler_write_footer($fh);

Et on ferme notre fichier :

fclose($fh);

Et on fait la même chose avec function.php pour créer function.phb.

II-B-2 - Résultat

Maintenant hello.phb contient notre script hello.phb en ByteCode :

ByteCode de hello.php

III - Finition

Maintenant que l'on a nos deux scripts hello.phb et function.phb, il faut modifier les fichiers hello.php et function.php pour qu'ils puissent appeler leurs homologues « ByteCodé » :

hello.php

<?php
include "hello.phb";
?>

function.php

<?php
include "function.phb";
?>

L'appel par include "mon_fichier_ByteCodé.phb"; permet d'exécuter le ByteCode, donc sur la page hello.php on verra hello.

IV - Conclusion

Il faut éviter de faire de multiples includes de fiches, car cela ralentit considérablement l'exécution des scripts. Cependant, il existe d'autres fonctions de cette extension qui permettent ce genre d'opération (http://us2.php.net/manual/fr/ref.bcompiler.php).

Bcompiler est une bonne façon de protéger son code et offre de nouvelles perspectives pour PHP, de plus il est gratuit et offre un excellent substitut à tous les autres logiciels (payants) proposant les mêmes services.