Python代码的保护措施

前言

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

广告:ZehangZhuStudio招募合作者

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

保护措施

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

  • 使用许可证、合同或条款和条件。即使人们可以阅读代码,这仍然有效。请注意,一些基于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

你可能感兴趣的:(python,开发语言)