我开发了一个具有机密业务逻辑的Perl脚本。
我必须将此脚本提供给另一个Perl编码器,以便在他的环境中对其进行测试。他可能会尝试在我的程序中提取逻辑。所以我想让我的剧本很难理解。
有什么建议吗?
答案 0 :(得分:124)
我建议你让这个人和他的管理层签署一份法律上可执行的协议,禁止所有形式的逆向工程,以及任何其他方式获取你想要保护的东西。
混淆不能保护您免受确定的逆向工程尝试。这在理论上和实际上都是不可能的。
答案 1 :(得分:42)
不要试图混淆你的Perl。你在那里浪费时间。我向很多人展示如何打破Mastering Perl中的那种东西,这样他们就不会尝试去做。
您是否考虑过在C中实现敏感内容并使用Perl接口发送预编译的二进制文件?这样做相对容易,并且在不依赖巧妙技巧的情况下具有相同的效果。坚定的技术人员仍然可以对其进行逆向工程,但对于任何解决方案都是如此。你必须为每个平台编译库,但如果这些东西足以保护,那么重要的是足以让人们使用它。
或者,将敏感内容放在Web服务之后,以便他们永远不会获得代码。
我见过的一个聪明的策略涉及为每个客户定制的文件,无论是通过格式还是内容。这类似于使用平庸代码,评论或文档的低级水印。找到好奇的文本序列,你知道泄漏的来源。
业务答案是不要将程序提供给您不信任的人,或者使惩罚措施足够严厉以阻止它。
答案 2 :(得分:9)
首先,让我说你正在咆哮错误的树。出于多种原因,你想要做的是错误的做法。
其次,查看Filter::Crypto(和PAR::Filter::Crypto)。在开始之前阅读整本手册。
答案 3 :(得分:7)
使用Acme::Bleach清除代码。然后模糊生成的漂白代码。但是,任何编码/混淆代码都可以解码,因为Perl解释器无论如何都必须解码它。
答案 4 :(得分:3)
你可以看看perlcc。它并不保证正确性,但如果你在脚本中没有做任何过于质朴的事情,它应该没问题。
答案 5 :(得分:2)
至少在OSX上,它们提供了三个很棒的命令:
parl
par.pl
pp
parl - 将par文件转换为不需要Perl或其他模块运行的可执行二进制文件
par.pl - 从你的perl脚本制作par文件
pp - 将perl脚本编译成二进制文件(但它仍然需要perl)
不确定这些是否适用于Windows或Linux。
我注意到的一件有趣的事情是,当我在编译的perl脚本中使用命令来指示当前的工作目录时,它与我的新二进制可执行文件的目录相同。我原本以为它会在/ tmp中有未压缩的东西并从那里运行它,但事实并非如此。