Perl代码是否有一个很好的混淆器?
有谁知道Perl的代码混淆器好吗?我被要求在将代码发布给客户端之前研究混淆代码的选项。我知道混淆的代码仍然可以进行逆向工程,但这不是我们的主要关注点。
一些客户正在对我们提供给他们的源代码进行微小的更改,这在发生问题并必须对其进行修复时,或者在发布与他们所做的更改不兼容的补丁程序时,给我们带来噩梦。因此,这样做的目的只是为了使他们很难对自己的代码进行更改(无论如何,他们都不应该这样做)。
解决方案
回答
请不要那样做。如果我们不希望人们更改Perl代码,则将其置于适当的许可证下并强制执行该许可证。如果人们在许可中说不应这样做时更改了代码,那么当更新不再与他们的安装一起工作时,这不是问题。
有关更多详细信息,请参见perlfaq3对"如何隐藏我的Perl程序的源?"的回答。
回答
别。只是不要。
将其写到合同中(或者根据需要修改合同),我们对它们对软件所做的更改不承担任何责任。如果他们发现了代码然后期望我们对其进行修复,那么客户端问题将无法通过混淆代码来解决。并且,如果对它们进行了混淆处理,并且遇到了实际问题,请祝他们在错误报告中准确报告行号等,这很幸运。
回答
我以前走过这条路,当我们必须处理"混淆的"代码时,这绝对是一场噩梦,因为当我们(开发人员)无法阅读代码时,尝试在客户端服务器上调试问题会极大地增加成本。 。最后,我们会遇到"反混淆器",将"真实代码"复制到客户端服务器或者其他许多问题,而这些问题都变得非常麻烦。
我了解来历,但这听起来像是管理层有问题,他们正在寻求我们实施选定的解决方案,而不是找出正确的解决方案。
在这种情况下,听起来确实是许可或者合同问题。让我们将代码开源,但是将其提交为许可证的一部分,即他们提交的任何更改都必须重新提交给我们并获得批准。当我们推出补丁程序时,请检查所有代码的md5总和,如果它与预期的不符,则表明它们违反了许可证,因此将相应地收取费用(费用应高得多)。 (我记得有一家公司让我们拥有开放源代码的代码,但明确表示,如果我们进行了任何更改,我们都会以25,000美元的价格"购买"该代码,除非他们购买了以下产品,否则它们将不再负责任何错误修复或者升级新许可证)。
回答
看来主要问题是客户修改了代码,从而使我们难以支持它。我建议我们在寻求支持时要求文件的校验和(md5,sha等),并在打补丁时同样检查文件的校验和。例如,我们可以要求客户端提供所提供程序的输出,该程序经过安装并校验所有文件。
最终,他们有了代码,因此他们可以做任何想做的事情。我们能做的最好的事情就是强制执行许可证,并确保仅支持未修改的代码。
回答
在这种情况下,混淆是错误的方法。
将代码发布给客户端时,应保留发送代码的副本(在磁盘上,或者最好在版本控件中作为标记/分支)。
然后,如果客户进行了更改,我们可以将其拥有的代码与我们发送给他们的代码进行比较,并轻松发现更改。毕竟,如果他们觉得有必要进行更改,则某个地方存在问题,我们应该在主代码库中进行修复。
回答
混淆的另一种方法是使用ActiveState的Perl Dev Kit等工具将脚本转换为二进制文件。
回答
这不是一个认真的建议,但是请看一下Acme :: Buffy。
它至少会照亮一天!
回答
将程序转换为二进制文件的另一种方法是在CPAN上使用免费的PAR-Packer工具。甚至还有用于代码混淆的过滤器,尽管正如其他人所说的那样,这可能比其价值更大。
回答
正如几个人已经说过的:不。
考虑到Perl解释器的本质,这几乎是隐性的,在Perl接触到Perl之前,对Perl进行混淆处理的任何操作都必须是不可撤销的,这意味着我们需要将反混淆脚本/二进制文件留在解释器附近(因此客户)可以找到它:)
解决实际问题:校验和和/或者措辞适当的许可证。并且支持人员受过训练,说"我们更改了吗?"我们正在调用许可证的第34b条,在我们触及该条之前,该费用为$ X,000。
另外,请阅读为什么我应该混淆使用以获得更一般的答案。
回答
我正在运行Windows O / S,并使用IndigoSTAR的perl2exe。生成的.EXE文件不太可能在现场更改。
正如其他人所说,"如何混淆"是一个错误的问题。正确的方法是"如何阻止客户更改代码"。
回答
我同意以前的建议。
但是,如果我们确实愿意,可以查看PAR和/或者Filter :: Crypto CPAN模块。我们也可以一起使用它们。
当我们在光学介质上运送产品时,我将后者(Filter :: Crypto)用作"保护"的真正轻量级形式。它不会"保护"我们,但会阻止90%的人想要修改源文件。
回答
校验和和合同的想法有助于防止我们描述的"问题",但是如果我们付出的代价是难以进行升级和错误修复,那么客户如何进行未通过全面测试套件的更改?如果他们有能力进行这些更改(或者至少进行更改以表达他们想要代码执行的操作),为什么不简单/轻松地使他们打开支持记录并上传补丁程序呢?客户总是对客户想要的东西是正确的(他们可能不知道如何"正确地做"的线索,但这就是他们向我们付款的原因。
想要混淆器的一个更好的理由是在大众市场台式机部署中,在这种部署中,我们并不是每个客户都拥有固定的合同。在那种情况下,诸如PAR之类的东西-将加密/混淆逻辑打包到一个已编译的二进制文件中的任何事情就是要走的路。
回答
我只是邀请他们进入他们自己分支上的SVN树中,以便他们可以提供更改,并且可以看到它们并将其更改集成到我的开发树中。
不要战斗,拥抱它。
回答
正如Ovid所说,这是一个契约性的社会问题。如果他们更改密码,则保修无效。向他们收费很多,以解决此问题,但同时,给他们一个渠道,让他们可以提出更改建议。另外,请查看他们要更改的内容,并在可能的情况下进行配置。他们有自己想做的事情,直到我们满意为止,他们将继续努力绕过我们。
在Mastering Perl中,我谈到了击败混淆器。即使我们进行诸如胡说八道的变量名称之类的工作,诸如B :: Deparse和B :: Deobfuscate之类的模块,以及诸如Perl :: Tidy之类的Perl工具,也使知识渊博且有上进心的人很容易获得来源。我们不必担心无法理解和缺乏动力,因为他们无论如何都不知道如何处理代码。
当我与经理讨论此事时,我们将进行正常的成本收益分析。我们可以做各种各样的事情,但是花费不多于获得的收益。
祝你好运,