python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python程序编译与反编译

Python程序编译与反编译问题

作者:努力养猪致富的傻子

这篇文章主要介绍了Python程序编译与反编译问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

前言

Python 通过pyinstaller 打包编译成exe可执行文件 ,反编译exe文件。

提示:以下是本篇文章正文内容,下面案例可供参考

一、通过 pyinstaller 打包

虽然python是跨平台的一门开发语言,但是有时候在没安装python环境的计算机中仍然不能运行python程序。因此,就少不了编译打包的工序,其中用的最多且最简单的就是pyinstaller了

附上官网链接: pyinstaller文档

1.安装pyinstaller

# 通过pip 安装pyinstaller 第三方模块
pip install pyinstaller
或
# 网速不行的话,可以考虑国内源,这里以清华源为例
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 开始打包

初始代码,之前做数据采集的脚本。

主要用到三个自定义文件,

# 在相关路径下,命令行输入 ,-F 生成一个exe继承文件,其他相关参数作用,请去官方文档研究
pyinstaller -F main.py

之后在该路径下会生成相关文件夹,其中main.exe文件会存在dist文件夹中。

如果打包过程没有中断报错,该文件可以运行在无python环境的windows计算机中。如果有报错,谷歌搜索基本都可以解决,遇到过几次,循环迭代太大,多进程程序打包后只能单进程执行等问题。

二、反编译Pyinstaller 打包的exe程序

1. 通过 pyinstxtractor.py 把exe 转 pyc文件

pyinstxtractor.py 是一个用于反编译pyinstaller 所打包exe的文件工具,在开源社区可以找到下载链接。

通过命令行执行相关命令,完成反编译成pyc文件

# 通过命令行
python .\pyinstxtractor.py .\main.exe

其中要注意:建议用相同版本的python执行操作!官方也这样建议!

python3.7.6 打包的exe文件

笔者亲试,

失败!python3.6.8 运行命令行反编译,有个import 的自定义文件没生成成功。

失败!python3.8 运行命令行反编译,可以完美还原三个pyc文件,但是后续pyc转py还是有问题。

最后,还是在python3.7.6 运行命令行反编译,相对就一路绿灯!

2. 找到相关pyc文件

运行上面脚本命令后,会在相应目录生成很多相关文件,我们只关注extracted结尾文件夹即可,注意可能不止一层,笔者这边是两层,即extracted结尾文件夹里面又有一个extracted结尾文件夹。

extracted结尾文件夹,笔者推测,都是我们主程序中import 的各种文件,因此也会有很多官方的第三方库pyc文件。

因此只能从笔者习惯写的main.py 编译的main.pyc文件开始分析,哪些是我们自定义的文件。

3. 把相关pyc文件转py

通过在线 pyc 转 py 的一些工具网站,可以实现源码复现

http://tools.bugscaner.com/decompyle/

https://tool.lu/pyc/

当然也可以通过 uncompyle6 第三方库实现复现,笔者自定义文件较少,用了在线转换工具实现复现main.py 文件。

最后把相应的自定义文件拷贝下来,逐一复现即可。

源程序就成功还原了!当然程序内的中文编码可能会出现乱码,以及程序小部分复现问题,会代码的可以很快解决。

三、总结

在于版本问题,导致反编译中途试错多次

很难区分自定义文件pyc和官方文件pyc,因为笔者有个人习惯会设置main.py为入口程序才有思路

pyinstaller 打包的时候,没加密,对于一些隐私程序也是相对不够安全的。官方提供了加密参数,以及相关论坛也给了很多个性化加密方式,后续可以继续学习

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文