是否有PHP的代码混淆器?

时间:2008-10-24 07:25:11

标签: php obfuscation

有没有人为PHP使用过好的混淆器?我尝试了一些,但他们不适用于非常大的项目。例如,它们无法处理包含在一个文件中并在另一个文件中使用的变量。

或者您是否有其他技巧可以阻止代码的传播?

10 个答案:

答案 0 :(得分:231)

您可以尝试PHP protect这是一个免费的PHP混淆器来混淆您的PHP代码。
它非常好用,易于使用,也是免费的。

至于其他人在这里写的关于不使用混淆的内容,因为它可以被破坏等等 我只有一件事要回答它们 - 不要锁住你的房门,因为任何人都可以拿起你的锁 事实确实如此,混淆并不意味着防止100%的代码被盗。它只需要使它成为一项耗时的任务,因此支付原始编码器会更便宜。希望这会有所帮助。

答案 1 :(得分:109)

人们会为你提供混淆器,但是没有多少混淆可以阻止某人使用你的代码。没有。如果您的计算机可以运行它,或者如果它可以播放电影和音乐,则用户可以使用它。即使将其编译为机器代码也会使工作变得更加困难。如果你使用混淆器,你只是在欺骗自己。更糟糕的是,您也不允许用户修复错误或进行修改。

音乐和电影公司还没有达成协议,他们仍然花费数百万美元用于DRM​​。

在像PHP和Perl这样的解释语言中,它是微不足道的。 Perl曾经有很多代码混淆器,然后我们意识到你可以轻松地反编译它们。

perl -MO=Deparse some_program

PHP包含DeZenderShow My Code等内容。

我的建议?写一张执照并找一位律师。唯一的另一种选择是不提供代码,而是运行托管服务。

另请参阅perlfaq entry on the subject

答案 2 :(得分:29)

没有什么是完美的。如果你只想要阻止非程序员,那么这里有一个我写的你可以使用的小脚本:

<?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);

答案 3 :(得分:20)

我不确定你是否可以将解释语言的混淆标记为毫无意义(我无法在Schwern的帖子中添加评论,所以这里有一个新条目)。

我认为假设您知道有人想要混淆代码的所有可能情况,并且您认为任何人实际上愿意花费任何必要的长度来查看代码一旦被混淆,这有点短视。考虑我当前的情况:

我在一家咨询公司工作,该公司正在开发一个大型且相当复杂的基于PHP的网站。该项目将托管在客户的服务器上,该服务器托管由其他咨询公司开发的其他网站。从技术上讲,我们编写的任何代码都归客户所有,因此我们无法对其进行许可。但是,任何其他可以访问服务器的咨询公司(竞争对手)都可以复制我们的代码,而无需先获得客户的许可。因此,我们有一个真正的混淆理由 - 让竞争对手理解我们的代码所需的工作多于从头开始创建我们的工作副本的努力。

答案 4 :(得分:16)

请参阅我们的SD Thicket PHP Obfuscator了解一个混淆器,它适用于任意大的页面集。它主要通过加扰标识符名称来运行。对于适度到大型的应用程序,这可能会使代码极难理解,这就是整个目的。

它不会在“eval(decode( encodedprogramcode ))”方案上浪费任何能量,许多PHP“混淆器”都会这样做[这些是“编码器”,而不是“混淆器” s],因为任何clod都可以找到该调用并自己执行eval-decode并获得解码后的代码。

它使用语言精确的解析器来处理PHP;它会告诉你程序在语法上是否无效。更重要的是,它准确地了解整个语言;它不会丢失或混淆,并且它不会破坏您的代码(其他如果您“错误地”混淆了会发生什么,例如,无法正确识别代码的公共API)。

是的,它会跨页面对标识符进行相同的混淆;如果不这样做,结果将无效。

答案 5 :(得分:14)

我见过的最好的是Zend Guard

答案 6 :(得分:9)

试试这个:http://www.pipsomania.com/best_php_obfuscator.do

最近我用Java编写它来混淆我的PHP项目,因为我没有找到任何好的和兼容的写在网上,我决定把它作为saas在线,所以每个人都免费使用它。它不会更改不同脚本之间的变量名称以获得最大的兼容性,但是使用随机逻辑,每条指令都可以很好地混淆它们。弦乐......一切。我相信它比这个错误的codeeclipse要好得多,就像用PHP编写的方式而且非常慢:)

答案 7 :(得分:3)

Thicket™ Obfuscator for PHP

  

PHP Obfuscator 工具会破坏PHP源代码,使其难以理解或反向工程(示例)。这为必须托管在网站上或发送给客户的源代码知识产权提供了重要保护。它是SD的源代码混淆器系列的成员。

答案 8 :(得分:2)

使用SourceGuardian很好,因为它带有一个很酷且易于使用的GUI。

但请注意:

注意其有趣的许可条款。

  • 每台机器只允许运行1个 - 这是可以接受的
  • 如果你想在另一台机器上运行命令行界面,比如说你的网络服务器,你需要另外一张许可证(是的,这很有趣,我也能听到你的笑声)。

答案 9 :(得分:-15)

混淆只会为您的程序添加另一层潜在的错误和安全漏洞。请不要这样做。

那些编写混淆软件的人通常看起来非常粗略和非技术。

如果您的代码“非常好”,那么无论是否混淆,破解者都会竭尽全力传播它。如果没有人知道/关心您的代码,他们可能也不会。