保护源码!加密你的 Python 程序代码!(留言送书)

Python客栈

共 3561字,需浏览 8分钟

 ·

2021-07-29 02:19


Python 语法简单,使用方便,我们可以使用它快速地编写程序和构建应用。

在编写好程序之后,我们必然要进行程序的分发。

如果我们写的是图形界面程序,可能会打包成相应操作系统平台的二进制运行文件(当然也可能直接发 Python 代码给别人运行)。

如果我们写的是 Web 应用程序,则需要部署在指定的服务器上

而这,就涉及到了源码保护的问题。我们不需要程序的使用者能够看到程序的源码。但是,Python 作为一门动态语言和脚本语言,运行通过它编写的程序,并不需要进行静态编译和打包的过程,对其代码进行加密是一件很麻烦、复杂和困难的事情

如果构建好的 Python 应用程序只是我们内部使用,或者部署在服务器上以 SaaS 化的形式供使用者使用,那么也根本无需考虑 Python 代码加密和源码泄露的问题。

但是,如果我们编写的程序是要进行商业授权的呢?

源码的保护则是必须要做的一件事情。

虽然很难,虽然不是十分完美,但是多增加一道门槛,也就多抵挡一些闲得蛋疼的人搞破解。

下面,介绍几种常见 Python 应用程序的代码加密方式,以供参考:

一、桌面图形程序加密

通常情况下,我们使用 PyQt5、Tkinter、WxPython 等框架编写的图形程序会使用 PyInstaller 进行打包,生成平台的二进制运行文件,比如 Windows 下的 exe 文件。

不过,使用 PyInstaller 编译打包出来的程序,很容易很反编译回去

比如,使用pyinstxtractor这个工具,就能把 PyInstallers 编译出来的 exe 还原回去;之后,再对还原出来的 pyc 文件进行反编译即可。

具体的使用方法,大家可以网上搜索,都有很多文章。

如何提高图形程序打包出二进制文件的安全性呢?

之前我们在介绍 PyQt5 程序打包时,有提到过使用 Nuitka 这个工具来减少生成二进制文件的大小。

其实,Nuitka 会将 Python 程序转化为 C 语言程序,然后再进行编译打包为二进制文件。众所周知,反编译 C 程序的难度是巨大的。以此,我们就极高地保障了图形界面程序的源码安全性。

二、Web 应用程序

对于 Python 编写的 Web 应用程序,我们一般直接将其部署在服务器上然后对外进行服务。

但是如果是一个私有化部署的应用程序,既需要部署在客户的机器上,又不想客户看到应用程序的源码。

这时候,可以考虑将 Python 代码文件编译为 C 文件,然后再将 C 文件编译为操作系统的动态链接库文件(Linux 下的 .so 文件和 Windows 下的 .pyd 文件)。

以上步骤需要使用第三方库 cython,然后编写一个setup.py文件用来指定需要处理的 Python 文件,例如:

  1. from distutils.core import setup

  2. from Cython.Build import cythonize

  3. setup(ext_modules = cythonize(["zmister.py"]))

这样,就可以把 Python 文件编译为特定操作系统平台的动态链接库文件了。

同时,有一个第三方库 jmpy3 对上述流程进行了优化,支持单个文件和整个项目进行编译,使用起来更加友好:

需要注意的是,使用这种方式加密后的文件需要使用生成时的 Python 版本,这也算是一个小缺点。但是这个缺点可以通过打包为 Docker 镜像的方式解决掉。

三、通用加密

除了上述两种方案,还有一个工具——PyArmor 能够实现 Python 代码的加密。

PyArmor 是一个用于加密和保护 Python 脚本的工具。它能够在运行时刻保护 Python脚本的二进制代码不被泄露,设置加密后 Python 源代码的有效期限,绑 定加密后的Python源代码到硬盘、网卡等硬件设备。它的保障机制主要包括:

  • 加密编译后的代码块,保护模块中的字符串和常量

  • 在脚本运行时候动态加密和解密每一个函数(代码块)的二进制代码

  • 代码块执行完成之后清空堆栈局部变量

  • 通过授权文件限制加密后脚本的有效期和设备环境

除了对 Python 代码进行加密,PyArmor 还能设置 Python 程序的许可方式,比如设置程序的使用期限、设置允许运行的设备、扩展其他认证方式等:

我们直接使用 pip 命令即可对其进行安装:

  1. pip install pyarmor

然后,使用obfuscate选项就能对代码进行加密:

  1. pyarmor obfuscate foo.py

使用licenses选项即可生成许可文件:

  1. pyarmor licenses \

  2. --expired "2018-12-31" \

  3. --bind-disk "100304PBN2081SF3NJ5T" \

  4. --bind-mac "70:f1:a1:23:f0:94" \

  5. --bind-ipv4 "202.10.2.52" \

  6. r001

使用--with-license参数即可指定许可文件:

  1. pyarmor obfuscate --with-license licenses/r001/license.lic foo.py

使用pack选项即可打包脚本:

  1. pyarmor pack foo.py

需要注意的是,pyarmor 是一个共享软件,安装之后处于试用模式,在试用模式下有一些限制,如果购买的话,也不贵,298的价格还是很良心的。

四、最后

除了代码加密,Python 社区内的很多观点也认为,加密是徒劳的,任何加密都有可能被破解,有一个良好的法律约束条款可能是更好的选择,而且如今的商业模式倾向于靠服务收费而非产品收费。

你认为呢?欢迎留言交流!

············END············

留言送书

 

推荐理由:


(1)没有高深理论,每章都以实例为主,读者参考书中源码运行,就能得到与书中一样的结果。

(2)专注于Python数据分析与可视化操作中实际用到的技术。相比大而全的书籍资料,本书能让读者尽快上手,开始项目开发。

(3)书中的“新手问答”和“小试牛刀”栏目能让读者巩固知识,举一反三,学以致用。


推荐理由:
本书坚持以实例为主,理论为辅的路线,从 Python 基础、爬虫开发常用网络请求库,到爬虫框架使用和分布式爬虫设计,以及最后的数据存储、分析、实战训练等,覆盖了爬虫项目开发阶段的整个生命周期。


推荐理由:

1.从应用场景切入,围绕新基建的云计算、大数据及人工智能,介绍大数据的概念与特点及典型的产业应用场景,使读者了解大数据项目和机器学习开发过程,能设计不同场景下的项目架构,并做好不同业务下的数据建模。
2.Hadoop+spark+Python三合一,内容讲解重点分明,细节具体。本书解析了每个领域内的复杂逻辑和丰富内涵,且大多数章节都包含实训模块,让读者在学完该章节的知识后能够举一反三,学以致用。
3.本书先介绍了入门级的容器化工具Docker 与 Kubernetes,然后介绍大数据的常用组件,为读者的后续实践打好基础后,开始讲解机器学习库的相关用法;随着人工智能的快速发展,神经网络及相关的开发工具也愈发强大,因此引入了能解决更复杂问题,但操作又比较简单的深度学习框架 TensorF
low。掌握TensorFlow,既弥补了 Spark、scikit-learn 的不足,又能应对更困难的场景。



活动要求及规则


我们会在活动截止时从精选留言中选出 六位 粉丝赠送以上任意一本书籍,免费包邮赠送~(注:每人当月仅限一次中奖机会,经常留言的粉丝获奖几率更大哦!



活动截止时间: 2021 年 7 月 26 日 16:00 整





上期送书中奖名单


 书籍名单

恭喜以上六位中奖的童鞋,快加小编微信(Mayyy530),凭中奖截图来领奖!先到先选哦~


兑奖截止时间:7月24日17:00整



往期推荐

1、100个Python小技巧!!

2、七个Python必备的GUI库,这次一定要学会!

3、关于Python框架的那些事!(常用Python框架,区别,性能对比)

4、Python 里最强的Web框架,早就不是Django和Flask了

5、程序员的内卷,一行注释就能生成代码!GitHub原生AI代码生成工具Copilot上线


今天因为您的点赞和在看,让我元气满满!

浏览 62
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报