欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

python源码打包exe、exe反编译 有大用 有大大用

一、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文件相同目录

接下来,在该路径的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 number添加回去才能识别,magic number我们可以通过解压主目录下的struct文件中提取出来(一般是前16个字节,可以对比打包前的源文件),将struct文件体中的前16个字节提取出来,然后在添加到文件中,然后再执行uncompyle6反编译。

报错解决方法: 

我们先看看struct文件的内容,注意看第一行,这个就是缺的信息。第二行是以E3开始的。

接下来看hello文件的内容(不是pyc文件,所以得把pyc后缀去掉,然后,用vs打开,pycharm和记事本打开会乱码),可以看出是以E3为起始,相对struct文件少一第一行。 

接下来要做的就是把缺失的magic number添加到pyc文件中 。完成后,就可以用uncompyle6反编译了


文章知识点与官方知识档案匹配,可进一步学习相关知识
普通分类: