python exe文件解包方法总结

 更新时间:2025年03月18日 09:18:06   作者:大牛软件开发  
这篇文章总结了如何从Python EXE文件中提取和反编译Python脚本(.pyc文件)的过程,包括使用pyinstxtractor.py或archive_viewer.py进行解包,感兴趣的小伙伴跟着小编一起来看看吧

注:

除特别说明外,下面使用的python版本均为3.8.6

一、步骤

1. exe → pyc

方法1:pyinstxtractor.py

执行python pyinstxtractor.py <待解包文件名> ,如果成功,即可获得<待解包文件名>_extracted 文件夹。

注:执行时会提示python版本问题,想要正常解包必须使用正确的python版本。

方法2:archive_viewer.py

执行python archive_viewer.py <待解包文件名> ,会打印EXE文件中包含的所有文件信息

使用x <文件名>命令将想要提取出的文件提取出来,q 命令退出。

两者的区别

方法1可以一次性提取出所有文件,方法2只能逐个提取文件。但是在个人使用时,方法2的成功率相对较高。可以先尝试用方法1,失败后用方法2。

2. pyc → py

步骤1获得的文件是pyc文件,还需要进一步反编译获得py文件。

注:我遇到过直接获得py文件的情况,所以在反编译之前可以先查看一下是不是已经成功了。

2.1 pyc文件恢复

注:最新版pyinstxtractor.py支持自动恢复pyc,但是经实验不能保证准确性。或者说需要使用准确的python版本才行。

在将python文件打包成exe文件的过程中,会抹去pyc文件前面的部分信息,所以在反编译之前需要检查并添加上这部分信息。

抹去的信息内容可以从struct文件中获取:

struct文件:

struct文件

pyc文件:

pyc文件

Q1:需要添加多少字节?

多个参考文章中提到的添加字节数都不一致,这应该与使用的python版本有关。但是在已知的几个例子中,可以看出pyc文件开头的几个字节与struct文件中的字节是一样的。比如说上图中pyc文件是以E3 00 00 00开头,而这部分字节就和struct文件的第二行起始字节相同。

因此在此例中,需要复制添加的字节就是struct文件中第一行的16个字节

Q2:添加的方法是什么?

在010editor中,选择Edit→Insert/Overwrite→InsertBytesStart Address填0,Size填16。

然后将字节复制进去即可。

2.2 反编译

反编译工具

  • Easy Python Decompiler
    这是一个GUI界面的可执行文件,下载下来直接用就可以,但是并不是每次都能成功,有些magic value不能识别。
  • uncompyle6
    该工具需要使用pip安装,使用脚本执行。成功率较高。

反编译提示magic value有问题怎么办?

在上面我们添加的16个字节中,前四个字节表示的就是magic value,其中前两个字节表示的是python的版本号,一般来说magic value的问题就是版本号有问题,编译工具没有识别出来该版本号表示的python版本。

如果使用的是Easy Python Decompiler,那么就可以直接转用uncompyle6了。

如果用的已经是uncompyle6,那么需要先看一下它可以识别的版本号都有哪些,这个信息可以在xdis包的magics.py文件中找到,具体方法如下:

  • 命令行输入pip install xdis,查看其安装位置

图片描述

  • 到该目录下,打开xdis文件夹下的magics.py文件
  • 确定需要识别的版本号
  • 就是之前添加的16个字节的前两个字节,此例中为0D42,需要转换为十进制,就是3394
  • 查看magics.py中是否有该版本号。

我这里一开始没有发现这个版本号

图片描述

我的解决方法

我在谷歌上搜索了int2magic(3394),找到了这个Github项目

下载下来,按照介绍进行安装。

在执行pip install -e .的时候,提示我xdisuncompyle6的版本不匹配,于是卸载了uncompyle6,又重新安装了一次。

目前的版本:xdis 5.0.5 uncompyle6 3.7.4

查看该版本xdismagics.py文件:

图片描述

可以看到已经有3394了。

反编译:

图片描述

成功!

注:pyc文件一定要有后缀名pyc,不然会报错

二、PYZ文件的加密问题

有些时候在步骤1 exe→pyc的过程中,会出现PYZ中的文件无法正常提取(archive_viewer.py),或者提取出来后显示encrypted(pyinstxtractor.py)的问题。

这个问题可以使用参考文章2和3中的方法解决:

PYZ文件加密的密钥保存在pyimod00_crypto_key文件中,该文件也是一个pyc文件,可以使用上面介绍的方法进行反编译,然后就可以获得密钥:

图片描述

之后的解密脚本有三个可供选择,均在参考文章3中,根据pyinstaller的版本不同选择不同的脚本,使用时需要替换其中的key、header以及待解密文件名和目标文件名,执行后即可获得解密后的pyc文件,再使用uncompyle6反编译即可。

注:这三个脚本中,第一个脚本适用于PyInstaller<4.0,使用python2执行;第二个和第三个脚本适用于PyInstaller≥4.0,使用python3执行。

图片描述

以上就是python exe文件解包方法总结的详细内容,更多关于python exe文件解包的资料请关注脚本之家其它相关文章!

相关文章

  • Python 的 f-string 可以连接字符串与数字的原因解析

    Python 的 f-string 可以连接字符串与数字的原因解析

    这篇文章主要介绍了Python 的 f-string 可以连接字符串与数字的原因解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python基于pyopencv人脸识别并绘制GUI界面

    Python基于pyopencv人脸识别并绘制GUI界面

    本文详细讲解了Python基于pyopencv人脸识别并绘制GUI界面,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • Python DES加密实现原理及实例解析

    Python DES加密实现原理及实例解析

    这篇文章主要介绍了Python DES加密实现原理及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • PyCharm刷新项目(文件)目录的实现

    PyCharm刷新项目(文件)目录的实现

    今天小编就为大家分享一篇PyCharm刷新项目(文件)目录的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 一文带你掌握Python中文件I/O的使用技巧

    一文带你掌握Python中文件I/O的使用技巧

    Python提供了强大而灵活的文件I/O(输入/输出)工具,能够读取、写入和处理各种文件类型,本文将详细介绍Python文件I/O的使用技巧,需要的可以参考一下
    2023-12-12
  • Python中文档生成利器Sphinx的入门指南

    Python中文档生成利器Sphinx的入门指南

    在Python开发过程中,良好的文档是项目成功的关键之一,Sphinx是一个强大的文档生成工具,本文将为大家详细介绍Sphinx的具体使用,需要的可以参考下
    2025-01-01
  • Python文档生成工具pydoc使用介绍

    Python文档生成工具pydoc使用介绍

    这篇文章主要介绍了Python文档生成工具pydoc使用介绍,本文讲解了基本用法、获取帮助的方法、生成的文档效果图等内容,需要的朋友可以参考下
    2015-06-06
  • python3 http提交json参数并获取返回值的方法

    python3 http提交json参数并获取返回值的方法

    今天小编就为大家分享一篇python3 http提交json参数并获取返回值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • PySpark与GraphFrames的安装与使用环境搭建过程

    PySpark与GraphFrames的安装与使用环境搭建过程

    这篇文章主要介绍了PySpark与GraphFrames的安装与使用教程,本文通过图文并茂实例代码相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • pandas 数据类型转换的实现

    pandas 数据类型转换的实现

    这篇文章主要介绍了pandas 数据类型转换的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论