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

cx_freeze生成的EXE是否可以完全反编译回可读的Python代码?,python,decompiling,pyside,cx-freeze,Python,Decompiling,Pyside,Cx Freeze,我是python新手,我正在评估使用python+PySide开发桌面程序,发现这在将python代码转换为可执行文件方面非常有效,而且是跨平台的 我的问题是,其他人是否可以将cx_freeze生成的EXE反编译回完全可读的代码,就像我的原始源代码一样 注意:我不担心有人破解我的程序,只是不希望其他人可以拿走我的代码并基于它进行开发 谢谢。一般来说-不。CX Freeze和py2exe存储代码的PYC版本,即从PY文件编译的字节码。目前,如果我没有弄错的话,还没有可行的PYC反编译器。有些人会给

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

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

注意:我不担心有人破解我的程序,只是不希望其他人可以拿走我的代码并基于它进行开发


谢谢。

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

看起来当前接受的答案不再是真的。 下面是如何从使用
cx\u freeze
冻结的项目中恢复原始源代码

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

# 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')
1) 使用cx_冻结 创建一个
test.py
文件,其中包含

import time
print('hello')
time.sleep(2)
print('world')
然后使用

cxfreeze test.py --target-name=test.exe
然后通常您会将其分发给最终用户:

现在,让我们尝试对其进行反向工程

#2) 获取.pyc字节码

打开
dist/lib/library.zip
并提取文件
test\uuuu main\uuuu.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')

“因此,在这方面——不,它不能被反编译”。嗯。。。但你说它可以反编译成“可读的字节码”。那就是反编译,对吧?不。字节码不是源代码。这就像汇编语言。一种很难分析的低级语言。@Reflog:它是反编译的,对吗?“源”不受“保护”,但可见。有耐心和恶意的人可以逆向工程商业秘密,对吗?它不是反编译的。它被拆开了。这是两个不同的术语。如果你这样说的话——任何语言,任何降到1和0的东西都可以进行反向工程和分析。@Basj-是的,谢天谢地,我们现在有了合适的反编译器!我发布我的答案只花了9年时间:)@Edwin:“其他人可以接受我的代码并基于它进行开发”。答案是肯定的。他们将您的程序放入操作系统管道,向其提供数据并处理输出。或者,他们将您的程序作为子进程分叉,“包装”到他们的程序中。你不能阻止人们以新的方式使用你的软件。为什么要问?如果我可以问的话,为什么你不希望人们能够在它的基础上保持或发展?我认为我最初的帖子很清楚为什么要问这个。例如,我知道这在技术上和法律上都是不可能的,但微软显然不希望其他公司对他们的Windows系统进行反编译,然后开发一个名为“Windows Ex”的新操作系统,然后出售这个新操作系统来赚钱。@Edwin:“我认为我原来的帖子很明显,为什么要问这个问题。”。对你来说可能是这样。我们这样问是因为这对我们来说不是真的。我们找不到任何明显的证据。请通过使用允许和不允许的特定场景更新您的问题来实际解释。如果这是显而易见的,我们不会问。因为这不明显,我们要求。@s.Lott,我担心其他人通过反编译我的EXE非法获取我的源代码。对于本机编译的EXE,不可能将其反编译回原始形状,我想知道对于cx_freeze-Freezed EXE是否如此。所以我的问题是。不知道我是否能进一步解释。很抱歉