IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python打包加密工具:Pyinstaller和Nuitka -> 正文阅读

[Python知识库]python打包加密工具:Pyinstaller和Nuitka

python打包加密工具概述

参考链接
谈谈 Pyinstaller 的编译和反编译,如何保护你的代码
Linux之Python代码打包工具Nuitka使用说明
Nuitka-Python 打包 Linux(CentOS)
如何防止商用的深度学习模型源码泄露?
Python打包exe的王炸-Nuitka

01 pyinstaller

pyinstaller的不加密打包exe

pyinstaller的安装过程很简单,在命令行中就可以安装:

pip install pyinstaller

使用方式如下:

pyinstaller.exe -F yourcode.py

就可以输出一系列结果,其中dist文件夹下就是生成的exe文件。
这样的过程虽然简单,但是也可能被轻易反编译。下面简单介绍一下pyinstaller的反编译过程。
使用pyinstxtractor.py,可以将pyinstaller产生的exe文件解包成pyc文件。
该项目地址
接下来把该文件复制到exe同级目录下,使用下面的命令:

python pyinstxtractor.py xx.exe

运行后产生了xx.exe_extracted文件夹,要找到xxx.exe.mainfest文件,然后,看看xxx没有后缀名的文件,它就是pyc文件。此外目录下还有一个PYZ-00.pyz_extracted文件夹,里面都是引入的依赖库。
找到pyc文件后,就可以反编译,网上的工具和在线工具都有很多。不再赘述了。

pyinstaller的加密打包exe

在打包时加个参数key就可以加密,但是需要手动安装pycrypto包。

pip install pycrypto
pyinstaller.exe -F --key 123456 xxx.py

不过这个加密只针对依赖库。

02 Nuitka

Nuitka的打包类似于pyinstaller,但是程序运行性能更高,错误率更高,打包效率更低。可以酌情选择。

Nuitka安装命令

pip install nuitka

有说版本很重要,我安装的没有异常,版本是0.9.6

只封装一个python文件

python -m nuitka --lto=no yourpythonfile.py

会生成一个bin文件和其他文件,使用./yourpythonfile.bin就和python yourpythonfile.py的效果是一样的。

完整使用命令

nuitka --mingw64 --windows-disable-console --standalone --show-progress --show-memory --plugin-enable=qt-plugins --plugin-enable=pylint-warnings --recurse-all --recurse-not-to=numpy,jinja2,matplotlib,scipy,sqlalchemy,pandas,pygal,pyzbar,win32com --output-dir=out main.py

封装所有模块

python -m nuitka --follow-imports program.py

如果包含一些动态库,无法直接通过PYTHONPATH环境变量设置后直接导入的话,可以在封装过程中指定路径

python -m nuitka --follow-imports --include-plugin-directory=plugin_dir program.py

封装动态库

如果想将某些模块封装成动态库,需要使用--module指令

python -m nuitka --module some_module.py

运行后会生成some_module.so动态库,可以被其他程序导入使用。注意这个生成的动态库只能被相同版本的CPython导入。

封装包

封装整个包,同时一些模块使用动态库的方式,可以使用下面的命令

python -m nuitka --module some_package --include-package=some_package

如果要将代码分发到其他系统中,可以通过指定--standalone来生成一个文件夹,默认会导入所有模块,如果要排除一些模块,可以使用--nofollow-inport-to指令,但是在程序运行时可能会出现ImportError

python -m nuitka --standalone program.py

封装过程

封装的时候,.py文件首先是被转成了.c文件,然后被编译成了.o文件,最后合并成.bin可执行文件。
从bin到C是不可逆的,从C到Python也是不可逆的,代码相对来说很安全。
还有编译成动态链接库的方法,在这里不赘述了,主要是编译成.so文件,安全性也是高的。反汇编.so的时候,C代码也不是原来的代码了,无法推回Python。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:07:23  更:2022-09-04 01:07:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 9:49:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码