Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
484 views
in Technique[技术] by (71.8m points)

decompiling - Can EXE generated by cx_freeze be completely decompiled back to readable Python code?

I'm new to python, and I'm evaluating developing desktop programs with Python + PySide, and found that cx_freeze works very good in converting my python code into executables, and it's cross-platform.

My question is, can someone else decompile an EXE generated by cx_freeze back to fully readable code , as if my original source code?

Note: I'm not worried about someone cracking my program, but just don't want someone else can take my code and developed base on it.

Thanks.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

It seems that the current accepted answer is no longer true.

Here is how to recover the original source code from a project frozen with cx_freeze.

Note: it is done here on a "Hello world" project, but, using the same method, I've been able to decompile a 1000+ lines-of-code source code from a project of mine frozen with cx_freeze, and recover nearly the original source code!

1) Use cx_freeze

Create a test.py file containing

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

Then create the executable with

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

Then usually you'll distribute this to the final users:

enter image description here

Now let's try to reverse engineer this!

#2) Get the .pyc bytecode

Open dist/lib/library.zip and extract the file test__main__.pyc.

#3) Now use decompyle6 to get the source code

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

#4) Surprise...

Here is the original source code!

# 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')

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...