cx_freeze生成的EXE可以完全反编译为可读的Python代码吗?

问题描述 投票:9回答:2

我是python的新手,我正在评估使用Python + PySide开发桌面程序的过程,发现cx_freeze在将我的python代码转换为可执行文件方面非常有效,而且它是跨平台的。

我的问题是,其他人是否可以将cx_freeze生成的EXE反编译回完全可读的代码,就像我的原始源代码一样?

注意:我不担心有人破解我的程序,只是不想让别人接受我的代码并以此为基础进行开发。

谢谢。

python decompiling pyside cx-freeze
2个回答
6
投票

一般来说-不。 CX Freeze和py2exe存储代码的PYC版本,即从PY文件编译的字节码。目前,如果我没记错的话,没有可行的PYC反编译器。有些为您提供了带有注释的或多或少可读的字节码,但没有一种会为您提供实际的Python源代码。因此,就此而言-不,它不能反编译。您也可以考虑采用本机方式,并使用Shed Skin


0
投票

当前接受的答案是错误的。

这里是如何从用cx_freeze冻结的项目中恢复原始源代码。

[注意:这是在“ Hello world”项目上完成的,但是,使用相同的方法,我已经能够从一个用cx_freeze冻结的我的项目中反编译1000多个代码行源代码。 ,并恢复几乎原始的源代码!

1)使用cx_freeze

创建一个包含test.py的文件

import time
print('hello')
time.sleep(2)
print('world')

然后使用]创建可执行文件>

cxfreeze test.py --target-name=test.exe

然后通常将其分发给最终用户:

enter image description here

现在让我们尝试对此进行逆向工程!

2)获取.pyc字节码

打开dist/lib/library.zip并解压缩文件test__main__.pyc

3)现在使用decompyle6获取源代码
import uncompyle6
with open('test_main_reverse_eng.py', 'w') as f:
    uncompyle6.decompile_file('test__main__.pyc', f)

4)惊喜...

这是原始源代码!

# uncompyle6 version 3.7.1
# Python bytecode 3.7 (3394)
# Decompiled from: Python 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)]
# Embedded file name: test.py
# Compiled at: 2020-06-16 21:02:17
# Size of source mod 2**32: 58 bytes
import time
print('hello')
time.sleep(2)
print('world')
    
© www.soinside.com 2019 - 2024. All rights reserved.