python如何通过pyarmor库保护源代码

 更新时间:2024年11月04日 10:32:20   作者:仙草哥哥  
pyarmor是一款用于加密和保护python脚本的工具,可以用于防止源代码泄露,下面我们就来学习一下Python如何利用pyarmor库来保护源代码吧

pyarmor

介绍

python是解释型语言,因此,代码不需要编译,而是通过明文提供的。在这种情况下,假如你发布了一个软件,那么,只能将源代码提供给使用者,这样就造成了源代码泄露。

使用pyinstaller打包可以一定程度上,减少源代码的泄露,但是,pyinstaller本身并不具备很强的安全性,可以被攻击者逆向,并且如果这样做,会导致软件的体积增大,运行速度降低。因此,pyinstaller并总是能够有效的保护源代码。如果你还不了解pyinstaller的使用,可以看看之前的文章,pyinstaller的使用

pyarmor是一款用于加密和保护python脚本的工具,可以用于防止源代码泄露。

同样的,pyarmor可以通过pip进行安装:pip install pyarmor

参考资料

pyarmor的github地址

pyarmor文档

源代码加密

加密运行程序

假如,我们已经有一个main.py的文件,并且安装了pyarmor,此时,使用命令:

# gen可以简写成g
# 也可以全写成generate
pyarmor gen main.py

在这个情况下,生成了一个新的dist目录:

包括了一份加密后的main.py,以及一份运行所需的辅助包

打开新生成的main.py,会发现,其中的内容无法被看懂,甚至其在做什么事情,也无从得知。

from pyarmor_runtime_000000 import __pyarmor__
__pyarmor__(__name__, __file__, b'PY000000\x00\x03\x0c\x00\xcb\r\r\n\x80\x00\x01\x00\x08\x00\x00\x00\x04\x00\x00\x00@\x00\x00\x007\x02\x00\x00\x12\t\x04\x00bh\x8a9\xca\xabK\x97\xae#T\xb8(\xb21\xa4\x00\x00\x00\x00\x00\x00\x00\x00ez#z1\xfd\x905\xe0}\x0bE,\x93\\k~x\x8e\xba\xda\xe6\xfa\x87%\x8an\xab]\xd1\xab\xc2jTsEd\x99\xfdJ\x8b\xc5\x94$8?s\x07\x0e\xa0\x1cF\xed\xc2\x0fh\xf9J\xfdS\x89l\xc5Jbt\xa8\x07\xa6\x8bV\xcbc\xe1)\xd0\x9e5\xe0\x96W\xddj\x02\x81\xc2d\xaa\xc9(m\x96Q{\x94Q\x80x:\x15\x87\x90\x07w\x9e\x9d~63Z\xa9*\xbdi\x83\xcf\x16,\x16&\x8a@\xdf\xd7\xe3a\x82\xb0\x850Kjq*\xd5|r\x0e)b@\xce\xd7^\x14b\x19\xf1\x13\xa6-\x8a\xb2+\x150\x87g/E\xb3\x1dl\xa40\xbd\x81Q"IK[)\xca\x9cw\x8cO\x08Z\xec\x8c\x0bp\x9f\xfd\xb3D\xa1\x00ew\xbe\xd5\xd0\xb6\xf0\xe8\xb4\xc3\x03\\\x1b\xa7\x88\x00\xf8\xe9jp@7\xe8\x13\xca\xc7\x9b\x94\x8e\x13\xc0\xa3rx\xd4,\xee\x83N\\\x821zp%\xe3\x11-_\xf3\xa8H\xc0\x01\x8d\xfa,\x13\x12dE\xdd\xde\x1d\x84n\xb8\x1c\x0b\xc8\xc6\x064\x1d\xeaQ\xba\xfa";\xa9m\xb9\x07\x8d\xe3\xab\xd8\x9a\xd2\x02>\x81\x8b\x8a\xd4\x16\xefU\x7f *\xe4\xe1a{1p\x02\xaa\xa0\xbb\x84sE\xf1\x07\xdej@2[\\n\xc0\x1d\x81\xc5\xda\x91=\xf14z\x04Nh\xc9\x13\x81>\x00\x17"yF\xb3W\x10\xb5\xe3\x19\xb78\xd2\x8b0\x86\xed\x9e\x16\xa0\xca\x89s\xdf\x85\xfd0\t\x9b\xbd\xfb\x05\xb9\x9e\xd3Ec-\xbf\x11\x1e\x17\x7f\x1b\xee\xe2\xf5\xa3\xa7>\x96\xden\x18\x94\xfc\xdcF\xebmR4q\xe4\xce\x88:\xc8?\x02\x92i0bc\xfcmS\xda\x97t\x02G\xb9h\x01L\xb2c:g\x98\xcf\x87`\xcbb\xe2 \x98`\x8a?\x93\x13\xc9\xff.\xcd\xfeiHJ\xc9{\xbcm\xa4k8Q\x7f\xc8\x0b\xcfo\xf4B\x99"\xc07\xf7\xd2\x0c\xba\xa5\xe9\xa4\xd9\xf0\xe22\x95-V\xb4Y\xc1H\x10]`\x93c\x13\xae\xac\xb2\xcf\xa1\xf0\x99\x07\xe8\xd8\xf8\x11K\x14\xe8\xfc\x9b\x9dR\xb6hY\xb0\xcf\xe9\x00\xf5\xb6%6X\x8fd\x95\xb5U\x07$#A\xc4u\x98\x96j\xc7\xe3jS\x8b\xf02&\x8a=\xc9\rs\xdd\x96\xbb\xdc?\xd2d\x91g\xbd4\x87tU\xeb\xc8>\n\xdb\xf4\x15')

但是,该文件可以被正确的运行(需要搭配辅助包),就像运行普通的代码那样:python main.py

加密包含依赖程序

一些程序并非全部都是python代码组成的,比如说,可能包括数据库文件,模板文件等。

直接对数据库,模板文件进行加密是不可行的,会导致文件无法读取,因此,必须单独保留这些文件。

在这种情况下,可以只加密python部分,然后自行移动所需的依赖文件。

加密python包

假如,我有一个python包,其中包括了多个文件,此时,可以加密整个python包。

pyarmor gen -O 输出目录 待加密包目录

同样的,此时得到了一个加密以后的python包,以及一个辅助包。在分发加密包时,需将辅助包与加密后的包一起提供,这是必要的。

你可以添加辅助包的前缀,以防止辅助包名字冲突。

pyarmor gen -O --prefix sagegrass_pkg1 输出目录 待加密包目录

设置有效期

按时间设置有效期

通过pyarmor加密的脚本,可以设置有效期。

设定具体的过期日期

pyarmor gen -e 2024-12-31 main.py

如果超过了时间限制,可能提示:RuntimeError: this license key is expired,无法运行程序。

绑定设备

通过pyarmor加密的脚本,可以绑定到硬盘序列号,网卡mac地址,以及ip地址上,来精确指定哪个设备可以使用。

首先,我们需要查询目标设备的设备信息:

python -m pyarmor.cli.hdinfo

根据得到信息,进行指定:

pyarmor gen -b 设备信息 main.py

如果设备信息不符,可能提示:RuntimeError: this license key is not for this machine,无法运行程序。

P.S. 英文单词armor的意思是盔甲。

到此这篇关于python如何通过pyarmor库保护源代码的文章就介绍到这了,更多相关python pyarmor保护源代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python如何用字典完成匹配任务

    Python如何用字典完成匹配任务

    在生物信息学领域,经常需要根据基因名称匹配其对应的编号,本文介绍了一种通过字典进行基因名称与编号匹配的方法,首先定义一个空列表存储对应编号,对于字典中不存在的基因名称,其编号默认为0
    2024-09-09
  • 使用python框架Scrapy爬取数据的操作步骤

    使用python框架Scrapy爬取数据的操作步骤

    Scrapy是一个基于Python的强大的开源网络爬虫框架,用于从网站上抓取信息,它提供了广泛的功能,使得爬取和分析数据变得相对容易,本文小编将给给大家介绍一下如何使用python框架Scrapy爬取数据,需要的朋友可以参考下
    2023-10-10
  • Django实现一对多表模型的跨表查询方法

    Django实现一对多表模型的跨表查询方法

    今天小编就为大家分享一篇Django实现一对多表模型的跨表查询方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • python入门:argparse浅析 nargs=''+''作用

    python入门:argparse浅析 nargs=''+''作用

    这篇文章主要介绍了python入门:argparse浅析 nargs='+'作用,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • python中yield函数的用法详解

    python中yield函数的用法详解

    这篇文章主要为大家详细介绍了python中yield函数的用法,数据库,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Numpy创建NumPy矩阵的简单实现

    Numpy创建NumPy矩阵的简单实现

    本文主要介绍了Numpy创建NumPy矩阵的简单实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • django中账号密码验证登陆功能的实现方法

    django中账号密码验证登陆功能的实现方法

    这篇文章主要介绍了django中账号密码验证登陆功能的实现方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • python之js逆向功能演示详解

    python之js逆向功能演示详解

    这篇文章主要为大家介绍了python之js逆向功能演示详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • python实现的简单FTP上传下载文件实例

    python实现的简单FTP上传下载文件实例

    这篇文章主要介绍了python实现的简单FTP上传下载文件的方法,实例分析了Python基于FTP模块实现文件传输的技巧,需要的朋友可以参考下
    2015-06-06
  • 详解Python中的文本处理

    详解Python中的文本处理

    这篇文章主要介绍了Python中的文本处理,包括从最基本的string模块的基础使用和更进一步的re模块的使用,本文来自IBM官方开发者技术文档,需要的朋友可以参考下
    2015-04-04

最新评论