Python代码部署的三种加密方案:代码混淆、代码编译、代码打包
前言
最近需要源码部署一个项目,因此探索一下保护源码的方式,由简单到复杂主要总结为以下三大类:
- 代码混淆:主要是改变一些函数名、变量名
- 代码打包:思路是把Python代码打包成 .exe 的可执行文件
- 代码编译:思路是将Python代码编译成C,然后编译成动态链接库文件(linux的.so、windows的.dll)
一、代码混淆
代码混淆主要是改变一些函数名、变量名。可使用 Oxyry 对关键源码进行混淆,效果如下:
这种只是降低了代码可读性,严格意义上算不上是加密,不过针对足以应对一大半甲方了(哈哈哈)
二、代码打包
可以用 py2exe 或者 Nuitka 将代码打包成 exe 文件,不过只能从windows系统上运行,也可用 pyinstaller 打包,不过容易被攻破。不太符合我的需求,因此这种方式先立flag,等用到再说。参考资料:https://zhuanlan.zhihu.com/p/133303836
三、代码编译
这里使用 PyArmor 进行操作。这个工具能加密 Python 脚本,还能有效期限,绑定加密脚本到硬盘、网卡等硬件设备(试用版可以免费用)。
官方文档:https://pyarmor.readthedocs.io
安装:pip install pyarmor
升级:pip install --upgrade pyarmor
查看版本:pyarmor -v
基本语法:pyarmor [command] [options]
3.1 pyarmor快速使用
代码加密:执行 pyarmor obfuscate server.py
,就会把 server.py
作为入口函数且将同目录下的 py 文件加密到 ./dist
文件夹中(如果递归加密子目录下py文件可执行 pyarmor obfuscate --recursive server.py
)。加密后端的代码长这样:
对于不同操作系统,会编译生成不同格式的动态链接库文件:
生成的dist目录内容如下:
运行脚本:cd到 ./dist
文件夹正常执行 python server.py
即可(运行加密后的脚本用到 pytransform
,但不用安装 pyarmor
了)。
3.2 pyarmor进阶使用
设置过期时间:执行代码 pyarmor licenses --expired 2022-01-01 r001
,则在dist同级的当前目录生成 licenses 文件夹:
此外,如果要绑定mac地址或者硬盘,可以执行 pyarmor hdinfo
查看硬件信息,然后执行pyarmor licenses --bind-disk "xxxxxx" --bind-mac "xx:xx:xx:xx:xx:xx" r002
生成证书。
生成证书后,带上 licenses 执行加密命令:pyarmor obfuscate --with-license licenses/r001/license.lic server.py
,生成 dist 后 cd 进去再执行,如果时间过期了(或硬件不对),就会报错(此时即使删掉 licenses 文件夹也没啥用)。
参考文献:
[1] 介绍几种 Python 加密源代码的方法
[2] 使用 PyArmor(官方文档)
Python代码部署的三种加密方案:代码混淆、代码编译、代码打包相关推荐
- 用python操作浏览器的三种方式,详细介绍并附代码
第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac(): driver ...
- python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码
剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...
- iOS-常见三种加密(MD5、非对称加密,对称加密)
任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障. 本 ...
- python学习音频-详解python播放音频的三种方法
第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...
- python可以播放音乐吗_详解python播放音频的三种方法
第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...
- 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?
原文链接:http://www.sohu.com/a/123574005_465947 深度学习的三种硬件方案:ASIC,FPGA,GPU:你更看好? 2017-01-06 10:59 硬件十万个为什 ...
- Python实现二叉树的三种深度遍历方法!
python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...
- python调用cmd命令释放端口_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- 【Python】Python创建虚拟环境的三种方式
Python创建虚拟环境的三种方式比较 Python创建虚拟环境的三种方式 首先:为什么需要虚拟环境? Pipenv vs Virtualenv vs Conda 1. Virtualenv 2. P ...
最新文章
- 用python画猪_用python画小猪票佩奇
- 解决IE6下不支持 png24的透明图片问题
- js正则--验证6-12位至少包含数字、小写字母和大些字母中至少两种字符,
- Python 过滤字母和数字
- spark有什么作用_Spark 101:它是什么,它做什么以及为什么起作用
- 云漫圈 | 写给对 ”游戏开发” 感兴趣的朋友们
- qt中设置父窗口中某一控件样式后,子窗口中某一控件也随父控件样式
- 【晒出你的第83行代码】剑指星辰,两位开发者贴出了小试牛刀的毕设代码
- 配置 IPsec *** and Internet Using Split Tunneling
- AOL架构原则.优秀API设计.Yeoman工具
- webservice 安全性 对外_WebService的安全性讨论【身份识别】
- git maven 一键部署_jenkins+git+maven搭建自动化部署项目环境
- 《算法第4版》与《算法导论》比较
- JAVA WEB学习笔记(一)
- 关于专利申请中发明内容和具体实施方法有什么本质区别?
- 写代码神器,自费送!
- mac同时享受教育优惠和免手续费分期
- office自动更新提示0xc0000142错误 解决办法
- 乌镇关注物联网安全 卡巴斯基重获中国政府投标许可
- 给想学UG编程的人几点建议