Existe-t-il un obfuscateur de code pour PHP? [fermé]

212

Quelqu'un at-il utilisé un bon obscurcisseur pour PHP? J'en ai essayé mais ils ne fonctionnent pas pour de très gros projets. Ils ne peuvent pas gérer les variables incluses dans un fichier et utilisées dans un autre, par exemple.

Ou avez-vous d'autres astuces pour arrêter la propagation de votre code?

user29593
la source
11
Êtes-vous sûr de devoir le faire?
Joyeux
5
@ StevenA.Lowe: méfiez-vous de vous moquer de PHP. :-)
Marco Demaio
89
Encore une autre très bonne question liée à la programmation constructive dans un format Q&A parfait qui est fermé comme non constructif. Honte au débordement de pile ...
Petr
6
C'est Stack Overflow. La seule chose plus prolifique que les questions fermées qui ne devraient pas être fermées sont les flammes de l'utilisateur quand un pauvre slob vient ici et demande de l'aide.
Mac
2
Si vous pensez que cela ne devrait pas être fermé, votez pour la réouverture.
Ira Baxter

Réponses:

240

Vous pouvez essayer PHP protect qui est un obfuscateur PHP gratuit pour obscurcir votre code PHP.
Il est très agréable, facile à utiliser et également gratuit.
EDIT: Ce service n'est plus en direct.

Quant à ce que les autres ont écrit ici de ne pas utiliser l' obscurcissement , car il peut être cassé , etc:
Je n'ai qu'une chose à y répondre - ne pas verrouiller la porte de votre maison parce que tout le monde peut choisir votre serrure.
C'est exactement le cas, l'obscurcissement n'est pas destiné à empêcher le vol de code à 100%. Il suffit que cela prenne beaucoup de temps, il sera donc moins cher de payer le codeur d'origine. J'espère que cela t'aides.

yossi
la source
105
+1 pour avoir souligné le fait que l'obscurcissement consiste à le rendre plus dur, pas impossible.
Ashkan Kh. Nazary
3
prenez note que le cryptage de votre code source au lieu de le brouiller ne le rend pas impossible non plus, il est vraiment très difficile de le faire.
xorinzor
9
J'ai essayé, mais je n'ai pas aimé. Il ne change que les noms de variables, il ne supprime pas non plus les commentaires ..
Pisu
1
@Schwern, laissez votre porte ouverte puis engagez Columbo et un très bon avocat pour vous couvrir;)
David Newcomb
2
@David Newcomb - Qui veut payer un très bon avocat quand on peut simplement verrouiller la porte?
azoundria
109

Les gens vous offriront des obscurcisseurs, mais aucune quantité d'obscurcissement ne peut empêcher quelqu'un d'obtenir votre code. Aucun. Si votre ordinateur peut l'exécuter, ou dans le cas des films et de la musique s'il peut les lire, l'utilisateur peut y accéder. Même le compiler en code machine rend le travail un peu plus difficile. Si vous utilisez un obfuscateur, vous vous trompez. Pire, vous interdisez également à vos utilisateurs de corriger des bogues ou d'apporter des modifications.

Les sociétés de musique et de cinéma ne se sont pas encore tout à fait entendues avec cela, elles dépensent encore des millions en DRM.

Dans les langages interprétés comme PHP et Perl, c'est trivial. Perl avait l'habitude d'avoir beaucoup d'obscurcisseurs de code, alors nous avons réalisé que vous pouvez les décompiler trivialement.

perl -MO=Deparse some_program

PHP a des choses comme DeZender et Show My Code .

Mon conseil? Écrivez une licence et obtenez un avocat. La seule autre option est de ne pas donner le code et d'exécuter un service hébergé à la place.

Voir aussi l' entrée perlfaq sur le sujet .

Schwern
la source
220
Je suis surtout d'accord avec vous, mais le PO a demandé une recommandation de produit, pas une conférence sur les mérites de l'open source.
Eli
36
N'a rien à voir avec l'Open Source, qui consiste à écraser le code et non seulement à le voir. La réalité est que tout code ou donnée qui s'exécute sur la machine d'un utilisateur est finalement transparent, peu importe comment vous le compilez, l'obscurcissez ou le cryptez, point final. Le PO doit comprendre cela.
Schwern
7
@JamShady: L'obscurcissement ne signifie pas que vous ne pouvez pas corriger les bogues ou apporter des modifications. Si vous obscurcissez bêtement le code source, jetez l'original et insistez pour maintenir le résultat obscurci, oui, vous ne pourrez rien faire. Les bons obscurcisseurs insistent pour que vous conserviez votre code et le mappage vers le résultat obufscé; vous pouvez déboguer / modifier votre code d'origine, expédier des correctifs obscurcis à vos clients et même diagnostiquer ses problèmes en utilisant la carte pour reconvertir les réclamations obscurcies en plaintes lisibles. Il n'a pas la carte, ce qui le rend sûr.
Ira Baxter du
34
Question: Comment, Réponse: Vous ne devriez pas = pas utile
cmc
26
@cmc Je suis convaincu que de nombreuses personnes répondront directement à la question, il n'y a donc aucune perte avec mon approche différente. La moitié du point de demander à un expert est qu'il sait quand vous posez la mauvaise question pour résoudre le vrai problème. Il s'agit d'une application des "5 pourquoi". en.wikipedia.org/wiki/5_Whys Le vrai problème / question est "comment empêcher les gens de lire / voler mon code PHP". La réponse est que si vous expédiez le code, vous ne pouvez pas, mais vous pouvez perdre beaucoup de temps et d'argent à essayer de gagner un faux sentiment de sécurité. N'était-ce pas plus utile qu'une liste d'obscurcisseurs?
Schwern
31

Rien ne sera parfait. Si vous voulez juste que quelque chose arrête les non-programmeurs, voici un petit script que j'ai écrit que vous pouvez utiliser:

<?php
$infile=$_SERVER['argv'][1];
$outfile=$_SERVER['argv'][2];
if (!$infile || !$outfile) {
    die("Usage: php {$_SERVER['argv'][0]} <input file> <output file>\n");
}
echo "Processing $infile to $outfile\n";
$data="ob_end_clean();?>";
$data.=php_strip_whitespace($infile);
// compress data
$data=gzcompress($data,9);
// encode in base64
$data=base64_encode($data);
// generate output text
$out='<?ob_start();$a=\''.$data.'\';eval(gzuncompress(base64_decode($a)));$v=ob_get_contents();ob_end_clean();?>';
// write output text
file_put_contents($outfile,$out);
John
la source
19
Impressionnant? Chaque page contient la solution complète pour obtenir la source: exécutez "gzuncompress (base64_decode ($ a))". Oui, cela arrêtera les non-programmeurs. Mais alors le code source d'origine arrêtera les non-programmeurs, qui a besoin d'encodage pour cela? La seule personne qui va regarder cette intention de procéder à une rétro-ingénierie est un programmeur PHP.
Ira Baxter
2
La plupart du temps, les non-programmeurs essaient en recherchant certaines chaînes dans le code source qu'ils souhaitent modifier, je recherche également une telle solution qui empêche uniquement les non-programmeurs de modifier le code source, par exemple le nom de domaine, le nom de la base de données, les utilisateurs, etc.
Asad kamran
C'est une réponse très utile pour moi. Je veux seulement empêcher l'utilisateur d'ouvrir facilement mon "database.php" dans le bloc-notes et de voir mon nom d'utilisateur et mon mot de passe de base de données.
TimH - Codidact
20

Je ne suis pas sûr que vous puissiez étiqueter l'obfuscation d'une langue interprétée comme inutile (je ne peux pas ajouter de commentaire au message de Schwern, alors voici une nouvelle entrée).

Je pense que c'est un peu myope de supposer que vous connaissez tous les scénarios possibles où quelqu'un voudrait obscurcir le code, et vous supposez que n'importe qui sera réellement prêt à aller jusqu'à toutes les longueurs nécessaires pour afficher ce code une fois obscurci. Considérez mon scénario actuel:

Je travaille pour une société de conseil qui développe un grand site PHP assez sophistiqué. Le projet sera hébergé sur le serveur d'un client qui héberge d'autres sites développés par d'autres consultants. Techniquement, tout code que nous écrivons appartient au client, nous ne pouvons donc pas le concéder sous licence. Cependant, tout autre consultant (concurrent) ayant accès au serveur peut copier notre code sans obtenir au préalable l'autorisation du client. Nous avons donc une véritable raison d'obscurcir - faire l'effort requis pour qu'un concurrent comprenne notre code plus que l'effort de créer une copie de notre travail à partir de zéro.

tomfumb
la source
16

Voir notre Obfuscator PHP SD Thicket pour un obfuscator qui fonctionne très bien avec des ensembles de pages arbitrairement grands. Il fonctionne principalement en brouillant les noms d'identificateurs. Avec des applications modestes à grandes, cela peut rendre le code extrêmement difficile à comprendre, ce qui est tout le but.

Il ne gaspille aucune énergie sur les schémas "eval (decode ( encodedprogramcode ))", ce que beaucoup d '"obscurcisseurs" PHP font [ce sont des "encodeurs", pas des "obscurcisseurs"], car n'importe quel motte peut trouver cet appel et exécuter le eval-decode lui-même et obtenir le code décodé.

Il utilise un analyseur spécifique au langage pour traiter le PHP; il vous dira si votre programme est syntaxiquement invalide. Plus important encore, il connaît précisément toute la langue; il ne sera pas perdu ou confondu, et il ne cassera pas votre code (à part ce qui se passe si vous obscurcissez "incorrectement", par exemple, ne parvenez pas à identifier correctement l'API publique du code).

Oui, il obscurcit les identifiants de manière identique sur toutes les pages; sinon, le résultat ne fonctionnerait pas.

Ira Baxter
la source
1
Flagger: vous pourriez avoir la courtoisie de dire pourquoi vous avez signalé cela. Il répond directement à la question du PO, y compris son problème spécifique.
Ira Baxter
D'après ce que je peux dire, c'est un EXE qui fonctionne sous Windows uniquement? Au moins l'eval est un fichier .exe ...
Craig Jacobs
Le fichier eval est un programme d'installation basé sur .exe. La vérité compliquée est que le produit installé s'exécute généralement à partir d'un script .cmd car il y a un langage de programmation parallèle en dessous, mais vous ne le verrez jamais. Il a été conçu principalement comme un produit Windows; cependant, si vous l'installez sur Linux avec Wine, il s'exécutera avec les scripts .sh qui sont installés avec lui comme s'il s'agissait d'un outil Linux natif. Si vous utilisez la partie GUI (facultative, la plupart des gens veulent l'exécuter en tant que script dans un processus de génération de production), elle utilise le Java natif sur Windows et le Java natif sur Linux.
Ira Baxter
Est-il vrai que Thicket nécessite un module complémentaire à l'espace d'hébergement? Si oui, comment est-ce installé sur un hébergement partagé?
Stephen Adelakun
@StephenAdelakun: Thicket ne nécessite aucune modification du serveur. Téléchargez-le et consultez la documentation.
Ira Baxter
14

Le meilleur que j'ai vu est Zend Guard .

CMS
la source
2
L'obfuscateur SD PHP est tout aussi bon et coûte environ 1 / 5ème.
Ira Baxter le
1
@SalmanPK Et la raison en est censée être évidente?
Le Pellmeister
@SalmanPK Il nécessite un addon à l'espace d'hébergement Web. Zend Guard le fait probablement aussi. Je ne sais pas lequel est le plus courant. Quoi qu'il en soit, le problème est que cela réduit votre audience potentielle.
James P.
1
PHP Obfuscator de SD convertit tout en minuscules. Ce sera un problème si vous utilisez un framework.
Amil Waduwawara
1
@JamesPoulson: On ne sait pas si votre remarque est dirigée vers l'obfuscateur SD PHP. Juste pour être clair, il ne nécessite aucun addon à l'espace d'hébergement Web.
Ira Baxter
10

Essayez celui-ci: http://www.pipsomania.com/best_php_obfuscator.do

Récemment je l'ai écrit en Java pour obscurcir mes projets PHP, parce que je n'ai trouvé aucun bon et compatible prêt à écrire sur le net, j'ai décidé de le mettre en ligne en tant que saas, donc tout le monde l'utilise gratuitement. Il ne change pas les noms des variables entre différents scripts pour une compatibilité maximale, mais les masque très bien, avec une logique aléatoire, chaque instruction aussi. Cordes ... tout. Je pense que c'est beaucoup mieux que cette éclipse de code buggy, c'est d'ailleurs écrit en PHP et très lent :)

PatlaDJ
la source
Ça a l'air bien ... mais est-ce sûr? Je veux dire, les autres peuvent-ils le décrypter facilement?
shasi kanth
Je peux vous assurer qu'à ce moment, PERSONNE ne peut masquer le code obscurci par cet obscurcisseur.
PatlaDJ
3
[citation nécessaire] - le cryptage homebrew est la sécurité par l'obscurité, ce qui n'est pas du tout une sécurité.
Chris Baker
8
"Je peux vous assurer qu'à ce moment, PERSONNE ne peut masquer le code" Même PHP? Si PHP peut le faire, quelqu'un d'autre peut le faire. En regardant comme l'exemple de code sur votre site, quelque part, vous aurez une déclaration eval qui vide le code, changez-le en écho et votre code sera affiché.
3
AVERTISSEMENT: cette méthode peut être décodée de manière triviale vers les noms de variables d'origine, voir: lombokcyber.com/en/detools/decode-pipsomania
Zane Hooper
3

Obscurcisseur Thicket ™ pour PHP

L' outil PHP Obfuscator brouille le code source PHP pour le rendre très difficile à comprendre ou à inverser (exemple). Cela fournit une protection importante pour la propriété intellectuelle du code source qui doit être hébergée sur un site Web ou expédiée à un client. Il fait partie de la famille des obscurcisseurs de code source de SD.

Praveen Kumar Purushothaman
la source
TrueBug.com est inaccessible. Je sais que je poste un commentaire après plus de 3 ans, mais pouvez-vous s'il vous plaît aider avec la nouvelle URL de trueBug, le cas échéant?
Stephen Adelakun
@StephenAdelakun Avez-vous seulement besoin de TrueBug? Utilisez ceci: TruBug PHP Obfuscator .
Praveen Kumar Purushothaman
Désolé, le lien ne fonctionne pas. Ou est-ce que je manque quelque chose?
Stephen Adelakun
@StephenAdelakun Je viens de vérifier maintenant, cela fonctionne.
Praveen Kumar Purushothaman
1
@StephenAdelakun Pourquoi seulement cela? :(C'est un logiciel mort de toute façon. Il y en a de meilleurs et impressionnants maintenant non?
Praveen Kumar Purushothaman
2

L'utilisation de SourceGuardian est bonne car elle est livrée avec une interface graphique sympa et facile à utiliser.

Mais sachez:

Faites attention à ses conditions de licence, plutôt drôles.

  • Vous n'êtes autorisé à exécuter qu'une seule machine par machine - jusqu'à présent, cela est acceptable
  • Si vous voulez exécuter l'interface de ligne de commande sur une autre machine, dites votre serveur Web, VOUS AUREZ BESOIN D'UNE AUTRE LICENCE (Oui, c'est drôle et je peux vous entendre rire aussi).
Herr
la source
2
Cela me semble normal! 2 machines = 2 licences! Habituellement, ce que les gens font est de tout coder sur une machine, puis de le télécharger sur l'autre ou les autres.
David Newcomb
@davidnewcomb vous ne semblez pas avoir compris. Vous chiffrez généralement le code sur votre machine de développement avant de l'expédier. Dans le cas où vous devez le faire en ligne, l'interface de ligne de commande nécessite également une licence supplémentaire, ce qui n'est évidemment pas correct. Vous avez tendance à mettre l'interface de ligne de commande sur le serveur Web et non sur votre box local.
Herr
2
TL; DR bonne protection, conditions de licence stupides.
Herr
1
Doit être 1 licence par utilisateur, pas par machine.
beppe9000
@ beppe9000 Tout à fait d'accord!
Herr
-16

L'obfuscation ajoute seulement une autre couche de bogues potentiels et de failles de sécurité à votre programme. Veuillez ne pas le faire.

Le genre de personnes qui écrivent des logiciels d'obscurcissement semble généralement très sommaire et peu qualifié de toute façon.

Si votre code est "génial", les crackers feront de grands efforts pour le diffuser, qu'il soit ou non obscurci. Si personne ne connaît / se soucie de votre code, ils ne le seront probablement pas non plus.

L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
la source
7
Non qualifié? Sur la base de quelles preuves? Je les écris. Consultez ma biographie avant de faire des généralisations radicales. semanticdesigns.com/Company/People/idbaxter
Ira Baxter
5
@Ira: Ma déclaration tient toujours. La plupart du code obscurci peut être rompu en quelques minutes. Je voulais dire spécifiquement, la plupart des gens qui le font ne sont pas qualifiés, pas tous . La première chose qui m'est venue à l'esprit était Ioncube, et sûrement, il y avait une vulnérabilité publiée: osvdb.org/show/osvdb/41708 . Là encore, vous pourriez probablement blâmer partiellement cela sur les exigences de sécurité obscures de PHP.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
3
L'obfuscation, si elle est effectuée avec un outil fiable, ne change rien à la fiabilité d'un programme. La compilation binaire est une sorte d'obscurcissement extrême, et pourtant je suppose que vous êtes sûr que le moteur PHP de Zend est fiable. (L'obfuscation ou la compilation faite avec de mauvais outils ne devrait pas compter).
Ira Baxter
1
quiconque avec un demi-cerveau sait que php est en difficulté (lire "inexistant") sur le marché des logiciels d'entreprise dans le monde réel car il n'est pas obscurci sur et asp.net l'est. J'en ai tellement marre des évangélistes faibles d'esprit qui disent autre chose. (et oui, c'est ce que l'ignorance volontaire est) L'open source est sorti trop longtemps et a été jugé et trouvé trop souvent pour qu'il n'y ait pas d'autre conclusion que celle-ci: passe-temps? Open source. Emploi? Crypter. Seuls les imbéciles / les idiots / les gens qui vivent dans une bulle / ont un riche pater peuvent jamais jamais jamais penser différemment.
conners
2
Ce commentaire est presque incompréhensible pour moi, mais il semble impliquer qu'il n'a aucun sens de vendre des logiciels open source ou des logiciels qui s'appuient sur des logiciels open source. Au cas où vous ne l'auriez pas remarqué, Java est "entreprise", open source et tout aussi efficace que cette chose .NET. mon entreprise gagne des millions de dollars, et nous n'avons jamais eu recours à l'obscurcissement. Demandez-vous ceci: à quoi bon vendre un logiciel si vous ne pouvez pas le soutenir / l'améliorer (c'est-à-dire: vous venez de casser le logiciel de quelqu'un d'autre et de le revendre)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳