前言

最近需要源码部署一个项目,因此探索一下保护源码的方式,由简单到复杂主要总结为以下三大类:

  • 代码混淆:主要是改变一些函数名、变量名
  • 代码打包:思路是把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代码部署的三种加密方案:代码混淆、代码编译、代码打包相关推荐

  1. 用python操作浏览器的三种方式,详细介绍并附代码

    第一种:selenium导入浏览器驱动,用get方法打开浏览器,例如: import time from selenium import webdriver def mac():     driver ...

  2. python编程剪刀石头布思路_剪刀石头布小习题三种语言python2、php、go代码

    剪刀石头布小习题三种语言python2.php.go代码 # coding:utf-8 """ python核心编程6-14习题的解题思路 设计一个"石头,剪子 ...

  3. iOS-常见三种加密(MD5、非对称加密,对称加密)

    任何应用的开发中安全都是重中之重,在信息交互异常活跃的现在,信息加密技术显得尤为重要.在app应用开发中,我们需要对应用中的多项数据进行加密处理,从而来保证应用上线后的安全性,给用户一个安全保障. 本 ...

  4. python学习音频-详解python播放音频的三种方法

    第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...

  5. python可以播放音乐吗_详解python播放音频的三种方法

    第一种 使用pygame模块 pygame.mixer.init() pygame.mixer.music.load(self.wav_file) pygame.mixer.music.set_vol ...

  6. 深度学习的三种硬件方案:ASIC,FPGA,GPU;你更看好?

    原文链接:http://www.sohu.com/a/123574005_465947 深度学习的三种硬件方案:ASIC,FPGA,GPU:你更看好? 2017-01-06 10:59 硬件十万个为什 ...

  7. Python实现二叉树的三种深度遍历方法!

    python代码实现了二叉树,这次将会实现二叉树的几种遍历方法,来更好的解析二叉树的结构特点.分别是一种广度遍历,和三种深度遍历方法:先序遍历,中序遍历,后序遍历.下面是代码实现: 1.先序遍历 遍历 ...

  8. python调用cmd命令释放端口_详解python调用cmd命令三种方法

    目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...

  9. 【Python】Python创建虚拟环境的三种方式

    Python创建虚拟环境的三种方式比较 Python创建虚拟环境的三种方式 首先:为什么需要虚拟环境? Pipenv vs Virtualenv vs Conda 1. Virtualenv 2. P ...

最新文章

  1. 用python画猪_用python画小猪票佩奇
  2. 解决IE6下不支持 png24的透明图片问题
  3. js正则--验证6-12位至少包含数字、小写字母和大些字母中至少两种字符,
  4. Python 过滤字母和数字
  5. spark有什么作用_Spark 101:它是什么,它做什么以及为什么起作用
  6. 云漫圈 | 写给对 ”游戏开发” 感兴趣的朋友们
  7. qt中设置父窗口中某一控件样式后,子窗口中某一控件也随父控件样式
  8. 【晒出你的第83行代码】剑指星辰,两位开发者贴出了小试牛刀的毕设代码
  9. 配置 IPsec *** and Internet Using Split Tunneling
  10. AOL架构原则.优秀API设计.Yeoman工具
  11. webservice 安全性 对外_WebService的安全性讨论【身份识别】
  12. git maven 一键部署_jenkins+git+maven搭建自动化部署项目环境
  13. 《算法第4版》与《算法导论》比较
  14. JAVA WEB学习笔记(一)
  15. 关于专利申请中发明内容和具体实施方法有什么本质区别?
  16. 写代码神器,自费送!
  17. mac同时享受教育优惠和免手续费分期
  18. office自动更新提示0xc0000142错误 解决办法
  19. 乌镇关注物联网安全 卡巴斯基重获中国政府投标许可
  20. 给想学UG编程的人几点建议

热门文章

  1. 仅用一个HTML标签,实现带动画的抖音LOGO
  2. Django项目开发:图书后台管理系统
  3. mAPI软件发布升级版本v1.3.0(测试版)
  4. 推荐制作响应式网站的五个理由
  5. 湘南学院计算机系考研喜报,湘南学院考研都考什么学校通过率高不高--【天道考研网校】(网络考研辅导班首选)...
  6. 传智播客 - java 就业面试题大全
  7. 测试用例案例_电脑QQ表情收藏
  8. View平移动画的正确写法
  9. 数组指针和指针数组的区别
  10. mybatis-mysql中大于号以及小于号