如何保护 Python 代码不被用户阅读?

2024-11-25 08:50:00
admin
原创
178
摘要:问题描述:我正在用 Python 开发一款软件,将分发给我雇主的客户。我的雇主想使用有时间限制的许可证文件来限制该软件的使用。如果我们分发.py文件甚至.pyc文件,将很容易(反编译并)删除检查许可证文件的代码。另一个方面是,我的雇主不希望我们的客户阅读代码,担心代码可能被窃取,或者至少是“新颖的想法”。有没...

问题描述:

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

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

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

有没有什么好办法可以解决这个问题?


解决方案 1:

“有没有什么好办法可以解决这个问题?” 没有。没有任何东西可以防止逆向工程。甚至 DVD 机器上的固件也已被逆向工程,AACS 加密密钥也被泄露。尽管 DMCA 将此定为刑事犯罪,但情况仍然如此。

由于没有任何技术方法可以阻止您的客户阅读您的代码,因此您必须应用普通的商业方法。

  1. 许可证。合同。条款和条件。即使人们可以阅读代码,这仍然有效。请注意,某些基于 Python 的组件可能要求您在使用这些组件销售软件之前支付费用。此外,某些开源许可证禁止您隐瞒该组件的来源或出处。

  2. 提供有价值的东西。如果你的产品如此优秀——而且价格难以拒绝——那么就没有动力浪费时间和金钱进行逆向工程。逆向工程成本高昂。让你的产品稍微便宜一点。

  3. 提供升级和增强功能,让任何逆向工程都成为坏主意。当下一个版本破坏了他们的逆向工程时,就没有意义了。这可能会走向荒谬的极端,但你应该提供新功能,让下一个版本比逆向工程更有价值。

  4. 以极具吸引力的价格提供定制服务,这样他们就宁愿付钱给你来构建和支持这些增强功能。

  5. 使用过期的许可证密钥。这很残忍,会给你带来坏名声,但它肯定会让你的软件停止工作。

  6. 将其作为 Web 服务提供。SaaS 不需要客户下载。

解决方案 2:

Python 是一种字节码编译解释型语言,很难锁定。即使你使用像py2exe这样的 exe 打包程序,可执行文件的布局也是众所周知的,而且 Python 字节码也很容易理解。

通常在这种情况下,你必须做出权衡。保护代码真的有多重要?代码中真的有秘密吗(比如银行转账的对称加密密钥),还是你只是有点偏执?选择能让你以最快的速度开发出最佳产品的语言,并切实认识到你的新奇想法有多有价值。

如果您决定确实需要安全地执行许可证检查,请将其写为一个小的 C 扩展,以便许可证检查代码可以非常困难(但并非不可能!)进行逆向工程,并将大部分代码留在 Python 中。

解决方案 3:

Python 不是你需要的工具

你必须使用正确的工具来做正确的事情,而 Python 的设计初衷并不是模糊的。恰恰相反,在 Python 中一切都是开放的,或者说一切都很容易揭示或修改,因为这是该语言的哲学。

如果你想要一些你看不透的东西,那就找另一个工具。这不是坏事,重要的是有几种不同的工具用于不同的用途。

混淆确实很难

即使是编译后的程序也可以进行逆向工程,所以不要以为你可以完全保护任何代码。你可以分析混淆的 PHP、破解闪存加密密钥等。新版本的 Windows 每次都会被破解。

有法律要求是好办法

你无法阻止别人滥用你的代码,但你可以轻易发现是否有人滥用。因此,这只是一个普通的法律问题。

代码保护被高估了

如今,商业模式倾向于销售服务而不是产品。你不能复制、盗版或窃取服务。也许是时候考虑顺其自然了……

解决方案 4:

编译 python 并分发二进制文件!

明智的想法:

使用Cython、Nuitka、Shed Skin或类似程序将 Python 编译为 C 代码,然后将您的应用程序作为 Python 二进制库(pyd)分发。

这样,就不会剩下任何 Python(字节)代码,而且我认为你已经完成了任何人(即你的雇主)都可以从常规代码中期望的合理程度的模糊化。(.NET 或 Java 的安全性不如这种情况,因为该字节码没有被混淆,并且可以相对容易地反编译为合理的源代码。)

Cython 与 CPython 的兼容性越来越好,所以我认为它应该可以工作。(我实际上正在为我们的产品考虑这一点。我们已经将一些第三方库构建为 pyd/dll,因此将我们自己的 python 代码作为二进制文件发送对我们来说并不是一个太大的进步。)

请参阅此博客文章(不是我写的)以获取有关如何操作的教程。(感谢@hithwen)

疯狂的想法:

您可能可以让 Cython 为每个模块单独存储 C 文件,然后将它们全部连接起来,并使用大量内联构建它们。这样,您的 Python 模块就非常庞大,很难用常用工具进行拆分。

疯狂至极:

如果您可以静态链接(并优化)python 运行时和所有库 (dll),您可能能够构建单个可执行文件。这样,拦截对 python 和您使用的任何框架库的调用肯定很困难。但是,如果您使用 LGPL 代码,则无法做到这一点。

解决方案 5:

我明白您希望您的客户使用 Python 的强大功能,但又不想公开源代码。

以下是我的建议:

(a) 将代码的关键部分写为 C 或 C++ 库,然后使用SIP或swig将 C/C++ API 公开给 Python 命名空间。

(b)使用cython代替 Python

(c)在(a)和(b)中,都应该能够将库作为带有 Python 接口的许可二进制文件进行分发。

解决方案 6:

你看过pyminifier吗?它可以缩小、混淆和压缩 Python 代码。示例代码对于随意的逆向工程来说看起来相当糟糕。

$ pyminifier --nonlatin --replacement-length=50 /tmp/tumult.py
#!/usr/bin/env python3
相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1579  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1355  
  信创产品在政府采购中的占比分析随着信息技术的飞速发展以及国家对信息安全重视程度的不断提高,信创产业应运而生并迅速崛起。信创,即信息技术应用创新,旨在实现信息技术领域的自主可控,减少对国外技术的依赖,保障国家信息安全。政府采购作为推动信创产业发展的重要力量,其对信创产品的采购占比情况备受关注。这不仅关系到信创产业的发展前...
信创和国产化的区别   8  
  信创,即信息技术应用创新产业,旨在实现信息技术领域的自主可控,摆脱对国外技术的依赖。近年来,国货国用信创发展势头迅猛,在诸多领域取得了显著成果。这一发展趋势对科技创新产生了深远的推动作用,不仅提升了我国在信息技术领域的自主创新能力,还为经济社会的数字化转型提供了坚实支撑。信创推动核心技术突破信创产业的发展促使企业和科研...
信创工作   9  
  信创技术,即信息技术应用创新产业,旨在实现信息技术领域的自主可控与安全可靠。近年来,信创技术发展迅猛,对中小企业产生了深远的影响,带来了诸多不可忽视的价值。在数字化转型的浪潮中,中小企业面临着激烈的市场竞争和复杂多变的环境,信创技术的出现为它们提供了新的发展机遇和支撑。信创技术对中小企业的影响技术架构变革信创技术促使中...
信创国产化   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用