python写的程序怎样加密
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python写的程序怎样加密相关的知识,希望对你有一定的参考价值。
对 Python 加密时可能会有两种形式,一种是对Python转成的exe进行保护,另一种是直接对.py或者.pyc文件进行保护,下面将列举两种形式的保护流程。
1、 对 python转exe加壳
下载最新版Virbox Protector加壳工具,使用加壳工具直接对demo.exe进行加壳操作
2、对.py/.pyc加密
第一步,使用加壳工具对 python 安装目录下的 python.exe 进行加壳,将 python.exe 拖入到加壳工具 VirboxProtector 中,配置后直接点击加壳。
第二步,对.py/.pyc 进行加密,使用 DSProtector 对.py/.pyc 进行保护。
安全技术:
l 虚拟机外壳:精锐5的外壳保护工具,创新性的引入了预分析和自动优化引擎,有效的解决了虚拟化保护代码时的安全性和性能平衡问题。
l 碎片代码执行:利用自身成熟的外壳中的代码提取技术,抽取大量、大段代码,加密混淆后在安全环境中执行,最大程度上减少加密锁底层技术和功能的依赖,同时大量大段地移植又保证了更高的安全性。
l Virbox加密编译引擎:集编译、混淆等安全功能于一身,由于在编译阶段介入,可优化空间是普遍虚拟化技术无法比拟的,对代码、变量的混淆程度也有了根本的提升。
l 反黑引擎:内置R0级核心态反黑引擎,基于黑客行为特征 的(反黑数据库)反制手段。精准打击调试、注入、内存修改等黑客行为,由被动挨打到主动防护。
加密效果:
加密之前
以pyinstall 的打包方式为例,使用pyinstxtractor.py文件对log_322.exe进行反编译,执行后会生成log_322.exe_extracted文件夹,文件夹内会生成pyc文件。
成功之后会在同目录下生成一个文件夹
使用010 Editor添加几个字节,重命名为pyc文件
注【此处和python的版本有关,Python27的可以直接解压为pyc文件,Python34还需要添加几个字节】
然后使用EasyPython Decompiler 工具反编译pyc
成功之后通目录下会生成dis文件,生成出的dis文件可以用文本编辑器打开,看到源码
反编译后的log_322.exe的源码
加密之后:
【注:不同的打包方式原理不同,源码存放的位置也不同,所以需要保护的具体模块也是不同的】
加密之后再尝试解压log322.exe失败,已经无法进行反编译,使用常规反编译工具也是无法进行分析的。
参考技术A 你这题目最起码要知道key才能解密出来plaintext,不然有很多种组合。加密 Python 源代码 ,最后一种才是无敌的
点击 机器学习算法与Python学习 ,选择加星标
精彩内容不迷路
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 文件,例如:
from distutils.core import setupfromCython.Buildimport cythonizesetup(ext_modules = cythonize(["zmister.py"]))
这样,就可以把 Python 文件编译为特定操作系统平台的动态链接库文件了。
同时,有一个第三方库 jmpy3 对上述流程进行了优化,支持单个文件和整个项目进行编译,使用起来更加友好:
需要注意的是,使用这种方式加密后的文件需要使用生成时的 Python 版本,这也算是一个小缺点。但是这个缺点可以通过打包为 Docker 镜像的方式解决掉。
# 三、通用加密
除了上述两种方案,还有一个工具——PyArmor 能够实现 Python 代码的加密。
PyArmor 是一个用于加密和保护 Python 脚本的工具。它能够在运行时刻保护 Python脚本的二进制代码不被泄露,设置加密后 Python 源代码的有效期限,绑 定加密后的Python源代码到硬盘、网卡等硬件设备。它的保障机制主要包括:
加密编译后的代码块,保护模块中的字符串和常量
在脚本运行时候动态加密和解密每一个函数(代码块)的二进制代码
代码块执行完成之后清空堆栈局部变量
通过授权文件限制加密后脚本的有效期和设备环境
除了对 Python 代码进行加密,PyArmor 还能设置 Python 程序的许可方式,比如设置程序的使用期限、设置允许运行的设备、扩展其他认证方式等:
我们直接使用 pip 命令即可对其进行安装:
pip install pyarmor
然后,使用obfuscate
选项就能对代码进行加密:
pyarmor obfuscate foo.py
使用licenses
选项即可生成许可文件:
pyarmor licenses --expired "2018-12-31" --bind-disk "100304PBN2081SF3NJ5T" --bind-mac "70:f1:a1:23:f0:94" --bind-ipv4 "202.10.2.52" r001
使用--with-license
参数即可指定许可文件:
pyarmor obfuscate --with-license licenses/r001/license.lic foo.py
使用pack
选项即可打包脚本:
pyarmor pack foo.py
需要注意的是,pyarmor 是一个共享软件,安装之后处于试用模式,在试用模式下有一些限制,如果购买的话,也不贵,298的价格还是很良心的。
# 四、最后
除了代码加密,Python 社区内的很多观点也认为,加密是徒劳的,任何加密都有可能被破解,有一个良好的法律约束条款可能是更好的选择,而且如今的商业模式倾向于靠服务收费而非产品收费。
如果对你有帮助。
请不吝点赞,点在看,谢谢
以上是关于python写的程序怎样加密的主要内容,如果未能解决你的问题,请参考以下文章