我怎么能混淆我的Perl脚本,使其难以逆向工程?

我开发了一个具有保密业务逻辑的Perl脚本。

我必须把这个脚本给另一个Perl编码器在他的环境中testing它。 他可能会尝试提取我的程序中的逻辑。 所以我想让我的脚本很难理解。

有什么build议么?

我build议你让这个人和他的pipe理层签署一个合法的可执行的协议,禁止一切forms的逆向工程,以及其他任何获得你想要保护的东西的手段。

混淆无法保护您免受逆向工程的决心。 这在理论上和实际上是不可能的。

不要试图混淆你的Perl。 你在这里浪费你的时间。 我展示了很多人如何在掌握Perl的时候打破这种东西,所以他们不会去尝试去做。

你有没有考虑在C中实现敏感的东西,并用Perl接口发布预编译的二进制文件? 这样做相对容易,而且不依赖于一个聪明的伎俩,具有相同的效果。 有经验的技术人员仍然可以对其进行逆向工程,但对任何解决scheme都是如此。 你必须为每个平台编译这个库,但是如果这个东西足够重要,那么足够重要的是足以让人们使用它。

或者,把敏感的东西放在一个Web服务后面,这样他们永远不会得到代码。

我见过的一个聪明的策略涉及到一个为每个客户量身定制的文件,无论是通过格式化还是内容。 这就像使用平淡的代码,评论或文档的低级水印一样。 find好奇的文本序列,并知道泄漏的来源。

业务的答案是不要把这个程序给那些你不信任的人,或者让这个惩罚僵硬到足以阻止它。

首先,让我说,你在吠叫错误的树。 你想要做的是错误的方法,原因很多。

其次,检查Filter :: Crypto (和PAR :: Filter :: Crypto )。 在开始之前阅读整本手册。

使用Acme :: Bleach漂白代码。 然后混淆所产生的漂白代码。 但是,任何编码/模糊代码都可以被解码,因为Perl解释器必须对其进行解码。

你可以看看perlcc。 它不能保证正确性,但是如果你在脚本中没有做太多时髦的话,它应该没问题。

至less在OSX上,他们提供了三个伟大的命令:

 parl par.pl pp 

parl – 将一个par文件转换为不需要Perl或其他模块运行的可执行二进制文件

par.pl – 从您的perl脚本制作par文件

pp – 将perl脚本编译为二进制文件(但仍然需要perl)

不确定这些是否适用于Windows或Linux。

我注意到的一个有趣的事情是,当我在编译的perl脚本中使用一个命令来指示当前的工作目录时,它与我的新的二进制可执行文件的目录是一样的。 我原以为它会将一些东西解压缩到/ tmp中,然后从那里运行,但事实并非如此。

如果这里的目标是让典型的用户看到你的代码非常困难和耗时,最简单的事情就是将你的perl脚本粘贴到EnScryption.com上 。 这个网站将封装你的perl代码,使得获得代码是太多的工作。 任何想要继续尝试打入“屏蔽”代码的人都会被报告给你。

或者,您可以使用openssl命令来隐藏整个脚本。 但是,你将需要提供密码给用户,以便他们运行它…这当然是失败的目的。

如果您的perl脚本对您来说很重要,我强烈build议您查看已经build议的让客户“ 签署合法可执行协议 ”的路线。