是否可以将编译后的.pyc 文件反编译为.py 文件?

2025-01-16 08:37:00
admin
原创
133
摘要:问题描述:是否可以从.py 文件生成的.pyc 文件中获取一些信息?解决方案 1:简介Python 反编译是一个难题,尤其是对于最近的 3.x 版本。这就是为什么有各种各样的工具,但都有局限性和错误。不过,Python 2.7 和更早的 3.x 版本应该可以很好地工作,即使是部分反编译也比丢失所有内容要好。值...

问题描述:

是否可以从.py 文件生成的.pyc 文件中获取一些信息?


解决方案 1:

简介

Python 反编译是一个难题,尤其是对于最近的 3.x 版本。这就是为什么有各种各样的工具,但都有局限性和错误。

不过,Python 2.7 和更早的 3.x 版本应该可以很好地工作,即使是部分反编译也比丢失所有内容要好。

值得尝试的工具

Uncompyle6适用于 Python 3.8 及以下版本,但有一些错误,并且适用于 2.7 版本。

  • 建议从此选项开始,因为它旨在统一早期的分支并专注于自动化单元测试。

  • uncompyle6 GitHub 页面有更多详细信息。

  • 最适合 3.x 早期版本,不是 3.7+ 的最佳选择

如果这不起作用,最好接下来尝试这个 - 特别是对于 Python 3.7+:

  • decompyle3是 Uncompyle6 的一个分支,来自同一作者,可以更好地适用于 3.7 和 3.8。

  • 注意:decompyle3包来自rocky/decompile3repo - 拼写不同,但含义相同

如果您仍然有问题,请检查uncompyle6decompyle3README,它们链接到可能更适合您的代码的其他工具。

限制

您可以取回包含变量名和文档字符串但不包含注释的代码。

某些代码可能无法成功反编译,尤其是使用不寻常的控制流或较新的 Python 3.x 版本时。这是由于这些反编译器中存在错误,Python 会随着时间的推移更改其字节码。

支持最新的 Python 版本

都不支持 Python 3.9 或更高版本,uncompyle6并且decompyle3对 3.7 或更高版本的支持受到限制。

Python 中的新优化使反编译变得更加困难,并且这两个项目都缺乏代码贡献和赞助。

您可以采取以下措施来提供帮助:

  • 在检查类似问题后,针对这些存在错误的项目提出 GitHub 问题 - 两者都在一系列 Python 版本上运行单元测试套件。

  • 赞助这些项目,特别是如果它们对你有帮助的话

防止将来丢失代码

频繁的 Git 提交或备份显然是一个好主意。

某些编辑器/IDE 具有帮助恢复已删除文件的功能,即使未提交到 Git。请参阅此答案,了解可能适用于您的编辑器或 IDE 的一些指针,包括 VS Code 和 JetBrains IDE,例如 PyCharm、GoLand 和 IntelliJ。

解决方案 2:

您可以尝试Easy Python Decompiler。它基于 Decompyle++ 和 Uncompyle2。它支持反编译 Python 版本 1.0-3.3

注:我是上述工具的作者。

解决方案 3:

是的

我使用uncompyle6反编译(甚至支持最新的Python 3.8.0):

uncompyle6 utils.cpython-38.pyc > utils.py

原始 Python 与反编译的 Python 比较如下:

pyc 反编译工具

所以你可以看到,几乎一样,反编译效果非常好

解决方案 4:

是的,您可以通过pypiunpyclib获得它。

$ pip install unpyclib

然后你就可以反编译你的 .pyc 文件

$ python -m unpyclib.application -Dq path/to/file.pyc

解决方案 5:

Decompyle++(pycdc)是唯一对我有用的: https: //github.com/zrax/pycdc

在Decompile Python 2.7 .pyc中建议

解决方案 6:

我已经研究了几个小时,最后使用 Decompyle++ 找到了解决方案:

  • 访问https://cmake.org/download/并安装 CMake。

  • 访问https://github.com/zrax/pycdc并获取此 repo 的副本:pycdc-master

  • 添加C:Program FilesCMakein到系统环境变量的 PATH 下。

我建议将您的pycdc-master文件夹放入另一个文件夹,例如anotherFolder

现在您可以在命令行中运行这些命令:

  • cd anotherFolder进入pycdc-master其中包含的文件夹。

  • cmake pycdc-master

  • cd ../转到上一个目录,

  • 然后:cmake --build anotherFolder

pycdc.exe将会在anotherFolderDebug

在控制台中执行类似操作pycdc.exe onlyhopeofgettingmycodeback.pyc,它会打印出源代码。我有 Python 3.9.6 源代码,其他都不起作用。

解决方案 7:

是的,有可能。

有一个完美的开源 Python(.PYC)反编译器,叫做 Decompyle++ https://github.com/zrax/pycdc/

Decompyle++ 旨在将编译后的 Python 字节码重新翻译为有效且人类可读的 Python 源代码。虽然其他项目也取得了不同的成功,但 Decompyle++ 的独特之处在于它力求支持任何版本的 Python 字节码。

解决方案 8:

使用 pip install pycompyle6 安装

pycompyle6 文件名.pyc

解决方案 9:

如果您需要反编译 pyc 但安装了 python 3.9,则可以强制运行 uncompyle6。它并不完美,但确实有效。只需编辑site-packages/uncompyle6\bin/uncompile.py

def main_bin():
if not (sys.version_info[0:2] in ((2, 6), (2, 7), (3, 0),
                                  (3, 1), (3, 2), (3, 3),
                                  (3, 4), (3, 5), (3, 6),
                                  (3, 7), (3, 8), (3, 9)

只需以与其他版本相同的格式添加您已安装的版本并保存即可。它至少可以运行。

解决方案 10:


标题:从 PyInstaller 生成的可执行文件中提取文件

问题:

如何从 PyInstaller 创建的可执行文件中提取文件?

解决方案:

  1. 克隆pyinstxtractor-ng存储库:

git clone https://github.com/pyinstxtractor/pyinstxtractor-ng.git
  1. 提取可执行文件:

cd pyinstxtractor-ng
python pyinstxtractor-ng.py "<path_to_/dist/app>"
  1. 安装依赖项:

sudo yum install cmake make clang
  1. 克隆pycdc存储库:

git clone https://github.com/zrax/pycdc.git
  1. 构建并编译:

cd pycdc
cmake CMakeLists.txt
make
  1. 反编译字节码:

./pycdc "<path_to_/app_extracted/app.pyc>"

通过遵循这些步骤,您可以从 PyInstaller 生成的可执行文件中提取和反编译文件。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用