缩小/混淆PHP代码

时间:2010-01-14 15:02:52

标签: php code-generation obfuscation minify haxe

我使用Haxe生成PHP代码。 (这意味着你用Haxe语言编写代码并在编译后得到一堆php文件。)今天,一位客户告诉我他需要一个用Haxe制作的旧项目的新功能。他还告诉我他为了自己的需要改变了代码上的一些小东西。现在我首先将他的更改移植到我的Haxe代码然后添加新功能,因为否则他的更改将在下次编译项目时被覆盖。

为了防止再次发生这种情况,我正在寻找一种缩小/混淆PHP代码的程序。目标是尽可能使代码不可读/不可编辑 理想的工具可以在Linux下运行,可以处理整个文件夹及其包含文件的所有文件夹。

有人有什么建议吗?

7 个答案:

答案 0 :(得分:24)

为什么不在函数php_strip_whitespace()

中使用php buid
string php_strip_whitespace ( string $filename )

返回文件名中的PHP源代码,其中删除了PHP注释和空格。这对于确定脚本中的实际代码量与注释量相比可能很有用。这类似于从命令行使用php -w。

答案 1 :(得分:17)

我赞同这个评论,你所做的事情是非常卑鄙的,但是在这个商业10年之后,我可以证明一件事:你得到的代码的一半是如此令人费解,它可能已经被缩小,并且真正起作用/ var名称通常是完全随意的,我编辑了缩小的js,并且它比一些未明确的代码更麻烦。

我找不到任何这样的脚本/程序,很可能是因为这有点违背了PHP的精神而且有点卑鄙,从来没有那么少。

首先:Php对白色空间不敏感,所以第一步是删除字符串之外的所有换行符和空格。

对于普通的修补匠来说,这很难搞乱,一个中级程序员只会找到并用$ 1 \ n替换所有; {}或类似的东西。

下一步是get_defined_functions并保存该数组(返回数组中的'user'键),您需要包含所有文件才能执行此操作。

如果是oo代码,你也需要get_defined_classes。保存该数组。

基本上,你需要获取变量,方法和类实例,你必须在其上实例化类和get_object_vars,你可以四处寻找并看到你可以获得很多其他信息,比如常量和班级等等。

然后你获取这些列表,循环遍历它们,为每个事物创建一个唯一的名称,然后在所有文件中使用preg_replace或str_replace。

确保在测试副本上执行此操作,并查看您获得的错误。

但是,为了清楚起见,地狱中有一个特殊的地方可供那些为混淆而混淆的人保留。

结帐:get_defined_functions get_declared_classes,然后按照相关链接查看您可以执行的操作。

答案 2 :(得分:4)

我们使用Zend Guard对某些客户端的PHP代码进行编码,但正如Parrots所说,您需要确保拥有代码。我们只在某些情况下编码,并且只有当我们明确保留代码的所有权时,否则Parrots是正确的,客户端有权修改它。

答案 3 :(得分:4)

我知道Zendguard,Expressionengine用它来加密试用版的核心代码。你可以随时给它一个去,虽然你需要付钱。

然而,虽然我理解不得不移植他的更改的沮丧,但我认为他们从你那里购买了代码?他们有权修改它。您只是有权向他们收取额外的费用来移植他们的更改;)想象一下,如果您停止为他们工作,他们怎么可能雇用其他人来更新代码?

答案 4 :(得分:2)

我们的 PHP Obfuscator完全是剥离评论,空格和加扰标识符的工作。

它在一整套PHP文件中运行,以确保加扰符号被加扰 在这些文件中保持一致,即使在加扰后也能确保正确操作。

EDIT 2013:现在加密字符串文字以使它们不可读。在Windows下运行,在Linux下运行。

答案 5 :(得分:1)

答案 6 :(得分:0)

我刚刚找到PHP的minify-service。它真的很有用。他们说,这种混淆很快就会出现。我希望这是真的 :) http://customhost.com.ua/php-minify/