You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Revise what works and what doesn't
This commit is contained in:
48
README.rst
48
README.rst
@@ -1,4 +1,4 @@
|
|||||||
|buildstatus|
|
|buildstatus| |Supported Python Versions|
|
||||||
|
|
||||||
uncompyle6
|
uncompyle6
|
||||||
==========
|
==========
|
||||||
@@ -96,26 +96,35 @@ For usage help:
|
|||||||
Known Bugs/Restrictions
|
Known Bugs/Restrictions
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
|
The biggest known and possibly fixable (but hard) problem has to do
|
||||||
|
with handling control flow. In some cases we can detect an erroneous
|
||||||
|
decompilation and report that.
|
||||||
|
|
||||||
About 90% of the decompilation verifies from Python 2.3.7 to Python
|
About 90% of the decompilation verifies from Python 2.3.7 to Python
|
||||||
3.4.2 on the standard library packages I have on my system.
|
3.4.2 on the standard library packages I have on my system.
|
||||||
|
|
||||||
(Verification is the process of decompiling bytecode, compiling with a
|
*Verification* is the process of decompiling bytecode, compiling with
|
||||||
Python for that byecode version, and then comparing the byetcode
|
a Python for that byecode version, and then comparing the bytecode
|
||||||
produced by the decompiled/compiled program. Some allowance is made
|
produced by the decompiled/compiled program. Some allowance is made
|
||||||
for inessential differences, but other semantically equivalent
|
for inessential differences. But other semantically equivalent
|
||||||
differences are not caught.)
|
differences are not caught. For example ``if x: foo()`` is
|
||||||
|
equivalent to ``x and foo()`` and decompilation may turn one into the
|
||||||
|
other. *Weak Verification* on the other hand doesn't check bytecode
|
||||||
|
for equivalence but does check to see if the resulting decompiled
|
||||||
|
source is a valid Python program by running the Python
|
||||||
|
interpreter. Because the Python language has changed so much, for best
|
||||||
|
results you should use the same Python Version in checking as used in
|
||||||
|
the bytecode.
|
||||||
|
|
||||||
Later distributions average about 200 files. At this point, 2.7
|
Later distributions average about 200 files. There is some work to do
|
||||||
decompilation is definitely better than uncompyle2. A number of bugs
|
on the lower end Python versions which is more difficult for us to
|
||||||
have been fixed. We now handle more Python bytecodes than the old
|
handle since we don't have a Python interpreter for versions 1.5, 1.6,
|
||||||
decompyle program that handled Python bytecodes ranging from 1.5 to
|
and 2.0.
|
||||||
2.4. There is some work do do on the lower end which is more
|
|
||||||
difficult for us since we don't have a Python interpreter for versions
|
|
||||||
1.5, 1.6 or 2.0.
|
|
||||||
|
|
||||||
Python 3.5 largely works, but still has some bugs in it.
|
Python 3.0 support is weak; Python 3.5 largely works, but still has
|
||||||
Python 3.6 changes things drastically by using word codes rather than
|
some bugs in it. Python 3.6 changes things drastically by using word
|
||||||
byte codes, and that needs to be addressed.
|
codes rather than byte codes. That has been addressed, but then it also
|
||||||
|
changes function call opcodes and its semantics.
|
||||||
|
|
||||||
Currently not all Python magic numbers are supported. Specifically in
|
Currently not all Python magic numbers are supported. Specifically in
|
||||||
some versions of Python, notably Python 3.6, the magic number has
|
some versions of Python, notably Python 3.6, the magic number has
|
||||||
@@ -125,6 +134,11 @@ which use their own magic and encrypt bytcode. With the exception of
|
|||||||
the Dropbox's old Python 2.5 interpreter this kind of thing is not
|
the Dropbox's old Python 2.5 interpreter this kind of thing is not
|
||||||
handled.
|
handled.
|
||||||
|
|
||||||
|
We also don't handle PJOrion_ obfuscated code. For that try: PJOrion
|
||||||
|
Deobfuscator_ to unscramble the bytecode to get valid bytecode before
|
||||||
|
trying this tool.
|
||||||
|
|
||||||
|
|
||||||
There is lots to do, so please dig in and help.
|
There is lots to do, so please dig in and help.
|
||||||
|
|
||||||
See Also
|
See Also
|
||||||
@@ -144,3 +158,7 @@ See Also
|
|||||||
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
|
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
|
||||||
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg
|
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg
|
||||||
:target: https://travis-ci.org/rocky/python-uncompyle6
|
:target: https://travis-ci.org/rocky/python-uncompyle6
|
||||||
|
.. |Supported Python Versions| image:: https://img.shields.io/pypi/pyversions/uncompyle6.svg
|
||||||
|
:target: https://pypi.python.org/pypi/uncompyle6/
|
||||||
|
.. _PJOrion: http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%84
|
||||||
|
.. _Deobfuscator: https://github.com/extremecoders-re/PjOrion-Deobfuscator
|
||||||
|
Reference in New Issue
Block a user