HOWTO · PHP
8 个最佳 PHP 代码混淆器
本教程演示了 PHP 中的八个最佳代码混淆器。
本页内容
PHP 混淆通过把源代码改写为可读性更低的形式,使其更难被查看,但它无法保证代码始终保持不可读、无法阻止复制,也不能提供真正的安全保护。下面这些工具在转换内容、目标 PHP 版本以及许可方式上各不相同。
本文比较了八款知名的 PHP 混淆器,帮助你选择一个适合自己项目的工具。
PHP 混淆能做什么、不能做什么
混淆会重写可运行的 PHP 代码,让随意浏览的读者难以读懂它。典型的转换包括:把变量、函数、类和命名空间重命名为无意义的标识符,删除注释和缩进,以及扭曲控制流。其目标是提高理解代码所需的工作量,而不是让理解在数学上变得不可能。
由于 PHP 仍必须能够执行该文件,混淆后的脚本在原则上总是可逆的。有决心的读者可以解码标识符表、用调试器逐行跟踪代码,或者把混淆后的输出与原始代码对比。因此,混淆可以遏制投机取巧的复制,但它不是加密,单凭自身无法阻止代码被复用或窃取。要获得真正的保护,你还需要许可条款,并在有需要的场景下采用根本不交付源代码的服务器端交付方式。
混淆也不同于三个经常与之混淆的概念。代码压缩(minification 或 compaction)只是移除空白和注释,有时还会缩短名称,以减小文件体积;可读性下降只是副作用,而非目标。性能优化是让代码运行得更快,而压缩做不到这一点。而密码哈希或机密信息保护等安全控制绝不能依赖混淆,因为凡是 PHP 运行时能读取的内容,攻击者最终也能读取。
还有一点适用于整个列表:下面的功能描述、PHP 版本声明和许可说明,反映的都是各项目文档中的说法,而其中一些项目已经多年没有更新。在采用某个工具之前,请先核实其仓库的当前状态。
比较八款 PHP 混淆器
YAK Pro – PHP 混淆器
YAK Pro 是 "Yet Another Killer Product" 的缩写,是一款开源的 PHP 混淆器,应用了范围广泛的一组转换:
- 它可以随机重新排列代码语句。
- 它可以删除缩进和注释等不必要的元素。
- 它使用
goto语句来掩盖if、else、else if、for、while、do-while等类似结构。 - 它可以重命名代码中的每一个重要部分,包括函数、类、标签、变量和命名空间。
YAK Pro 托管在 GitHub 上,可以从这里下载。
Naneu 的 PHP 混淆器
Naneu 专为 PSR/OOP 风格的 PHP 代码而设计。与许多依赖基于 eval() 的混淆工具不同,Naneu 会解析 PHP 源代码,并重命名类、方法、变量等代码部分。
这个库最初是为了混淆一个私有库的源代码而编写的——那个库不能在毫无保护的情况下共享。其声明的特性包括:
- 它面向 PSR/OOP 风格的 PHP 代码库。
- 根据其文档,它可以混淆为 PHP 5.3、5.4 和 5.5 编写的代码,而工具本身需要 5.4 以上的 PHP 版本才能运行。这些是较早的版本声明,使用前请确认当前的兼容性。
Naneu 托管在 GitHub 上,可以从这里下载。
Eccenux POBS
Eccenux POBS 会把 PHP 代码编译成可读性更低的形式。它的文档对这一局限很坦诚:混淆结果并非坚不可摧,有耐心的读者仍能猜出单个函数的作用。
安装 POBS 很简单——下载后把文件解压到 Web 服务器目录即可。其声明的特性包括:
- 它可以用于大型项目。
- 配置简单,不需要太多设置工作。
Eccenux POBS 托管在 GitHub 上,可以从这里下载。
pH-7 Obfuscator
pH-7 Obfuscator 是一款开源工具,旨在保护部署在共享虚拟主机上的代码——在这类环境中,主要诉求是对随意的访问隐藏源代码。其声明的特性包括:
- 它能让代码变得非常难以阅读。
- 其文档声称支持 PHP 5.2 及更高版本——这是一个较早的声明,值得对照你的运行环境核实。
pH-7 Obfuscator 托管在 GitHub 上,可以从这里下载。
Xeoncross PHP Compactor
Xeoncross PHP Compactor 会压缩并混淆 PHP 代码,但它主要是一个压缩器,而非深度混淆器。压缩只是移除空白并缩短代码;它不会加快 PHP 的执行速度,所以不要指望通过选择这个工具获得性能提升。
这个工具适合用来查看项目的实际大小:比较运行一个类所需的字符数即可。
Xeoncross PHP Compactor 托管在 GitHub 上,可以从这里下载。
smart-php-obfuscator
smart-php-obfuscator 是由 Weidi Zhang 开发的一款 PHP 混淆器。其声明的特性包括:
- 它是开源的。
- 它力求保持简单,同时仍能有效打乱源代码。
- 其文档声称支持 PHP 7.0 及以上版本——这同样是一个需要核实的较早声明。
smart-php-obfuscator 托管在 GitHub 上,可以从这里下载。
pmaslak/php-obfuscator
pmaslak/php-obfuscator 可用于商业和非商业用途,工作方式与 YAK Pro 类似。其声明的特性包括:
- 它是开源的。
- 它以 MIT 许可证发布,这简化了在专有项目中的采用。
pmaslak/php-obfuscator 托管在 GitHub 上,可以在这里下载。
pl4g4/online-php-obfuscator
pl4g4/online-php-obfuscator 是由 pl4g4 开发的一项在线服务。你上传一个 PHP 文件,服务生成混淆版本,然后由你下载结果。其声明的特性包括:
- 它是开源的。
- 它允许你下载自己 PHP 代码的混淆版本。
该项目声称上传的文件在混淆完成后会被删除,但这一保证未经核实。在未独立核实第三方混淆服务的处理和留存条款之前,不要把私有或专有源代码上传到这类服务——对任何敏感代码,优先使用本地运行的工具。
为你的项目选择 PHP 混淆器
根据你的实际约束来匹配工具,而不是挑选功能列表最长的那个。
- 代码库风格。 对于现代的 PSR/OOP 代码库,Naneu 是围绕解析后的类和方法重命名而设计的。对于较老的或过程式的代码,YAK Pro 或 pmaslak/php-obfuscator 能应用更广泛的标识符和控制流变更。
- 许可。 如果商业项目需要明确的宽松许可证,pmaslak/php-obfuscator 采用 MIT 许可证。对于其他工具,请自行查看各仓库的许可文件,因为仅有“开源”标签并不能界定你的权利。
- PHP 版本。 声明的兼容范围——Naneu 面向 PHP 5.3–5.5 的目标代码,pH-7 Obfuscator 支持 5.2+,smart-php-obfuscator 支持 7.0+——均来自项目文档,可能已经过时。在正式采用之前,先在你的生产 PHP 版本下对代码副本运行该工具。
- 本地工具与在线服务。 pl4g4/online-php-obfuscator 是最方便的选择,但需要上传你的源代码。除非你已核实该服务的数据处理方式,否则应让专有代码留在本地工具上处理。
- 目标。 如果你的目标是降低可读性,请选择 YAK Pro、Naneu 或 pH-7 Obfuscator 这类真正的混淆器。如果你想要更小的文件或测量代码体积,Xeoncross PHP Compactor 更合适——但它不是安全措施,也不会让 PHP 运行得更快。
无论选择哪一个,都要把原始源代码纳入版本控制,彻底测试混淆后的输出——重命名可能会破坏依赖反射、动态调用或命名约定的代码——并把混淆当作与许可条款并行的一种威慑手段,而不是代码无法被读取或复用的保证。