Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 876
Edwin Yip Avatar asked Mar 31 '11 08:03

Edwin Yip


1 Answers

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) 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')
like image 182
Basj Avatar answered Oct 23 '22 06:10

Basj