【问题标题】:Can EXE generated by cx_freeze be completely decompiled back to readable Python code?cx_freeze 生成的 EXE 可以完全反编译回可读的 Python 代码吗?
【发布时间】:2011-07-26 17:25:43
【问题描述】:

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

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

注意:我不担心有人破解我的程序,只是不希望别人拿走我的代码并以此为基础开发。

谢谢。

【问题讨论】:

  • @Edwin:“其他人可以使用我的代码并基于它进行开发”。答案是肯定的。他们将您的程序放入操作系统管道中,为其提供数据并处理输出。或者他们将您的程序分叉为子进程,将其“包装”在他们的程序中。你不能阻止人们以新的方式使用你的软件。为什么要问?
  • 如果我可以问,为什么您不希望人们能够在其上进行维护或开发?
  • 我认为我的原始帖子很明显为什么要问这个问题。例如,我知道这在技术上和法律上是不可能的,但微软显然不希望其他公司反编译他们的 Windows 系统,然后开发一个名为“Windows Ex”的新操作系统并出售这个新操作系统来赚钱。
  • @Edwin:“我认为我的原始帖子很清楚为什么要问这个问题”。这对你来说可能是真的。我们问是因为这对我们来说不是真的。我们没有发现任何关于这一点的明显信息。请用允许和不允许的特定场景更新您的问题来实际解释。如果很明显,我们就不会问了。由于不明显,我们在询问。
  • @S.Lott,我担心其他人通过反编译我的 EXE 来非法获取我的源代码。使用本机编译的 EXE 无法将其反编译回其原始形状,我想知道 cx_freeze 冻结的 EXE 是否属实。所以我的问题。不确定我是否可以进一步解释。对不起。

标签: python decompiling pyside cx-freeze


【解决方案1】:

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

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

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

1) 使用 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')

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • “所以在这方面 - 不,它不能被反编译”。嗯...但是您说可以将其反编译为“可读字节码”。那么,那将是反编译,对吧?
    • 不。字节码不是源代码。这就像汇编语言。一种非常难以分析的低级语言。
    • @Reflog:它被反编译了,对吧? “源”不是“受保护的”,而是可见的。有耐心和恶意的人可以对商业机密进行逆向工程,对吗?
    • 没有反编译。是拆开的这是两个不同的术语。如果你这样说的话 - 任何语言,任何可以归结为 1 和 0 的东西都可以进行逆向工程和分析。
    • @Basj - 是的,谢天谢地,我们现在有了适当的反编译器!自从我发布我的答案只用了 9 年 :)
    猜你喜欢
    • 2011-02-04
    • 2012-06-24
    • 1970-01-01
    • 2020-12-13
    • 2010-09-15
    • 2023-03-25
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多