如何防止客户看到用解释语言编写的代码?


16

我正在用Python构建一个相当复杂的解释程序。几个月以来,我一直在为大多数其他目的使用此代码,因此,我不希望我的客户能够简单地复制并尝试出售它,因为我认为这是值得的。

问题是我需要脚本在客户端付费的服务器上运行,因此有什么方法可以保护我机器上的特定文件夹免受root用户访问,或者使之只能使某个特定用途可以访问目录?操作系统是Ubuntu。


13
您和您的客户之间存在哪种合同/协议?他们是该代码的所有者,还是仅向他们授权使用它的代码?还是您没有解决任何问题?
马特b

2
我认为可以将python源代码编译成二进制。这个项目可能吗?如果是这样,您可以改为部署二进制文件。
FrustratedWithFormsDesigner

我认为夜莺很对。正确的许可和合同应防止所有这些情况,而不是技术措施。特别是因为您始终root可以对某事进行反编译/反混淆,并且可以执行所有操作
鲍比(Bobby)

换句话说,如果他们违反了合同或许可证,您可以起诉他们直到他们哭泣
Jakob Bowyer

9
每个人总是说他们的代码值得很多。
Kaleb Brasee

Answers:


40

许可。

真的,仅此而已!


6
我的第一个想法是拒绝投票,但这不是答案,但是,哎呀,你是对的。许可和签订合同就是这里的方法。
鲍比(Bobby)

@Bobby:几乎是唯一的方法。另一种选择是保持快速添加令人愉快的,有用的新功能,以至于窃取旧版本会浪费时间。
S.Lott

创用CC足以作为许可证吗?

10
-1这个问题要求阻止客户看到代码的方法,但这不是这样做的。人们并不总是遵守许可证,并且可能无法合法地确定要起诉。
2011年

8
您不能阻止客户端看到Python代码,反汇编起来太容易了。DRM不起作用(如果他们可以运行它,则可以对其进行分解)。因此,唯一的答案是合法的。而且,一旦您依靠法律来执行,就没有必要通过使技术基础复杂化而使自己或客户的生活变得更加艰难。
ncoghlan 2011年

10

您始终可以将所有文件编译为字节码pyc。那里有可以从中生成源代码的反编译器,但是没有什么严重的。

但是,这只会解决读取程序代码的能力。保护的唯一方法是按照夜惊小说所说的那样进行许可,因为即使您编译了代码,也可以说机器代码,如果您的工作不受许可的保护,仍然可以将其商业化。

底线,编译为字节码,更重要的是许可它


我有个问题。字节编译器使用任意变量名还是使用旧变量名?(我想这将不得不使用旧的,因为外部模块依赖于该名称空间)。

@Garrett:字节码包含变量名。在拆卸时它仍然是一个相对不可读的混乱(尽量消化分解这个食谱),并且没有任何(近期的)反编译。

7

使用Cython。这将使您可以将程序编译为本机可执行文件。然后,它应该更难偷了。

至于目录,我能给您的唯一建议是确保您正确设置了权限。ACL可能是您的朋友,尽管我不是100%地确定ACL可以限制root用户访问文件。即使可以,root仍然可以更改权限。他是根,他是上帝-这就是这些事情的运作方式。

http://www.korokithakis.net/node/109


1

如上面的用户所示,反汇编程序可以取回代码,但到目前为止仍不太可读(至少对于开源反汇编程序而言)。

我正在考虑这个问题,我认为可以解决此问题的一种方法(如果您称强制打开代码为问题)是编写一个自动重构脚本。实际上,这将相当简单。您只需将脚本输入模块,它将重命名所有模块特定的变量。这与仅释放已编译的文件一起,会使代码变得很模糊。

在PyPI上进行搜索时,我发现了这一点:http : //pypi.python.org/pypi/pyfuscate/0.1。您应该检查它和其他类似的东西并报告:D

另外:当然,您也应该获得许可。


1

我也建议许可。除了许可之外,让我们使用非对称密钥算法对主例程的源代码进行加密,以便仅客户端计算机可以运行它。配对中的关键之一是从客户端计算机的硬件(例如:网卡的序列号)获得的东西。运行程序时,使用一对中的另一个密钥解密源代码。请注意,纯文本形式的唯一可交付内容将是解密例程,其余的将以密文形式交付。

这样,您的客户可以复制并粘贴您看似乱码的代码,但无法在其他地方运行它。但是我的建议并不是完全防弹的:解释器可以将解密的程序存储在内存中的某个位置。我猜可能是某些黑客在执行过程中以明文形式检索了您的程序。

至于阻止文件夹从根目录访问,我同意不能阻止root用户访问任何文件/文件夹。


这只是混淆,使用正确的工具,总会在某个时间点以纯文本形式显示代码。一个简单的方法来击败你的解决方案是简单地换出ruby/ python/ node使用自定义程序镜子执行API和输出的代码。
Jamo

此外,专用密钥(用于解密)必须对环境可用,因此对攻击者可用。
Fixee

0

许可是此处的最佳答案。就是说,为什么它必须运转呢?如果它非常重要,那么您可能想寻求一种服务,并围绕事物构建某种服务API,这样人们甚至看不到您的知识产权来窃取它。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.