python打包编译成pyd或者_Python代码加密混淆

本文探讨了Python代码加密的几种方法,包括py脚本编译成pyc、打包成exe以及利用Cython转为c文件。尽管这些方法在一定程度上提供保护,但仍有反编译风险。此外,还提到了源代码混淆来增加阅读难度。
摘要由CSDN通过智能技术生成

7931d2e9cac189532f58fd444f01d66c.png
我多想再见你 哪怕匆匆一眼就别离

  python作为一种解释型语言,源代码加密本身比较困难。但有时候我们在发布一款python产品时又必须考虑到代码的加密性,以避免源代码泄露。为此,我查阅了一些资料,研究了几种python代码加密的常见方式,在此记录一下。

源代码加密

(一)py脚本编译成pyc二进制文件

编译命令:

python -m py_compile file.py

pyc文件是一个二进制文件,但是可以被很轻松的被逆向,在线反编译工具:https://tool.lu/pyc/。当然也有针对这个问题的解决方案,解决方案是可以通过修改python源代码中的opcode,然后重新编译py代码,可以一定程度上防止被逆向,因为逆向者需要知道被修改的opcode才能还原出来。如果使用私有的Bytecode指令集,那么通常的Python反汇编器和反编译器无法工作在由你私有Python编译器产生的pyc文件上,也相当于保护了你的Python代码。但是这么做的代价是你的Python应用只能在你的私有Python解释器上运行。(实际在发布一款产品时,并不适用)

(二)py脚本打包成exe文件

exe文件针对windows平台使用,一般是使用打包程序(py2exe、PyInstaller等)打包成exe,这些工具用于将一个Python项目打包成单个可执行的文件,方便(在没有Python环境的机器上)使用。但通过压缩包可以方便地得到所有pyc文件或源文件,与C/C++编译生成的可执行文件有本质上的区别,基本上是零保护,所以需要将exe进行加壳操作。

(三)py脚本编译成c文件(cython)

用cython将核心代码py模块文件转化成.c文件,再用gcc编译成so(unix)文件,或者将其编译成pyd(windows)文件。

编译过程: 1、服务器安装依赖

pip install python
yum install python-devel gcc

2、编写setup.py文件,内容如下:

from distutils.core import setup
from Cython.Build import cythonize
setup(
    ext_modules = cythonize("test.py",language_level=2)
)

# 批量编译
setup(
    ext_modules = cythonize(["test.py","test2.py".......],language_level=2)
)

3、运行以下命令

python setup.py build_ext —inplace

会生成一个test.so,删除其余文件,直接引用test.so即可(跟引用py文件一样)

源代码混淆

除了加密以外,还可以对源代码进行混淆,增加源代码的阅读难度。这个有很多第三方库,我列举几个: https://pypi.org/project/pyminifier/ https://github.com/astrand/pyobfuscate http://pyob.oxyry.com/

pyminifier库用法:

pyminifier -O test.py >> test_py.py
pyminifier --replacement-length=1 --obfuscate-builtins --obfuscate-import-methods --obfuscate-variables test.py

文章微信公众号地址:

http://mp.weixin.qq.com/s?__biz=MzI5NTQ5MTAzMA==&mid=2247483962&idx=1&sn=d35a801b4d991b2940ab5882018cfa20&chksm=ec538683db240f952cf72125d91e95e3771f3e262d574de1dc10da01814974365f3759593144&token=1837956476&lang=zh_CN#rd​mp.weixin.qq.com

文章个人技术博客地址:

Python代码加密混淆​thief.one
628f30fad5ae6d576cc28769f47a6130.png

扫一扫关注我的公众号:

085673d8bd97d3709933e9bef4b09abb.png
Zprotect是新一代的软件加密保护系统,拥有多项革命性的创新技术,设计用来保护您的软件产品不被破解,减少由于盗版给您带来的经济损失!此外,Zprotect 拥有简单易用的许可控制系统,您无需更改任何代码,即可为您的软件添加注册机制。与传统软件保护系统相比,Zprotect更加注重对代码的处理,并且拥有良好的稳定性和兼容性,是您配置软件保护系统的最佳选择! Zprotect拥有简单易用、高效灵活的注册和授权管理系统: 一键试用技术. Zprotect 为您提供一键试用技术,您不必修改任何源代码,在短短几分钟之内就可以将您的完整版软件转换为“先试用后购买”的试用版软件,甚至还可以支持带硬件锁定的序列号注册。 内建注册和许可管理系统. Zprotect 内建灵活易用的注册和许可管理系统,您可以轻松创建具有时间限制、硬件锁定、水印信息的注册码。 动态算法生成引擎. 外壳所使用算法均动态生成,随机且唯一,让逆向算法变得困难和高成本。 时间限制注册密钥. 如果您需要限制注册版本的有效期,可以通过创建具有时间限制的注册密钥来实现。 硬件锁定(一机一码). 激活硬件锁定功能的注册密钥,只能在某一特定计算机上使用;您可以通过锁定用户计算机的硬件信息来控制注册码的传播,例如 CPU、硬盘序列号、网卡 MAC 地址等。 密钥黑名单. 如果您的用户泄漏了注册密钥,那么您就可以将该密钥添加进密钥黑名单,这样下一版本更新的时候您就可以锁定该密钥。 启动密码保护. 这种附加的保护可以有效防止软件未经授权的使用,必须输入正确的密码才可以运行程序。 试用次数、天数、日期和运行时间限制. 使用 Zprotect ,您可以轻松为您的应用程序添加试用次数、试用天数、试用日期和试运行时间等限制;这样您的客户就可以全功能评估您的软件产品,增大购买意向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值