是否有PHP的代码混淆器?[关闭]


212

有没有人为PHP使用过好的混淆器?我已经尝试了一些,但是它们不适用于大型项目。例如,它们不能处理一个文件中包含的变量和另一个文件中使用的变量。

还是您还有其他技巧可以阻止代码传播?


11
您确定需要吗?
令人愉快的

5
@ StevenA.Lowe:当心取笑PHP。:-)
Marco Demaio 2013年

89
另一个非常好的,与建构性编程有关的问题,以完美的问答形式出现,因为它是非建构性的,所以被关闭了。感到羞耻的堆栈溢出...
Petr 2014年

6
那就是堆栈溢出。比不应该关闭的封闭问题多产的唯一事情是,当一些可怜的泥comes来到这里并寻求帮助时,用户会大火。
Mac

2
如果您认为不应该关闭此窗口,请投票重新打开。
艾拉·巴克斯特

Answers:


240

您可以尝试使用PHP保护,这是一个免费的PHP混淆器,用于混淆您的PHP代码。
它非常好,易于使用,而且免费。
编辑:此服务不再可用。

至于其他人在这里写的关于不使用混淆的信息,因为它可能会损坏等等:
我只有一件事要回答-不要锁上房门,因为任何人都可以拿起你的锁。
确实是这样,混淆并不是要防止100%的代码盗窃。它仅需要使其成为一项耗时的任务,因此支付原始编码器的费用将更低。希望这可以帮助。


105
+1指出混淆的事实是使难度变得更大,这并非没有可能。
Ashkan Kh。Nazary 2011年

3
请注意,对源代码进行加密而不是对源代码进行混淆不会使解密也不可行,这确实非常困难。
xorinzor 2012年

9
尝试过,但不喜欢它。它只是改变变量名,它不能也不删除评论..
皮塑

1
@Schwern,打开大门,然后聘请哥伦布和一位非常好的律师来掩饰自己;)
David Newcomb 2013年

2
@David Newcomb-只需锁上门,谁愿意付给一个非常好的律师?
azoundria

109

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

音乐和电影公司尚未对此达成共识,他们仍然在DRM上花费了数百万美元。

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

perl -MO=Deparse some_program

PHP具有DeZenderShow My Code之类的功能

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

另请参见关于此主题perlfaq条目


220
我大体上同意您的观点,但是OP要求提供产品推荐,而不是关于开放源代码优点的讲座。
伊莱

36
与开源无关,后者与不仅仅能够看到代码而混搭代码有关。现实情况是,无论您如何编译,混淆或加密用户计算机上运行的任何代码或数据,它们最终都是透明的。OP需要了解这一点。
Schwern

7
@JamShady:混淆并不意味着您无法修复错误或进行修改。如果您愚蠢地混淆了源代码,扔掉了原始代码,并坚持维护混淆的结果,是的,您将无能为力。好的混淆器坚持要保留代码对混淆结果的映射。您可以调试/修改原始代码,将混淆的补丁发送给客户,甚至可以通过使用地图将混淆的投诉转换回可读的内容来诊断他的问题。他没有地图,这很安全。
艾拉·巴克斯特

34
问题:如何回答:您不应该=没有帮助
cmc

26
@cmc我相信很多人都会直接回答这个问题,因此我采取不同的策略不会有任何损失。问专家的一半是,他们知道您在问错问题以解决实际问题时。这是“ 5个为什么”的应用。zh.wikipedia.org/wiki/5_Whys真正的问题/问题是“如何阻止人们读取/窃取我的PHP代码”。答案是,如果您无法交付代码,则可能会浪费大量的时间和金钱来尝试并获得错误的安全感。那不是比混淆器列表更有用吗?
Schwern 2011年

31

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

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

19
厉害吗 每个页面都带有获取源代码的完整解决方案:运行“ gzuncompress(base64_decode($ a))”。是的,这将停止非程序员。但是,原始源代码将停止非程序员,谁需要为此编码?打算进行反向工程研究的唯一的人 PHP程序员。
Ira Baxter

2
大多数时候,非程序员尝试通过搜索要更改的源代码中的某些字符串来进行尝试,我也在寻找一种解决方案,该方案只能阻止非程序员更改源代码,例如域名,数据库名称,用户等
Asad Kamran 2015年

对我来说,这是一个非常有用的答案。我只希望阻止用户在记事本中轻松打开“ database.php”并查看我的数据库用户名和密码。
TimH-Codidact 2015年

20

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

我认为假设您了解某人想要混淆代码的所有可能情况,并且您假设任何人实际上愿意在混淆后查看该代码的情况下,实际上都是有点短视。考虑我当前的情况:

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


16

查看我们的SD丛集PHP混淆器,了解适用于任意大页面集的混淆器。它主要通过加扰标识符名称来操作。对于中等规模的大型应用程序,这会使代码极难理解,这就是整个目的。

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

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

是的,它在页面之间完全混淆标识符;如果不这样做,那么结果将无效。


1
举报人:可以礼貌地说出为什么举报。它直接回答了OP的问题,包括其具体问题。
艾拉·巴克斯特

从我可以看出这是仅在Windows下运行的EXE?至少eval是一个.exe文件...
Craig Jacobs 2014年

该eval文件是基于.exe的安装程序。复杂的事实是,安装的产品通常从.cmd脚本运行,因为其下有并行编程语言,但是您永远不会看到。它最初设计为Windows产品。但是,如果将它安装在带有Wine的Linux上,它将与安装的.sh脚本一起运行,就好像它是本机Linux工具一样。如果使用GUI部分(可选,大多数人希望在生产构建过程中将其作为脚本运行),则它使用Windows上的本机Java和Linux上的本机Java。
Ira Baxter 2014年

Thicket是否需要附加托管空间,这是真的吗?如果是,如何将其安装在共享主机上?
Stephen Adelakun

@StephenAdelakun:丛集不需要更改服务器。下载它并检查文档。
Ira Baxter

14

我见过的最好的是Zend Guard


2
SD PHP Obfuscator同样出色,价格约为1/5。
伊拉·巴克斯特

1
@SalmanPK的原因应该很明显?
佩尔迈斯特(Pellmeister)2012年

@SalmanPK它需要网络托管空间的附件。Zend Guard可能也这样做。不确定哪个是最主流的。无论如何,问题在于它减少了您的潜在受众。
James P.

1
SD的PHP Obfuscator将全部转换为小写。如果您使用的是框架,那将是一个问题。
Amil Waduwawara

1
@JamesPoulson:不清楚您的话是否指向SD PHP混淆器。只是要清楚,它不需要任何附加到虚拟主机空间。
Ira Baxter

10

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

最近,我用Java编写了它来混淆我的PHP项目,因为我没有找到任何写在网络上的好的和兼容的现成的产品,所以我决定将它作为saas放在网上,所以每个人都可以免费使用它。它不会在不同脚本之间更改变量名以实现最大的兼容性,但是使用随机逻辑也很好地混淆了它们,每条指令也是如此。弦乐...一切。我相信它比这个bug的日食要好得多,这是用PHP编写的,而且非常慢:)


看起来不错...但是安全吗?我的意思是,其他人可以轻松解密吗?
shasi kanth 2011年

我可以向您保证,此时NOBODY可以消除对该混淆器所混淆的代码的混淆。
PatlaDJ 2011年

3
[需要引用]-自制加密是通过隐蔽性实现的安全性,根本不是安全性。
克里斯·贝克

8
“我可以向您保证,现在NOBODY可以消除对代码的混淆”,甚至是PHP?如果PHP可以做到,那么其他人也可以做到。看起来像您站点上的示例代码,您将在某个地方有一个评估声明,将代码转储出去,将其更改为回显,然后将显示您的代码。

3
警告:此方法可以简单地解码回原始变量名,请参阅:lombokcyber.com/en/detools/decode-pipsomania
Zane Hooper

3

用于PHP的Thicket™混淆器

PHP混淆工具争PHP源代码,使其很难理解或反向工程(例子)。这为必须托管在网站上或运送给客户的源代码知识产权提供了重要的保护。它是SD的源代码混淆器家族的成员。


TrueBug.com无法访问。我知道三年多以后我会发表评论,但是请提供有关trueBug的新网址(如果有)的帮助吗?
Stephen Adelakun

@StephenAdelakun您只需要TrueBug吗?使用这个:TruBug PHP Obfuscator
Praveen Kumar Purushothaman

抱歉,该链接无法正常工作。还是我错过了什么?
史蒂芬·阿德莱肯

@StephenAdelakun我现在检查过,它可以工作。
Praveen Kumar Purushothaman

1
@StephenAdelakun为什么只有那个?:(无论如何,那都是死软件。现在有更好更好的产品了吗?
Praveen Kumar Purushothaman

2

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

但请注意:

请注意其-相当有趣的许可条款。

  • 您只允许每台计算机运行1个-到目前为止,这是可以接受的
  • 如果您想在另一台计算机上运行命令行界面,例如您的Web服务器,则将需要其他许可(是的,这很有趣,我也可以听到您的笑声)。

2
这对我来说似乎很正常!2台机器= 2个许可证!通常,人们的工作是在一台计算机上对所有内容进行编码,然后将其上传到其他计算机。
David Newcomb

@davidnewcomb您似乎不明白这一点。通常,在出厂之前,您需要在开发机器上加密代码。如果您需要在线进行操作,则命令行界面还需要附加许可证,这显然是不正确的。您倾向于将命令行界面放在Web服务器上,而不是放在本地框中。
Herr

2
TL; DR良好的保护,愚蠢的许可条款。
Herr

1
每个用户(而不是每台计算机)应为1个许可证。
beppe9000

@ beppe9000完全同意!
2015年

-16

模糊处理只会在您的程序中再增加一层潜在的错误和安全漏洞。请不要这样做。

编写混淆软件的人通常看起来非常粗略,而且也不熟练。

如果您的代码“很棒”,那么破解者将花费很长的时间来传播它,而不管它是否被混淆。如果没有人知道/关心您的代码,他们可能也不会。


7
不熟练?根据什么证据?我写他们。在进行全面概括之前,请检查一下我的简历。logicaldesigns.com/Company/People/idbaxter
Ira Baxter,2010年

5
@Ira:我的发言仍然成立。大多数混淆的代码可以在几分钟内被破坏。我具体是说,大多数这样做的人都不熟练,不是全部。首先想到的是Ioncube,而且确实已经发布了一个漏洞:osvdb.org/show/osvdb/41708。然后,您可能再次将其部分归咎于PHP晦涩的安全要求。
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ 2010年

3
如果使用可靠的工具进行混淆,则不会改变程序的可靠性。二进制编译是一种极端的混淆,但是我想您会相信Zend的PHP引擎是可靠的。(使用不好的工具进行的混淆或编译不算在内)。
艾拉·巴克斯特

1
任何半脑子的人都知道php在现实世界的企业软件市场上正在挣扎(读“不存在”),因为它并没有在asp.net上被混淆。我很讨厌那些思想薄弱的传教士,无话可说。(是的,这就是故意的无知。)开源已经推出了太久了,并且已经尝试过并且发现它过于频繁地想要除此以外的任何其他结论:爱好?开源。工作?加密。只有愚蠢的人/白痴/生活在泡沫中/有丰富的美食的人才能永远有不同的想法。
骗子2012年

2
该评论对我来说几乎是不可理解的,但是这似乎意味着出售开源软件或基于开源软件的软件是没有意义的。如果您没有注意到,Java是“企业”,开放源代码,并且与.NET一样成功。我的公司赚了数百万美元,我们再也不必进行混淆处理。问问自己:如果您不支持/改进软件,那么销售软件有什么好处(即:您只是破解了别人的软件并转售了)?
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳ 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.