Python代码的保护措施

2023-12-22 11:26:29

前言

我正在用Python开发一个软件,该软件将分发给我雇主的客户。我的雇主想用有时间限制的许可文件来限制软件的使用。
如果我们分发.py文件,甚至.pyc文件,将很容易(反编译并)删除检查许可证文件的代码。
另一个方面是,我的雇主不希望我们的客户阅读代码,担心代码可能被窃取,或者至少是产生“新颖的想法”。
有什么好方法可以解决这个问题吗?

广告:ZehangZhuStudio招募合作者

我们是一个开源组织,在GitHub上拥有自己的组织和众多项目。但是我们只有不到10个合作者,我们需要更多人来一起编写代码。我们团结合作、平等对待、友善待人,我们时刻欢迎你的加入。
详情请咨询:zehangzhustudio@163.com

保护措施

基础且较为常见的保护措施

  • 使用许可证、合同或条款和条件。即使人们可以阅读代码,这仍然有效。请注意,一些基于Python的组件可能要求您在销售使用这些组件的软件之前支付费用。此外,一些开源许可证禁止您隐藏该组件的来源。
  • 提供显著价值。如果你的东西很好——价格很难拒绝——就没有动力浪费时间和金钱进行逆向工程。逆向工程成本高昂。让你的产品稍微便宜一点。
  • 提供升级和增强功能,使任何逆向工程都成为一个坏主意。当下一个版本破坏了他们的逆向工程时,就没有意义了。这可能会达到荒谬的极端,但你应该提供新的功能,使下一个版本比逆向工程更有价值。
  • 以极具吸引力的价格提供定制服务,他们宁愿付钱给你来构建和支持增强功能。
  • 使用过期的许可证密钥。这很残忍,会给你带来坏名声,但它肯定会让你的软件停止工作。
  • 将其作为web服务提供。因为SaaS不涉及向客户下载。

高级的保护措施

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

通常在这种情况下,你必须做出权衡。保护代码到底有多重要?里面有真正的秘密吗(比如银行转账对称加密的密钥),还是你只是偏执?选择能让你最快开发出最好产品的语言,并现实地看待你的新想法有多有价值。

  • 为需要保护的地方编写C语言拓展,这样可以在一定程度上增加逆向工程的成本(但并非不可能)。
  • 使用Cython、Nuitka、Shed-Skin或类似的工具将python编译为C代码,然后将您的应用程序分发为python二进制库(pyd)。
    这样,就不会有Python(字节)代码了,您已经从常规代码中进行了合理数量的模糊处理。
  • 使用pyminifier.它可以最小化、模糊和压缩Python代码。对于随意的逆向工程来说,示例代码看起来相当糟糕。可以较好得保护代码。
    -使用Pyminifier了的代码示例:
#!/usr/bin/env python3
ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????=ImportError
ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????燱=print
ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????巡=False
ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????澨=object
try:
 import demiurgic
except ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????:
 ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????燱("Warning: You're not demiurgic. Actually, I think that's normal.")
try:
 import mystificate
except ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????:
 ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????燱("Warning: Dark voodoo may be unreliable.")
ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????ﺬ=ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????巡
class ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𐦚(ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????澨):
 def __init__(self,*args,**kwargs):
  pass
 def ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????(self,dactyl):
  ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????=demiurgic.palpitation(dactyl)
  ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𠛲=mystificate.dark_voodoo(ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲?????)
  return ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𠛲
 def ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𐠯(self,whatever):
  ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????燱(whatever)
if __name__=="__main__":
 ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????燱("Forming...")
 ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????ﺃ=ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𐦚("epicaricacy","perseverate")
 ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????ﺃ.ﺭ异𞸐𐤔??ﺁ?𝕌𨿩𞸇?𐬑𥰫嬭?𢽁𐡆𧪮???𢤴?????ﺶ𐐤??𐰷𢡶𧐎𐭈𞸏𢢘𦘼?𩏃𦽨𞺎𠛘𐠲????𐠯("Codswallop")
# Created by pyminifier (https://github.com/liftoff/pyminifier)

如果你有什么好的保护Python代码的方法,欢迎留言投稿。谢谢阅读!


参考https://stackoverflow.com/questions/261638/how-do-i-protect-python-code-from-being-read-by-users

? HRHSZCDTC.ZehangZhuStudio by ZZH

文章来源:https://blog.csdn.net/CN_ZZH/article/details/132781890
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。