我正在用Python开发一款软件,它将分发给我雇主的客户。我的雇主想用一个有时间限制的许可证文件来限制软件的使用。

如果我们分发.py文件甚至.pyc文件,将很容易(反编译和)删除检查许可证文件的代码。

另一个方面是,我的雇主不希望我们的客户读到代码,担心代码可能被窃取,或者至少是“新颖的想法”。

有什么好办法来解决这个问题吗?


当前回答

通过散列和签署重要文件并使用公钥方法检查,用标准加密方案为代码签名如何?

通过这种方式,您可以为每个客户颁发带有公钥的license文件。

另外,你可以使用python混淆器,就像这个(谷歌一下)。

其他回答

虽然没有完美的解决方案,但可以做到以下几点:

将一些关键的启动代码移到本地库中。 在本机库中执行许可证检查。

如果要删除对本机代码的调用,程序无论如何都不会启动。如果它没有被删除,那么许可证将被强制执行。

虽然这不是一个跨平台的或纯python的解决方案,但它可以工作。

无论是Cython还是Nuitka都不是答案,因为当运行用Nuitka或Cython编译成.pyd或.exe文件的解决方案时,会生成一个缓存目录,所有的.pyc文件都会复制到缓存目录中,因此攻击者可以简单地反编译.pyc文件并查看您的代码或更改它。

通过散列和签署重要文件并使用公钥方法检查,用标准加密方案为代码签名如何?

通过这种方式,您可以为每个客户颁发带有公钥的license文件。

另外,你可以使用python混淆器,就像这个(谷歌一下)。

我认为还有一种方法可以保护你的Python代码;模糊处理方法的一部分。我相信有一个像Mount and Blade之类的游戏,改变并重新编译了他们自己的python解释器(原始的解释器,我相信是开源的),只是改变了OP代码表中的OP代码,使其与标准的python OP代码不同。

所以python源代码没有被修改,但是文件扩展名*。Pyc文件是不同的,并且操作代码与公共python.exe解释器不匹配。如果你检查游戏数据文件,所有数据都是Python源格式。

通过这种方式,可以用各种肮脏的伎俩来对付不成熟的黑客。阻止一群没有经验的黑客很容易。你不太可能打败专业黑客。但我想大多数公司不会长期雇佣专业黑客(可能是因为东西被黑客攻击了)。但不成熟的黑客到处都是(可以理解为好奇的IT人员)。

例如,你可以在一个修改过的解释器中,允许它检查源代码中的某些注释或文档字符串。对于这样的代码行,可以使用特殊的OP代码。例如:

OP 234是源行“#版权是我写的” 或者将这一行编译成等同于"if False:" if "# Copyright"缺失的操作代码。基本上是为了一些模糊的原因禁用了一整块代码。

重新编译修改后的解释器可能可行的一个用例是,应用程序不是你写的,应用程序很大,但你有偿保护它,比如当你是一个金融应用程序的专用服务器管理员时。

我发现让源代码或操作码开放以吸引眼球有点矛盾,但对网络通信使用SSL。SSL也不是100%安全。但它被用来阻止大多数眼睛阅读它。采取一点预防措施是明智的。

此外,如果有足够多的人认为Python源代码和操作码太明显了,很可能最终会有人为它开发至少一个简单的保护工具。因此,越来越多的人问“如何保护Python应用程序”只会促进这种发展。

保护代码的唯一可靠方法是在您控制的服务器上运行它,并为您的客户机提供与该服务器接口的客户机。