【问题标题】:Protecting PHP CLI scripts保护 PHP CLI 脚本
【发布时间】:2012-05-22 19:58:01
【问题描述】:

我目前正在编写一个小的商业 PHP 脚本,它将是一个 VPN (PPTP) 管理器,在命令行中。

实际上,它是一个套接字服务器,它正在等待诸如“create”、“suspend”、“unsuspend”、“changepassword”之类的命令……然后解析PPTP文件并修改它们。

问题是我将不得不提供非常简单的 PHP 文件,它们只需要安装 php5-cli(没有 apache,没有别的),我需要保护它不被读取(实际上,它是只有1个文件,是一个完整的类。其余的可以清楚)。 我希望系统尽可能的轻,这就是为什么不需要 GUI、web-server、curl、*sql...

我考虑过 IonCube,但它非常昂贵并且不能与 cli 脚本一起使用,因为它需要一个加载器,它是由 apache 加载的。这是我认为每个编码器的问题。

我考虑过 HipHop PHP(来自 Facebook),但很难理解如何使用(因为我可以编译我的源代码,但用户指南说明了如何使用它启动我们的清晰源代码:/)。

所以,我是来寻求帮助的。我有一些 PHP-cli 脚本,它们必须在命令行中运行,它们不需要网络服务器来工作,而且我只需要(因为它是一个商业产品)来保护我的资源不被阅读和非法分发(这很容易绕过许可证系统)。这个文件只是一个 PHP 类。

谢谢。

-- 编辑-- 准确地说,我想让它按月、6 个月、年支付。如果清楚,那么每个人都可以评论许可证检查,并免费获得。我喜欢开源,为了证明,我已经为这个项目编写了 3 个类,一个带有输出处理(stdout/stderr/logfile)的调试/警告/错误管理器和一个 Socket 类,你只需要包含和扩展它,并且你有一个完整的服务器(你只需要实现所需的功能,服务器会调用“received commmand”(),我不想混淆这两个类。

【问题讨论】:

  • 靠支持赚钱,而不是靠卖资源
  • @zerkms 我同意,但这并不是一个无用的问题。
  • @Pelle ten Cate:可悲的事实是,如果你的软件真的很好——无论如何它都会被去混淆,如果它很糟糕——那么即使是免费的也没有人需要资源
  • 确实,如果有人想做,任何事情都可以进行逆向工程。尽管无论如何 FWIW PHP 是一种糟糕的语言来做这样的事情 - 你最好用一种可以多线程的语言来编写它,PHP 非阻塞 IO 很难编写并且可能存在问题,它真的不值得费心.如果您用 C 语言(例如)编写它,您可以使您的应用程序更好、更容易编写并更轻松地保护您的源代码,因为您可以简单地分发已编译的二进制文件。
  • 最好花时间让您的软件变得更好。无论如何,许多商业 PHP 应用程序都是在未加密的情况下出售的。

标签: obfuscation php hiphop


【解决方案1】:

对于 ionCube,有一个 online encoder 可用,它只需几美元就可以一次性编码您的脚本,具体取决于您的代码库的大小。如果您编写自己的许可机制,则可以使用它。此外,您关于ionclube loader的说法不正确,不需要apache,它只是一个可以在php.ini中加载的模块。在我看来,IonCube 是一个不错的选择。

请花点时间真正了解您需要多少保护。计算机将始终了解如何解释您的代码,因此最终人类将能够窥视内部,如果他真的想的话。

如果 ionCube 加载器在您的客户端上不是一个选项,那么有几个 PHP 的“混淆器”可能会阻止“快速浏览者”在不到一小时的时间内理解代码。这些混淆器不会加密您的代码,但它们会通过将所有变量、函数和类名更改为一些任意散列并删除所有 cmets 和空格来降低代码的可读性。他们不需要在服务器上运行任何东西,但最终你的 PHP 代码仍然是一样的。

【讨论】:

  • 这就是重点。感谢您的信息。这是一个不错的选择。正如我在第一篇文章中所说,我想隐藏的不是“我的想法”,而是许可机制。即使它是可逆的,关键是至少要尽可能地放松“客户”。所以我会尝试使用在线编码器,我看到你也可以检查“测试”,它是免费的。谢谢。
  • 测试编码是免费的,但是从我的脑海中,你的编码文件将只有 8 小时有效,无论如何,在有限的时间内。请注意所有运行 PHP_CLI 的客户端也需要运行 ionCube 加载器!
  • @Pelle_ten_Cate “运行 PHP_CLI 的客户端需要运行 ionCube 加载器”是什么意思?如果它是启用/安装的 php 模块,当客户启动脚本时,ionCube 将跟随。不是吗?
  • 我的意思是该模块需要在 php.ini 中安装/启用。这意味着:如果没有该模块,您将无法在任何 PHP 安装上运行它。
  • 好的,谢谢。这是我所期望的。所以我将把“安装”过程放在一个自述文件中,我的脚本也会检查安装。谢谢大家的帮助,一旦 PHP 好了,我会用 C/C++ 来做(尽量避免给编译源)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 2011-04-23
  • 2011-05-18
  • 1970-01-01
  • 1970-01-01
  • 2013-09-08
  • 2010-11-12
相关资源
最近更新 更多