Python程序编译与反编译问题

 更新时间:2024年06月21日 09:27:29   作者:努力养猪致富的傻子  
这篇文章主要介绍了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. 开始打包

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

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

  • main.py, 主函数文件
  • batchSolution.py, 数据清洗文件
  • getCookiesBySelenium.py 获取授权cookies文件

# 在相关路径下,命令行输入 ,-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 文件。

  • 通过复现后的main.py 文件,即可找到相应import的自定义文件,以及程序导入的第三方包。
  • 注意要去所有的extracted结尾文件夹查找,笔者是在第二层内找到相关文件的。

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

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

三、总结

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

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

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

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

相关文章

  • Python实现自动清理电脑垃圾文件详解

    Python实现自动清理电脑垃圾文件详解

    经常存在在我们的电脑中的垃圾文件主要是指系统在运行过程中产生的tmp临时文件、日志文件、临时备份文件等。本文将利用Python实现自动清理这些垃圾文件,需要的可以参考一下
    2022-03-03
  • 如何基于Python实现电子邮件的发送

    如何基于Python实现电子邮件的发送

    这篇文章主要介绍了如何基于Python实现电子邮件的发送,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 基于Django的乐观锁与悲观锁解决订单并发问题详解

    基于Django的乐观锁与悲观锁解决订单并发问题详解

    这篇文章主要介绍了基于Django的乐观锁与悲观锁解决订单并发问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • Python实现远程调用MetaSploit的方法

    Python实现远程调用MetaSploit的方法

    这篇文章主要介绍了Python实现远程调用MetaSploit的方法,是很有借鉴价值的一个技巧,需要的朋友可以参考下
    2014-08-08
  • Python 将RGB图像转换为Pytho灰度图像的实例

    Python 将RGB图像转换为Pytho灰度图像的实例

    下面小编就为大家带来一篇Python 将RGB图像转换为Pytho灰度图像的实例。具有很好的参考价值。希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • Python使用enumerate获取迭代元素下标

    Python使用enumerate获取迭代元素下标

    这篇文章主要介绍了python使用enumerate获取迭代元素下标,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • Python如何把不同类型数据的json序列化

    Python如何把不同类型数据的json序列化

    这篇文章主要介绍了Python如何把不同类型数据的json序列化,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
    2021-04-04
  • 简单讲解Python中的字符串与字符串的输入输出

    简单讲解Python中的字符串与字符串的输入输出

    这篇文章主要介绍了Python中的字符串与字符串的输入输出,Python3.x版本中默认以Unicode为编码,省去了不少麻烦,需要的朋友可以参考下
    2016-03-03
  • python自动化测试用例全对偶组合与全覆盖组合比较

    python自动化测试用例全对偶组合与全覆盖组合比较

    这篇文章主要为大家介绍了python自动化测试用例全对偶组合与全覆盖组合比较,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Python爬虫实现vip电影下载的示例代码

    Python爬虫实现vip电影下载的示例代码

    这篇文章主要介绍了Python爬虫实现vip电影下载的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论