uncompyle2
uncompyle2 copied to clipboard
wildfire breaks uncompyle2
Hi Mysterie,
Recently I have been playing on with Python bytecodes to do weird stuff for fun, and I just saw the python-compiled file I am generating seem to break uncompyle2
.
Here is an example:
overclok@spartacus:/tmp$ git clone https://github.com/Mysterie/uncompyle2.git Cloning into uncompyle2... [...] overclok@spartacus:/tmp$ wget "https://github.com/0vercl0k/stuffz/raw/master/Python's%20internals/wildfired_samples/very_understandable_function.Py273.pyc" [...] overclok@spartacus:/tmp$ python2.7 uncompyle2/uncompyle2.py very_understandable_function.Py273.pyc #2013.05.02 17:59:54 UTC # Can't uncompyle very_understandable_function.Py273.pyc Traceback (most recent call last): File "/tmp/uncompyle2/uncompyle2/__init__.py", line 209, in main uncompyle_file(infile, outstream, showasm, showast) File "/tmp/uncompyle2/uncompyle2/__init__.py", line 146, in uncompyle_file uncompyle(version, co, outstream, showasm, showast) File "/tmp/uncompyle2/uncompyle2/__init__.py", line 131, in uncompyle walk.gen_source(ast, customize) File "/tmp/uncompyle2/uncompyle2/walker.py", line 1407, in gen_source self.print_(self.traverse(ast, isLambda=isLambda)) File "/tmp/uncompyle2/uncompyle2/walker.py", line 493, in traverse self.preorder(node) File "/tmp/uncompyle2/uncompyle2/spark.py", line 694, in preorder self.preorder(kid) File "/tmp/uncompyle2/uncompyle2/spark.py", line 694, in preorder self.preorder(kid) File "/tmp/uncompyle2/uncompyle2/spark.py", line 694, in preorder self.preorder(kid) File "/tmp/uncompyle2/uncompyle2/spark.py", line 689, in preorder self.default(node) File "/tmp/uncompyle2/uncompyle2/walker.py", line 1181, in default self.engine(table[key], node) File "/tmp/uncompyle2/uncompyle2/walker.py", line 1131, in engine self.preorder(node[entry[arg]]) File "/tmp/uncompyle2/uncompyle2/spark.py", line 687, in preorder func(node) File "/tmp/uncompyle2/uncompyle2/walker.py", line 879, in n_mkfunc self.make_function(node, isLambda=0) File "/tmp/uncompyle2/uncompyle2/walker.py", line 1282, in make_function code = Code(code, self.scanner, self.currentclass) File "/tmp/uncompyle2/uncompyle2/scanner.py", line 60, in __init__ self._tokens, self._customize = scanner.disassemble(co, classname) File "/tmp/uncompyle2/uncompyle2/scanner27.py", line 81, in disassemble if names[self.get_argument(i+3)] == 'AssertionError': IndexError: tuple index out of range # decompiled 0 files: 0 okay, 1 failed, 0 verify failed #2013.05.02 17:59:54 UTC
By the way, same problem with the Python 2.6.6 equivalent file available here: https://github.com/0vercl0k/stuffz/raw/master/Python's%20internals/wildfired_samples/very_understandable_function.Py266.pyc
Also, if you want to see how those files are generated, see wildfire.py
: https://github.com/0vercl0k/stuffz/blob/master/Python's%20internals/wildfire.py
Feel free to email me if you don't manage to reproduce the Python traceback!
Cheers, 0vercl0k
Hi 0vercl0k,
Thanks for your report! For the moment I'll try to improve the python bytecode reader, and the way error are handled. But uncompyle2 is a decompilator not a deobfuscator (for the moment), so it won't be a full fix.
If you have time, you can push deobfuscator feature ;D.