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

时间:2011-03-31 08:58:02

标签: python decompiling pyside cx-freeze

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

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

注意:我并不担心有人破解我的程序,但只是不希望别人可以接受我的代码并在其基础上开发。

感谢。

2 个答案:

答案 0 :(得分:6)

总的来说 - 没有。 CX Freeze和py2exe存储代码的PYC版本,即从PY文件编译的字节码。目前,如果我没有弄错的话,就没有可行的PYC反编译器。有些会给你带有注释的或多或少的可读字节码,但没有一个会给你实际的Python源代码。 所以在这方面 - 不,它不能被反编译。 您还可以考虑使用完整的原生方式并使用Shed Skin

答案 1 :(得分:3)

似乎当前接受的答案不再正确。

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

注意:这是在“ Hello world”项目上完成的,但是,使用相同的方法,我已经能够从一个用{{ 1}},并恢复几乎原始的源代码!

1)使用cx_freeze

创建一个包含以下内容的cx_freeze文件

test.py

然后使用以下命令创建可执行文件

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

通常,您将其分发给最终用户:

enter image description here

现在让我们尝试对它进行反向工程!

#2)获取.pyc字节码

打开cxfreeze test.py --target-name=test.exe 并解压缩文件dist/lib/library.zip

#3)现在使用decompyle6获取源代码

test__main__.pyc

#4)惊喜...

这是原始源代码!

import uncompyle6
with open('test_main_reverse_eng.py', 'w') as f:
    uncompyle6.decompile_file('test__main__.pyc', f)