一、python3打包为exe文件
这里有个hello.py文件
step1:安装pyinstaller包
pip install pyinstaller
step2:在cmd中进入hello.py文件所在路径。可以直接在hello.py文件路径下直接进入cmd
step3:打包生成exe文件,使用如下命令,将其打包为单一exe(去掉-F则不是单一exe,-w是不生成window窗口)
pyinstaller -F -w hello.py
生成了build,dist 和Hello.spec三个文件
exe文件在dist文件夹中,双击即可运行
二、python3将exe文件进行反编译为源码
exe反编译工具:pyinstxtractor.py下载:https://sourceforge.net/projects/pyinstallerextractor/
将pyinstxtractor.py放到exe文件相同目录
遇到了Unknown magic number 227 in xxx.pyc这个问题
然后struct文件还没有magic number
后面才发现原来网上用的pyinstxtractor.py都是低版本才会生成不带.pyc后缀的源代码文件
这里给GitHub路径下最新版
https://github.com/extremecoders-re/pyinstxtractor
接下来,在该路径的cmd中执行下面命令
python pyinstxtractor.py hello.exe
成功解压(反编译),多了个Hello.exe_extracted
文件夹
进入Hello.exe_extracted
文件夹,有个hello文件,此为被解压出的pyc文件,需通过
接下来尝试对hello
文件反编译
首先安装反编译uncompyle6
包
pip install uncompyle6
需将hello
文件添加.pyc
后缀,不然不能编译。运行下面代码反编译hello.pyc
文件。在该路径的cmd中运行
uncompyle6 hello.pyc > hello.py
如果报错
Unknown magic number 227 in hello.pyc
报错原因:提示是Unknown magic number 227
,这个失败因为pyinstaller
工具打包的时候,会将代码文件的magic number
(python的版本及编译时间)给清除掉,所以反编译时候需要将magic numbe
r添加回去才能识别,magic number
我们可以通过解压主目录下的struct
文件中提取出来(一般是前16个字节,可以对比打包前的源文件),将struct
文件体中的前16个字节提取出来,然后在添加到文件中,然后再执行uncompyle6
反编译。
报错解决方法:
我们先看看struct
文件的内容,注意看第一行,这个就是缺的信息。第二行是以E3开始的。
接下来看hello
文件的内容(不是pyc文件,所以得把pyc后缀去掉,然后,用vs打开,pycharm和记事本打开会乱码),可以看出是以E3
为起始,相对struct
文件少一第一行。
接下来要做的就是把缺失的magic number
添加到pyc文件中 。完成后,就可以用uncompyle6
反编译了