我是 python 新手,我正在评估使用 Python + PySide 开发桌面程序,发现cx_freeze在将我的 python 代码转换为可执行文件方面效果很好,而且它是跨平台的。
我的问题是,其他人是否可以将 cx_freeze 生成的 EXE 反编译回完全可读的代码,就像我的原始源代码一样?
注意:我不担心有人破解我的程序,只是不希望其他人可以拿走我的代码并以此为基础进行开发。
谢谢。
我是 python 新手,我正在评估使用 Python + PySide 开发桌面程序,发现cx_freeze在将我的 python 代码转换为可执行文件方面效果很好,而且它是跨平台的。
我的问题是,其他人是否可以将 cx_freeze 生成的 EXE 反编译回完全可读的代码,就像我的原始源代码一样?
注意:我不担心有人破解我的程序,只是不希望其他人可以拿走我的代码并以此为基础进行开发。
谢谢。
似乎当前接受的答案不再正确。
以下是如何从冻结的项目中恢复原始源代码cx_freeze
。
注意:这是在“Hello world”项目上完成的,但是,使用相同的方法,我已经能够从我的一个冻结的项目中反编译超过 1000 行代码的源代码cx_freeze
,并恢复几乎原始源代码!
创建一个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__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')
一般来说 - 没有。CX Freeze 和 py2exe 存储代码的 PYC 版本,即从 PY 文件编译的字节码。目前,如果我没记错的话,没有可行的 PYC 反编译器。有些给你一个或多或少可读的带有注释的字节码,但没有一个会给你真正的 Python 源代码。所以在这方面 - 不,它不能被反编译。您也可以考虑采用完整的原生方式并使用Shed Skin