Windows端之Python3.9及以上高版本工程打包得到的exe逆向工程解包得到pyc文件进而得到py文件的流程实现

参考来自

【python逆向 pyc反编译】python逆向全版本通杀_python反编译pyc-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/zjjcxy_long/article/details/127346296Pyinstaller打包的exe之一键反编译py脚本与防反编译_pyinstaller防止反编译-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/as604049322/article/details/119834495

 首先需要准备一份来自GitHub上的代码仓库以进行后续操作。下载压缩包到本地。

one066/Exe-decompiling: python的pyinstaller打包的exe反编译为.py文件 (github.com)icon-default.png?t=N7T8https://github.com/one066/Exe-decompiling

下载好代码以后,在其中README.md同级目录中新建一个bucket文件夹。

bucket文件夹内存放的是exe项目。

具体操作流程如下,来自readme.md内容

# 对pyinstaller打包exe反编译

## 简述
> 主要使用别人的 `pyinstxtractor.py` 将exe还原为.pyc,然后还有将生成的stract文件中获取前8个
字节(magic)补充到目标文件,这里我用python解决了。  
> 然后使用 `uncompyle `做的将.pyc转到.py

## 使用
- `pip install uncompyle`
- 只需将exe放到 `bucket` (在当前目录创建 bucket 文件夹)文件夹下,运行`main.py`,即可得到python文件
- 中间过程生成的文件全部会自动删除

## 版本
- 可能编译python版本不同,用不了(测试的3.7可以用)

 

<

<think>好的,用户在使用pyinstxtractor.py提取PyInstaller打包exe文件时,遇到了无法生成与原文件相同的.py文件的问题。我需要分析可能的原因和解决方法。 首先,用户提到使用pyinstxtractor.py后结果不一致。可能的原因有很多。我需要回想PyInstaller打包的过程。PyInstaller会将Python代码编译成.pyc文件,然后打包exe。提取时,pyinstxtractor应该能解包出这些.pyc文件,但用户可能没有正确处理这些文件。 第一个可能的原因是字节码版本不匹配。不同Python版本生成的.pyc文件有不同的魔数(magic number)。如果用户用不同版本的Python来反编译,可能无法正确解析。比如,打包时用的是Python 3.8,而反编译用的是3.9,这时候uncompyle6可能不支持。这时候需要检查Python版本是否一致,或者使用对应的反编译工具。 第二个原因是PyInstaller的加密功能。如果打包时启用了加密,比如使用--key参数,那么提取出的.pyc文件是加密的,无法直接反编译。这时候需要先解密。pyinstxtractor-ng分支可能支持自动解密,但原版pyinstxtractor可能不行。用户可能需要升级到pyinstxtractor-ng,或者手动处理加密部分。 第三个可能性是文件头损坏或缺失。PyInstaller生成的.pyc文件可能没有完整的头部信息,导致反编译工具无法识别。这时候需要手动修复.pyc文件的头部,添加正确的魔数和时间戳。例如,用十六进制编辑器添加正确的魔数,或者使用工具如pycdc,它可能对头部要求不那么严格。 还有可能是反编译工具的限制。uncompyle6可能不支持某些Python特性或新版本的字节码。例如,Python 3.9+的新语法可能导致反编译失败。这时候尝试更新uncompyle6到最新版,或换用其他工具如decompyle3pycdc。 另外,用户可能在提取后没有正确使用反编译命令。比如,直接运行uncompyle6时路径错误,或者没有将提取的.pyc文件正确输出到指定文件。需要检查命令是否正确,比如使用python -m uncompyle6 file.pyc > output.py。 用户还可能遇到了代码混淆或优化选项。如果打包时使用了-OO选项,剥离了docstrings和断言语句,反编译后的代码会缺少这些信息,导致看起来不同。这种情况下,用户可能需要接受部分信息的丢失。 总结下来,解决方法包括:检查Python版本兼容性,处理加密文件,修复.pyc文件头,使用合适的反编译工具,正确执行命令,处理优化选项等。需要一步步引导用户排查这些可能性,并提供相应的解决步骤。同时,建议用户使用更新的工具如pyinstxtractor-ng,因为它可能更好地处理这些问题,特别是解密和字节码兼容性。</think>使用 $pyinstxtractor.py$ 提取 PyInstaller 打包文件时无法生成与原文件一致的 $\.py$ 文件,主要原因及解决方法如下: --- ### **一、核心原因分析** 1. **字节码版本不匹配** PyInstaller 生成的 $\.pyc$ 文件依赖特定 Python 版本[^2]。若提取时使用的 Python 环境版本与打包时不一致,反编译工具(如 $uncompyle6$)无法正确解析字节码。 *示例*:打包时使用 Python 3.8,但反编译时使用 Python 3.10。 2. **加密文件处理不足** PyInstaller 可通过 `--key` 参数加密字节码,若未启用自动解密功能(如未使用 $pyinstxtractor-ng$ 分支),提取的 $\.pyc$ 文件无法直接反编译[^1]。 3. **文件头损坏或缺失** PyInstaller 生成的 $\.pyc$ 文件可能缺少标准文件头(如魔数 Magic Number),导致反编译工具无法识别。 --- ### **二、解决方法** #### **步骤 1:验证文件是否加密** ```bash # 使用 pyinstxtractor-ng 提取(支持自动解密) python pyinstxtractor-ng.py your_executable.exe ``` 若输出文件包含 `encrypted` 标记,需手动解密或使用支持解密的工具。 #### **步骤 2:修复 .pyc 文件头** 1. 用十六进制编辑器打开提取的 $\.pyc$ 文件 2. 添加正确的魔数(Magic Number) *示例*:Python 3.8 魔数为 `0x55 0x0D 0x0D 0x0A`[^2]。 #### **步骤 3:使用兼容的反编译工具** ```bash # 指定 Python 版本(需与打包环境一致) python -m uncompyle6 --python-version 3.8 extracted_file.pyc > output.py ``` 若仍失败,可尝试替代工具如 $pycdc$: ```bash ./pycdc extracted_file.pyc > output.py ``` --- ### **三、常见问题对照表** | 现象 | 原因 | 解决方案 | |-----------------------|---------------------|------------------------------| | 反编译输出乱码 | 文件加密 | 使用 pyinstxtractor-ng[^1] | | 报错 "Unknown magic" | 字节码版本不匹配 | 修复文件头或切换 Python 版本 | | 缺失部分代码逻辑 | 优化级别过高(-OO) | 接受信息丢失或重新打包 | --- ### **四、操作示例** ```python # 提取文件结构 python pyinstxtractor-ng.exe your_app.exe # 修复文件头(示例:Python 3.8) with open(&#39;extracted.pyc&#39;, &#39;rb&#39;) as f: data = f.read() with open(&#39;fixed.pyc&#39;, &#39;wb&#39;) as f: f.write(b&#39;\x55\x0D\x0D\x0A&#39; + data[4:]) # 替换魔数 # 反编译 python -m uncompyle6 fixed.pyc > recovered.py ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光芒再现dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值