226

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

或者你还有什么其他的技巧可以阻止你的代码传播吗?

4

10 回答 10

252

你可以试试PHP Protect,它是一个免费的 PHP 混淆器来混淆你的 PHP 代码。
它非常好,易于使用且免费。
编辑:这项服务不再存在。

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

于 2011-02-26T16:40:18.490 回答
114

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

音乐和电影公司还没有完全接受这一点,他们仍然在 DRM 上花费数百万美元。

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

perl -MO=Deparse some_program

PHP 有DeZenderShow My Code之类的东西。

我的建议?写许可证并请律师。唯一的其他选择是不提供代码,而是运行托管服务。

另请参阅有关该主题的 perlfaq 条目

于 2008-10-24T07:36:50.067 回答
32

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

<?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);
于 2010-09-23T18:20:54.153 回答
21

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

我认为假设您知道有人想要混淆代码的所有可能场景,并且您假设任何人实际上都愿意竭尽全力查看被混淆的代码,这有点短视。考虑我目前的情况:

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

于 2011-03-05T00:48:33.573 回答
16

请参阅我们的SD Thicket PHP Obfuscator,了解可以很好地处理任意大型页面集的混淆器。它主要通过加扰标识符名称来操作。对于中型到大型应用程序,这会使代码极难理解,而这正是整个目的。

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

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

是的,它在页面之间以相同的方式混淆标识符;如果它不这样做,结果将不起作用。

于 2010-05-07T02:38:40.427 回答
14

我见过的最好的是Zend Guard

于 2008-10-24T07:30:55.587 回答
11

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

最近我用Java写了一个混淆我的PHP项目,因为我在网上没有找到任何好的和兼容的现成的,我决定把它作为saas放在网上,让大家免费使用它。它不会更改不同脚本之间的变量名称以获得最大的兼容性,但可以很好地混淆它们,使用随机逻辑,每条指令也是如此。字符串...一切。我相信它比这个错误的codeeclipse要好得多,这是用PHP编写的并且非常慢:)

于 2010-03-26T21:42:01.477 回答
3

用于 PHP 的Thicket™ 混淆器

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

于 2012-12-06T05:27:39.363 回答
2

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

但请注意:

注意它的——相当有趣的——许可条款。

  • 您只能在每台机器上运行 1 个 - 到目前为止这是可以接受的
  • 如果你想在另一台机器上运行命令行界面,比如说你的网络服务器,你将需要另一个许可证(是的,这很有趣,我也能听到你在笑)。
于 2012-11-28T19:41:23.343 回答
-19

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

无论如何,编写混淆软件的那种人通常看起来非常粗略和不熟练。

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

于 2010-05-07T02:59:38.250 回答