在这里分享一些技巧和经验给大家。辛苦撰文分享,转载或引用请保留本文作者信息及文章链接。

作者的环境:

win7+python3.5(anaconda3)

理论上,win7及以上的系统和python任意版本均可。

一、基础脚本
首先我们构建一个简单的脚本,比如输出一串数字、文本之类,这里我们输出一串文字的同时计算一下3次方好了。

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 09:18:13 2018@author: Li Zeng hai
"""def test(num):print('num={n}, {n}^3={n2}'.format(n=num, n2=num**3))if __name__ == '__main__':while 1:try:num = input('提示:输入"q"退出程序。\n请输入一个数字:')if num.lower() == 'q':breaknum = float(num)print(num)except:print('输入的数字不正确!')continuetest(num)

把这段脚本保存为mylib.py,运行一下这个脚本:

可以看到,脚本正常运行了。

为了演示,我们把下面的脚本新建到main.py脚本文件中,并且从mylib中引入测试函数。


# -*- coding: utf-8 -*-from mylib import *while 1:try:num = input('提示:输入"q"退出程序。\n请输入一个数字:')if num.lower() == 'q':breaknum = float(num)print(num)except:print('输入的数字不正确!')continuetest(num)

二、使用PyInstaller打包为exe
使用如下命令,将其打包为单一exe(去掉-F则不是单一exe)

pyinstaller -F main.py
打包过程如下:

E:\t>pyinstaller -F main.py
505 INFO: PyInstaller: 3.3.1
505 INFO: Python: 3.5.5
505 INFO: Platform: Windows-7-6.1.7601-SP1
505 INFO: wrote E:\t\main.spec
505 INFO: UPX is not available.
505 INFO: Extending PYTHONPATH with paths
['E:\\t', 'E:\\t']
505 INFO: checking Analysis
505 INFO: Building Analysis because out00-Analysis.toc is non existent
505 INFO: Initializing module dependency graph...
521 INFO: Initializing module graph hooks...
521 INFO: Analyzing base_library.zip ...
6269 INFO: running Analysis out00-Analysis.toc
6269 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executablerequired by d:\anaconda3\python.exe
6956 INFO: Caching module hooks...
6956 INFO: Analyzing E:\t\main.py
6956 INFO: Loading module hooks...
6956 INFO: Loading module hook "hook-pydoc.py"...
6956 INFO: Loading module hook "hook-xml.py"...
7283 INFO: Loading module hook "hook-encodings.py"...
7533 INFO: Looking for ctypes DLLs
7549 INFO: Analyzing run-time hooks ...
7549 INFO: Looking for dynamic libraries
7720 INFO: Looking for eggs
7720 INFO: Using Python library d:\anaconda3\python35.dll
7720 INFO: Found binding redirects:
[]
7720 INFO: Warnings written to E:\t\build\main\warnmain.txt
7751 INFO: Graph cross-reference written to E:\t\build\main\xref-main.html
7767 INFO: checking PYZ
7767 INFO: Building PYZ because out00-PYZ.toc is non existent
7767 INFO: Building PYZ (ZlibArchive) E:\t\build\main\out00-PYZ.pyz
8345 INFO: Building PYZ (ZlibArchive) E:\t\build\main\out00-PYZ.pyz completed successfully.
8345 INFO: checking PKG
8345 INFO: Building PKG because out00-PKG.toc is non existent
8345 INFO: Building PKG (CArchive) out00-PKG.pkg
9954 INFO: Building PKG (CArchive) out00-PKG.pkg completed successfully.
9954 INFO: Bootloader d:\anaconda3\lib\site-packages\PyInstaller\bootloader\Windows-64bit\run.exe
9954 INFO: checking EXE
9954 INFO: Building EXE because out00-EXE.toc is non existent
9954 INFO: Building EXE from out00-EXE.toc
9954 INFO: Appending archive to EXE E:\t\dist\main.exe
9954 INFO: Building EXE from out00-EXE.toc completed successfully.E:\t>

最终在目录下生成build、disk文件夹。其中exe文件在disk中。运行正常。如下图:

三、反编译Pyinstaller打包的exe
这样的exe已经可以被迁移到别的电脑上使用了,如果是为了方便其他电脑使用,到这一步就已经结束了。但有时候,我们可能是把这个功能给很多人用,但如果不想开源或者被别人破解,到这一步是还不够的。

因为到这一步的exe是可以被别人反编译出源码的。

此处用到的工具:

exe反编译工具:pyinstxtractor.py:点击此处去下载

pyc反编译工具:Easy Python Decompiler 或者在线反编译pyc。

将pyinstxtractor.py放到exe文件相同目录,执行以下cmd命令:

python pyinstxtractor.py main.exe
如果成功执行,将在同目录下生成新的反编译文件夹——main.exe_extracted,如下图:

同时,我们可以在下图圈起来的路径下,找到当时我们exe引入的mylib模块,其为pyc格式。

pyc格式的文件,反编译起来就非常简单了。用前文提供的工具或者网上找个在线的分分钟反编译出来,我们看下反编译的结果:

#!/usr/bin/env python
# visit http://tool.lu/pyc/ for more information
'''
Created on Wed Aug 29 09:18:13 2018@author: Li Zeng hai
'''def test(num):print('num={n}, {n}^3={n2}'.format(n=num, n2=num ** 3))if __name__ == '__main__':while None:try:num = input('\xe6\x8f\x90\xe7\xa4\xba\xef\xbc\x9a\xe8\xbe\x93\xe5\x85\xa5"q"\xe9\x80\x80\xe5\x87\xba\xe7\xa8\x8b\xe5\xba\x8f\xe3\x80\x82\n\xe8\xaf\xb7\xe8\xbe\x93\xe5\x85\xa5\xe4\xb8\x80\xe4\xb8\xaa\xe6\x95\xb0\xe5\xad\x97\xef\xbc\x9a')if num.lower() == 'q':breaknum = float(num)print(num)except:NoneNoneNoneprint('\xe8\xbe\x93\xe5\x85\xa5\xe7\x9a\x84\xe6\x95\xb0\xe5\xad\x97\xe4\xb8\x8d\xe6\xad\xa3\xe7\xa1\xae\xef\xbc\x81')continue

可以看到,基本上完美的把源码反编译出来了。其中涉及到中文的地方,会因为编码问题有所改变。但是非中文部分,几乎一模一样。

就问你怕不怕!!!

四、将脚本编译为pyd以防止反编译
好怕怕 ,哈哈。

如何解决呢,可以考虑将模块py文件编译为动态链接库,这样破解难度将大大增加。其中,在python里,pyd格式即动态链接库。使用cython即可编译,如果是anaconda是自带,python有的可能不带cython,安装即可:

pip install Cython
我们在main.py所在的文件夹新建py文件,在此处我命名为build_pyd.py,其内容如下:

# -*- coding: utf-8 -*-
"""
Created on Wed Aug 29 13:33:20 2018@author: Li Zeng hai
"""from distutils.core import setup
from Cython.Build import cythonizesetup(name = 'any words.....',ext_modules = cythonize(["mylib.py",]),
)

然后执行以下cmd命令:

python build_pyd.py build_ext --inplace
运行过程及生成结果如下图,其中红框的pyd文件即编译好了。因为我是64位的系统和python,所以会生成amd64后缀,我们把这个删掉重命名为mylib.pyd即可。

注:当同时存在mylib.pyd和mylib.py时,引入优先级是pyd>py,所以不用移除py文件,默认引入时就是pyd。

此时,我们删除build、disk文件夹,重复步骤二,再次编译为exe即可。

注意:编译需要相关的VC环境,因为python3.5是基于 VS14版本的,所以我这里安装的也是。不安装是无法编译的。

可以验证一下:

再次反编译main.exe后,原来的路径E:\t\dist\main.exe_extracted\out00-PYZ.pyz_extracted之下,已经找不到mylib.pyc了。

因为他已经不是可以直接反编译出来的文件了。

那么他在哪呢,他是作为pyd存在于上层目录中了。如下图:

pyd的反编译难度是相当高的,至此,就大功告成了!

三.猜你喜欢

  1. Python 条件推导式
  2. Python 列表推导式
  3. Python 字典推导式
  4. Python 函数声明和调用
  5. Python 不定长参数 *argc/**kargcs
  6. Python 匿名函数 lambda
  7. Python return 逻辑判断表达式
  8. Python 字符串/列表/元组/字典之间的相互转换
  9. Python 局部变量和全局变量
  10. Python type 函数和 isinstance 函数区别
  11. Python is 和 == 区别
  12. Python 可变数据类型和不可变数据类型
  13. Python 浅拷贝和深拷贝
  14. Python 文件读写操作
  15. Python 异常处理
  16. Python 模块 import
  17. Python __name__ == ‘__main__’详细解释
  18. Python 线程创建和传参
  19. Python 线程互斥锁 Lock
  20. Python 线程时间 Event
  21. Python 线程条件变量 Condition
  22. Python 线程定时器 Timer
  23. Python 线程信号量 Semaphore
  24. Python 线程障碍对象 Barrier
  25. Python 线程队列 Queue – FIFO
  26. Python 线程队列 LifoQueue – LIFO
  27. Python 线程优先队列 PriorityQueue

未经允许不得转载:猿说编程 » Python 线程池 ThreadPoolExecutor(二)

PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译相关推荐

  1. python3.7以上使用pyinstaller将py文件打包为exe ,解决安装后显示‘pyinstaller‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的错误

    python3.7以上使用pyinstaller将py文件打包为exe ,解决安装后显示'pyinstaller' 不是内部或外部命令,也不是可运行的程序或批处理文件的错误 1.使用pip安装pyin ...

  2. mac python3打包成窗体程序_使用pyinstaller将python程序打包成exe/苹果软件的方法与异常解决 - pytorch中文网...

    一.安装pyinstaller 通过清华镜像安装比较快 # 二者选其一执行,第二条快 pip3 installer pyinstaller # 清华镜像安装 # pip3 install -i htt ...

  3. 将Python文件打包成exe文件(超详细)

    首先,我们为什么要把Python文件打包成exe文件? 因为,Python文件需要Python IDE打开 而exe,就是一个程序,双击就开了! 岂不是妙哉? 基础准备 首先,打开终端,我们要下载打包 ...

  4. 如何将python文件打包成exe格式

    文章目录 如何将python文件打包成exe格式 1.安装pyinstaller image-20211217220823007 2.进入python文件的存储位置 3.生成exe文件 4.pyins ...

  5. Pyinstaller将Python程序打包成EXE(多种模式的打包)

    Pyinstaller将Python程序打包成EXE 文章目录 Pyinstaller将Python程序打包成EXE 安装 安装 pip install pyinstaller 博文已经迁移到个人主页 ...

  6. bilibili缓存文件在哪里_简单使用Pyinstaller将Python文件打包为可执行性exe

    本文只讲如何通过pyinstaller将我们的Python代码打包为exe文件,关于其他的打包工具请自行查找. 1.在当前代码环境下安装Pyinstaller pip install pyinstal ...

  7. python打包成exe其他电脑运行不了_将python文件打包成exe程序,复制到每台电脑都可以运行-exe是什么文件...

    将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 在Windows ...

  8. python打包成exe其他电脑运行不了_将python文件打包成exe程序,复制到每台电脑都可以运行...

    将Python程序打包为exe文件,需要使用到的工具是pyinstaller pyinstaller是一个多平台的Python程序打包为exe的免费工具 安装pyinstaller: 在Windows ...

  9. python随笔:用pyinstaller 将python代码打包成exe执行文件

    1.前言 经过几个星期的努力,终于完成了一个PyQt5项目.但日常使用或给别人使用代码模式非常不便,所以就产生了把代码打包成exe执行文件的想法. 2.pyinstaller 安装 在命令行执行以下语 ...

最新文章

  1. 编程猫python讲师面试_【编程猫教师面试】在BOSS问了我很多,问我为什么选择编程猫,问我了解编程猫吗?-看准网...
  2. 应用SilverLight 2.0 BETA 2的 支持回调的在线聊天室(二)
  3. Java创建MySQL句柄_MySQL创建用户(CREATE USER)
  4. struts-config.xml 中 action 与 forward 的重要属性
  5. C# 对接微信支付时生成符合 RFC3339 标准的日期时间字符串
  6. 线性反馈移位寄存器(LFSR)-非线性反馈移位寄存器的verilog实现(产生伪随机数)...
  7. C99标准新特性概览
  8. APP 自动化框架设计思路分享
  9. yyds,35岁自学编程,入职微软
  10. 《富爸爸,穷爸爸》书摘一
  11. 031:vue+openlayers加载GPX数据(代码示例)
  12. 前端开发也要知道的 DNS
  13. ROS树莓派与电脑的主从机配置
  14. 音视频开发之旅(36) -FFmpeg +OpenSL ES实现音频解码和播放
  15. Shader小技巧-翻转uv
  16. Cardano(ADA), EOS, RChain(RHOC), Aeternity(AE) 都是极其好的币
  17. jack server 常见错误解决方法
  18. java虚拟机线程调优与底层原理分析_啃碎并发(七):深入分析Synchronized原理...
  19. 2022杭电多校5题解报告(同步自语雀)
  20. Shapley Value(****夏普利值,沙普利值****)

热门文章

  1. 看看你的眼力了,是眼睛欺骗大脑,还是大脑控制眼睛~~
  2. 2021下半年软考网络工程师上午真题(一)
  3. 嗅探器模式和数据包记录模式
  4. 如何通过注册表删除电脑右键菜单里多余的选项
  5. java加权随机数抽奖_java版根据权重抽奖算法
  6. Java美女选妃案例
  7. 瑞士证券交易所使用新的DLT平台实现证券代币化
  8. 通用人工智能(AGI):人工智能的下一个阶段
  9. 注册表导入失败 只能导入二进位注册文件
  10. MyBatis Plus实现动态字段排序