这篇文章主要介绍了PyInstaller将计算机编程语言文件打包为可执行程序的扩展名后如何反编译(破解源码)以及防止反编译,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
环境:
win7 python3.5(anaconda3)
理论上,win7及以上的系统和大蟒任意版本均可。
一、基础脚本
首先我们构建一个简单的脚本,比如输出一串数字、文本之类,这里我们输出一串文字的同时计算一下3次方好了。
# -*-编码:utf-8 -*-
'''
创建于2018年8月29日星期三09:18:13
@作者:海
'''
定义测试(数量):
打印('数字={n},{n}^3={n2}'.格式(n=数量,n2=数量**3))
if __name__=='__main__ ':
而1:
尝试:
数量=输入('提示:输入问退出程序% 22 \ n请输入一个数字:')
if num.lower()=='q ':
破裂
num=float(数字)
打印(数字)
除了:
打印('输入的数字不正确!')
继续
测试(数量)
把这段脚本保存为mylib.py运行一下这个脚本:
可以看到,脚本正常运行了。
为了演示,我们把下面的脚本新建到main.py脚本文件中,并且从米利布中引入测试函数。
# -*-编码:utf-8 -*-
从米利布导入*
而1:
尝试:
数量=输入('提示:输入问退出程序% 22 \ n请输入一个数字:')
if num.lower()=='q ':
破裂
num=float(数字)
打印(数字)
除了:
打印('输入的数字不正确!')
继续
测试(数量)
二、使用PyInstaller打包为exe
使用如下命令,将其打包为单一exe(去掉-F则不是单一exe)
pyinstaller -F main.py
打包过程如下:
E:\tpyinstaller -F main.py
505信息:PyInstaller: 3.3.1
505信息:Python: 3.5.5
505信息:平台:Windows 7-6 . 1 . 7601-SP1
505信息:写入了E:\t\main.spec
505信息:UPX不可用。
505信息:用路径扩展PYTHONPATH
['E:\\t ',' E:\\t']
505信息:检查分析
505信息:正在构建分析,因为out00-Analysis.toc不存在
505信息:初始化模块依赖图.
521信息:初始化模块图形挂钩.
521信息:分析base_library.zip.
6269信息:运行分析输出00-Analysis.toc
6269信息:添加微软.最终可执行文件的依赖程序集的控件
需要d:\anaconda3\python.exe
6956信息:缓存模块挂钩.
6956信息:正在分析E:\t\main.py
6956信息:加载模块挂钩.
6956信息:加载模块挂钩" hook-pydoc.py ".
6956信息:加载模块挂钩" hook-xml.py ".
7283信息:加载模块挂钩" hook-encodings.py ".
7533信息:寻找ctypes DLLs
7549信息:分析运行时挂钩.
7549信息:寻找动态库
7720信息:寻找鸡蛋
7720信息:使用计算机编程语言库d:\anaconda3\python35.dll
7720信息:找到绑定重定向:
[]
7720信息:警告被写入E:\t\build\main\warnmain.txt
7751信息:图形交叉引用写入E:\t\build\main\xref-main.html
7767信息:检查PYZ
7767信息:正在构建PYZ,因为out00-PYZ.toc不存在
7767信息:构建PYZ(ZlibArchive)E:\ t \ build \ main \ out 00-PYZPYZ
8345信息:构建PYZ(ZlibArchive)E:\ t \ build \ main \ out 00-PYZPYZ成功完成。
8345信息:检查包装
8345信息:正在构建PKG,因为out 00-数据包.目录不存在
8345信息:建筑PKG(档案)out00-PKG.pkg
9954信息:建立PKG(档案)输出00-PKG.pkg成功完成。
9954信息:boot loader d:\ anaconda 3 \ lib \ site-packages \ py installer \ boot loader \ Windows-64 bit \ run。可执行程序的扩展名
9954信息:正在检查可执行程序的扩展名
9954信息:正在构建EXE,因为out00-EXE.toc不存在
9954信息:从out00-EXE.toc构建可执行程序的扩展名
9954信息:将档案附加到E:\t\dist\main.exe
9954信息:从out00-EXE.toc生成可执行程序的扩展名已成功完成。
E:\t
最终在目录下生成构建、磁盘文件夹。其中可执行程序的扩展名文件在唱片中。运行正常。如下图:
三、反编译Pyinstaller打包的exe
该exe文件已经可以迁移到其他计算机上使用。如果是为了方便其他电脑,这一步就结束了。但是有时候,我们可能把这个功能给了很多人,但是如果不想开源或者不想被别人破解,这一步是不够的。
因为这个阶段的exe是可以被别人反编译的。
此处使用的工具:
Exe反编译工具:pyinstxtractor.py:点击这里下载。
Pyc反编译器:简单的Python反编译器或在线反编译器。
将pyinstxtractor.py放在exe文件的同一个目录中,并执行以下cmd命令:
python pyinstxtractor . py main.exe
如果成功执行,将在同一个目录下生成一个新的反编译文件夹——main.exe_extracted,如下图所示:
同时我们可以在下图圈出来的路径下找到我们的exe当时引入的mylib模块,是pyc格式的。
Pyc格式文件,反编译很简单。使用前一篇文章中提供的工具或者找一个在线备忘录来反编译它。让我们看看反编译的结果:
#!/usr/bin/env python
#访问http://tool.lu/pyc/了解更多信息
'''
创建于2018年8月29日星期三09:18:13
@作者:海
'''
定义测试(数量):
打印('数字={n},{n}^3={n2}'.格式(n=数量,n2=数量** 3))
if __name__=='__main__ ':
而无:
尝试:
num=输入(
\ 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
if num.lower()=='q ':
破裂
num=float(数字)
打印(数字)
除了:
没有人
没有人
没有人
打印(
' 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 ')
继续
如你所见,源代码基本上被完美反编译了。涉及中文的地方,会因为编码问题而更改。但是非中文部分几乎是一样的。
就问你怕不怕!
四、将脚本编译为pyd以防止反编译
我很害怕,哈哈。
怎么解决?可以考虑将模块py文件编译成动态链接库,这样会大大增加破解难度。其中,在python中,pyd格式是动态链接库。你可以用cython编译它。如果anaconda带有它,一些python可能没有cython。只需安装:
pip安装Cython
我们在main.py所在的文件夹中创建一个新的py文件。这里我将其命名为build_pyd.py,其内容如下:
# -*-编码:utf-8 -*-
'''
创建于2018年8月29日星期三13:33:20
@作者:海
'''
从distutils.core导入设置
来自Cython。建立进口渠道
设置(
name='任何单词. ',
ext _ modules=cytonize([' mylib . py ',]
),
)
然后执行以下cmd命令:
python build_pyd.py build_ext -就地
运行过程和生成的结果如下图所示,其中编译了带红框的pyd文件。因为我是64位系统和python,所以会生成amd64后缀。让我们删除它,并将其重命名为mylib.pyd
注意:当mylib.pyd和mylib.py同时存在时,导入优先级为pydpy,不需要移除py文件。默认情况下,导入时为pyd。
此时,我们删除build和disk文件夹,重复步骤2,并再次将它们编译成exe。
注意:编译需要相关的VC环境。因为python3.5是基于VS14版本的,所以我这里安装的也是。不行,安装不能编译。
你可以验证一下:
再次反编译main.exe后,在原路径e:\ t \ dist \ main.exe _ extracted \ out 00-pyz . pyz _ extracted下找不到mylib.pyc。
因为它不再是一个可以直接反编译的文件。
他在哪里?他作为pyd存在于上层目录中。如下图:
pyd的反编译难度挺高的,到目前为止,搞定了!
关于PyInstaller将Python文件打包成exe后如何反编译(破解源代码)和防止反编译的文章到此为止。更多打包成exe内容的相关PyInstaller Python文件,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。