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

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

这篇文章主要介绍了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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python文件路径操作方法总结怎么写,python文件路径操作方法总结表,python文件路径操作方法总结
  • python文件路径操作方法总结怎么写,python文件路径操作方法总结图
  • python文件加密存储,python通过文件读写,复制图片
  • python文件打开的默认方式是只读,python以只读方式打开文本文件的参数
  • python文件读写,python将数据写入文件和从文件读取
  • 怎么把python文件变成可执行exe,python将py文件编译成exe文件
  • 打开python文件的两种方式,python文件是怎么打开
  • python文件操作write,python文件write函数的用法
  • linux如何编译python文件,linux上python编译器
  • python打不开文件怎么回事,做好的python文件直接打开怎么不能用
  • python中绝对路径,python文件相对路径怎么写
  • python对文件的操作方法有哪些,python文件的基本操作
  • python关于文件的题目,python文件概述
  • python文件可以直接运行吗,python直接运行
  • pycharm如何生成exe文件,pycharm运行python文件
  • 留言与评论(共有 条评论)
       
    验证码: