是否有可能从.py文件生成的.pyc文件中获取一些信息?
当前回答
是的,这是可能的。
有一个完美的开源Python (.PYC)反编译器,叫做decompyle++ https://github.com/zrax/pycdc/
decompyle++的目的是将编译后的Python字节码转换回有效的、人类可读的Python源代码。 虽然其他项目已经取得了不同的成功,但decompyle++的独特之处在于它寻求支持来自任何版本的Python的字节码。
其他回答
是的,你可以在pypi上找到unpyclib。
$ pip install unpyclib
然后你可以反编译你的.pyc文件
$ python -m unpyclib.application -Dq path/to/file.pyc
可以尝试的工具
Uncompyle6适用于Python 3,但存在一些bug。X,并且在2.7中运行良好。
推荐的开始选项,因为它的目标是统一早期的分支,并专注于自动化的单元测试。uncompyle6 GitHub页面有更多详细信息。 最适合早3。X版本,不是3.7+的最佳选择
如果这不起作用,尝试decompyle3, Uncompyle6的一个分支,在3.7或更高版本中工作得更好(根据Uncompyle6的作者)。
如果仍然有问题,请检查uncompyle6和decompyle3 readme,它们链接到其他可能更适合您的代码的工具。
限制
你可以得到你的代码,包括变量名和文档字符串,但没有注释。
一些代码可能无法成功反编译,特别是使用不寻常的控制流,或者最新的Python 3。x版本。这是由于这些反编译器中的错误,Python随着时间的推移改变了它的字节码。
改进这些工具
如果需要,为这些项目提出GitHub问题——两者都在一系列Python版本上运行单元测试套件。
资金显然是支持uncomple6和decompyle3中最新的Python版本(3.7以后)的限制-发送捐款将有所帮助。
防止将来丢失代码
请看这个答案,了解一些可能在你的编辑器或IDE中工作的技巧,包括VS Code和PyCharm。
我已经在这几个小时,终于有一个解决方案使用decompyle++:
访问https://cmake.org/download/并安装CMake。 访问https://github.com/zrax/pycdc并获取该repo的副本:pycdc-master。 将C:\Program Files\CMake\bin添加到PATH下的系统环境变量中。
我建议将pycdc-master文件夹放到另一个文件夹中,比如anotherFolder。
现在你可以在命令行中运行这些命令:
cd anotherFolder进入包含pycdc-master的文件夹。 cmake pycdc-master cd . ./上一个目录, 然后:cmake——构建另一个文件夹
pycdc.exe将在另一个文件夹\Debug中。
执行像pycdc.exe这样的程序,只希望得到mycodeback。Pyc,它会打印出源代码。我有Python 3.9.6的源代码,没有其他工作。
是的,这是可能的。
有一个完美的开源Python (.PYC)反编译器,叫做decompyle++ https://github.com/zrax/pycdc/
decompyle++的目的是将编译后的Python字节码转换回有效的、人类可读的Python源代码。 虽然其他项目已经取得了不同的成功,但decompyle++的独特之处在于它寻求支持来自任何版本的Python的字节码。
您可以尝试Easy Python反编译器。它基于decompyle++和Uncompyle2。 它支持python 1.0-3.3版本的反编译
注意:我是上述工具的作者。
推荐文章
- 是否可以将已编译的.pyc文件反编译为.py文件?
- Django模型表单对象的自动创建日期
- 在Python中包装长行
- 如何计算两个时间串之间的时间间隔
- 我如何才能找到一个Python函数的参数的数量?
- 您可以使用生成器函数来做什么?
- 将Python诗歌与Docker集成
- 提取和保存视频帧
- 使用请求包时出现SSL InsecurePlatform错误
- 如何检索Pandas数据帧中的列数?
- except:和except的区别:
- 错误:“字典更新序列元素#0的长度为1;2是必需的”
- 不带空格的Python - json
- 我如何获得当前的URL在硒Webdriver 2 Python?
- 从类定义中的列表推导式访问类变量