首页 > 编程语言 >如何正确保护 Python 代码,不是 Pyinstaller

如何正确保护 Python 代码,不是 Pyinstaller

时间:2024-11-10 21:20:07浏览次数:4  
标签:Pyinstaller cfqw Python 代码 py pyarmor 加密 com

引言
在开发 Python 软件或者脚本时,为了保护 Python 代码不被盗用或篡改,我们需要借助一些工具来保护我们的源代码。通常情况下,我们可能会用 Pyinstaller 来保护我们的代码,并且将代码打包成可以在任何电脑上运行的单个文件。

但是,Pyinstaller 打包后的程序,只是将源代码编译成了 pyc 文件,pyc 文件和 Java 的 class 文件类似,是可以进行反编译的,而且还原度还挺高,所以不太符合我们的需求。所以这里介绍一款可以完美保护我们的代码的工具:PyArmor。

  1. PyArmor 概述
    Pyarmor 是一个用于加密和保护 Python 脚本的工具。它能够在运行时刻保护 Python 脚本代码不被泄露,设置加密后脚本的使用期限,绑定加密脚本到硬盘、网卡等硬件设备。它支持多种 Python 版本和平台,包括 Windows、Linux 和 macOS。

功能特点
无缝替换: 加密后的脚本依然是一个有效的 .py 文件,在大多数情况下可以直接替换原来的 .py 脚本,而不影响脚本的使用。

均衡加密: 提供了丰富的加密选项来平衡安全性和性能,能够满足大多数应用对安全性和性能的要求。

不可逆加密: 能够直接重命名源代码中的函数,类,方法,变量和参数。

转换成为 C 代码: 能够把模块中部分函数转换成为 C 代码,然后使用高优化选项直接编译 C 代码为机器指令来保护 Python 函数

限制加密脚本的使用范围: 可以绑定加密脚本到指定的设备或者设置加密脚本的有效期

Themida 保护: 使用 Themida 保护加密脚本(仅 Windows 平台可用)

  1. 安装方法
    PyArmor 的安装很简单,使用 pip 安装即可。或者说使用你自己的依赖管理工具,我这里使用 poetry。

poetry add PyArmor

或者使用 pip

pip install PyArmor

  1. 主要功能
    3.1 代码加密
    代码加密是 PyArmor 的核心功能之一,它将 Python 源代码转换为加密格式,防止他人修改。加密后的代码在执行的时候会自动解密,不影响软件原有的功能。

来看一下加密的例子,先写一个示例程序。

import requests

r = requests.get('https://www.baidu.com')
print(r.status_code)
print(r.text[:200])

a = [a for a in range(10)]
print(a)
a.reverse()
print(a)

pyarmor gen test7.py

运行以上命令开始加密脚本,得到下面的结果:

运行加密后的 test7.py,得到以下结果:

200

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

查看加密后的 test7.py:

init.py内容,还生成了一个 so 文件,pyarmor_runtime.so,有点类似于 cython 的编译结果,必须带有这个文件加密的代码才能运行。

3.2 过期时间
除了以上的加密功能, PyArmor 还可以设置过期时间,只要在打包的时候加 -e 参数即可。

pyarmor g -e 2024-11-04 test7.py

第一次运行,正常输出,等一天后再运行,程序报错了。

Traceback (most recent call last):
File "/Users/xx/Downloads/xx/code/test/dist/test7.py", line 2, in
from pyarmor_runtime_000000 import pyarmor
File "/Users/xx/Downloads/xx/code/test/dist/pyarmor_runtime_000000/init.py", line 2, in
from .pyarmor_runtime import pyarmor
RuntimeError: this license key is expired (1:11086)

也可以设置使用远程服务器的时间

pyarmor cfg nts=pool.ntp.org
pyarmor g -e 2024-11-04 test7.py

不过这里有一个问题,http 协议的时间服务器,有可能会遇到劫持问题,哈哈哈,逆向搞多了,突然想到这个问题,不知道官方有没有解决方案。

3.3 绑定到本机电脑
可以使用一下命令将程序绑定到特定的 MAC 地址。

pyarmor g -b '00:16:3e:35:19:3d' test7.py

由于这不是我电脑的 MAC 地址,运行报错。

cfqw.shenshiapp.com
cfqw.hxjweiyu.com
cfqw.gjmsxy.com
cfqw.zgmcpj.com
cfqw.tiquality.com
cfqw.toto58.com
cfqw.lhcgzj.com
cfqw.gdlddb.com
cfqw.volanswing.com
cfqw.smxbsbl.com
cfqw.hflxzsgc.com
cfqw.nxttyq.com
cfqw.jiamuli.com
cfqw.banchendb.com
cfqw.aguailuo.com
cfqw.gzhajd.com
cfqw.gzxuezhe.com
cfqw.zywl9780bq.com
cfqw.nc-lianshun.com
cfqw.sp0557.com
cfqw.sxjnbw.com
cfqw.sheanxf.com
cfqw.fsyqd.com
cfqw.ygjxjgc.com
cfqw.cq-mba.com
cfqw.boni168.com
cfqw.kan-mei.com
cfqw.gxqiangli.com
cfqw.lzwgdn.com
cfqw.gz-jianyou.com
cfqw.zhongzhengja.com
cfqw.cshszgyy.com
cfqw.shengheyiyuan.com
cfqw.ybgamer.com
cfqw.hebeixinjinghua.com
cfqw.hnlrst.com
cfqw.gdrjzcgl.com
cfqw.boyuanyiren.com
cfqw.whxsdnhs.com
cfqw.sdcehb.com
cfqw.aisheng120.com
cfqw.xiekur.com
cfqw.wannianqngjanzhann.com
cfqw.whxmlyyy.com
cfqw.njcongchong.com
cfqw.newpaint-tech.com
cfqw.hyxxlx.com
cfqw.kangjishengyuan.com
cfqw.lidich.com
cfqw.dianhaoguan.com
cfqw.hczycb.com
cfqw.mayunfuren.com
cfqw.qianyanjs.com
cfqw.punoche.com
cfqw.daozhewang.com
cfqw.yangzhie322.com
cfqw.cdjycm.com
cfqw.ltsshoes.com
cfqw.mxksl.com
cfqw.cdyhjj.com
cfqw.zmndyy.com
cfqw.cgglsb.com
cfqw.china-epal.com
cfqw.wxgbxt.com
cfqw.cchhny.com
cfqw.fmzddz.com
cfqw.du-hopegbw.com
cfqw.gzchanghe.com
cfqw.lewzmy.com
cfqw.nandunlv.com

Traceback (most recent call last):
File "/Users/b/Downloads/work/code/test/dist/test7.py", line 2, in
from pyarmor_runtime_000000 import pyarmor
File "/Users/b/Downloads/work/code/test/dist/pyarmor_runtime_000000/init.py", line 2, in
from .pyarmor_runtime import pyarmor
RuntimeError: this license key is not for this machine (1:10235)

3.4 注意事项
运行加密脚本需要一个 扩展模块 pyarmor_runtime ,它在运行辅助包 pyarmor_runtime_000000 目录下面。

使用二进制的扩展模块意味着加密脚本需要有为各个平台的预编译的扩展模块 pyarmor_runtime ,所以加密脚本

只能运行在那些已经有预编译扩展模块的平台,所有支持的平台请参考 生成加密脚本的环境

只能使用相同版本 CPython interpreter 解释器来运行,例如使用 Python 3.8 加密的脚本,无法被 Python 3.9 运行

一般不能被第三方解释器,例如 PyPy, IronPython 或者 Jython 等来运行

结论
有了这个工具,后续我们在将开发的代码发给其他人时,可以用 PyArmor 来将代码加密后发给对方,同时还可以配置过期时间和本地 MAC 地址或者序列号绑定,不用担心我们的代码被用户拿去篡改或者被用于其他用途了。

更多更强大的功能需要付费,但是一般情况下,免费版本已经足够我们使用了,付费版本如果有需求的小伙伴可以参考下表自行购买。

标签:Pyinstaller,cfqw,Python,代码,py,pyarmor,加密,com
From: https://www.cnblogs.com/bkbk123/p/18538521

相关文章

  • 怎么启动python脚本文件
    创建一个简单的python入门代码,以便示范。存储文件并复制该python文件的存储路径。使用cd命令切换工作目录到python文件所在的目录。输入变量环境中的python路径和python文件的名字。回车执行后,可完成命令行的python文件运行。......
  • 如何用python求导数
    打开python运行环境。导入微分的模块包:fromsympyimport*。定义符号变量:x=symbols('x')定义一个函数:f=x**9diff=diff(f,x)求导最后输入diff,即可显示其变量值了。......
  • Python decimal模块用法
    decimal模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。    在Python中,将变量声明为 Decimal 类型通常用于需要高精度和小数运算的场合。Decimal 类型属于 deci......
  • 状态总览界面相关代码
    运行情况概览日志索引数量{{log.indices}}日志总条数{{overviewData.documentsNum}}日志总量{{overviewData.data}}用户总数{{log.userNum}}昨日登录次数{{log.loginNum}}昨日查询次数{{log.searchNum}}<divclass="sidershadow">......
  • 【Python知识宝库】快速了解 `isinstance()` 的原理、作用和使用场景
    ......
  • Cocos Creator 如何调试代码?
    一、方式调试代码两种方式: 在VScode中调试 在浏览器中调试二、调试一:VSCode中Chrome浏览器打开VSCode中的插件下载DebuggerforChrome/JavaScriptDebugger打开CocosCreator点击菜单中的开发者选项选择VisualStudioCode工作流->添加Chromedebug配置,......
  • python+flask计算机毕业设计航空公司货运管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于航空公司货运管理系统的研究,现有研究多侧重于航空货运的某一单独环节,如货运流程优化或者资源配置等方面。专门针对航空公司货运管......
  • python-26-Python ORM系列之pymysql实现对数据库的增删改查及新建表
    python-26-PythonORM系列之pymysql实现对数据库的增删改查及新建表一.简介在Python基础系列ORM部分我们为大家介绍了如何搭建MySQL数据和MySQL一些访问配置,同时细节的同学应该已经了解到了ORM的2个库pymysql和sqlalchemy;PyMySQL—MySQL数据库驱动,用于与MySQL数据库......
  • 三十六、Python基础语法(JSON操作)
    JSON(JavaScriptObjectNotation)是一种基于文本,轻量级的数据交换格式。它易于人阅读和编写,同时也易于机器解析和生成,在自动化测试中经常用来存放测试数据。JSON的特点:基于文本,不包含图片、音视频轻量级,定义相同数据量,JSON占用文件比较小独立于语言,所有编程语言都可以使......
  • Python从0到100(六十九):Python OpenCV-图像加噪与滤波
    前言:零基础学Python:Python从0到100最新最全教程。想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、计算机视觉、机器学习、神经网络以及人工智能相关知......