uncompyle2 icon indicating copy to clipboard operation
uncompyle2 copied to clipboard

wildfire breaks uncompyle2

Open 0vercl0k opened this issue 11 years ago • 1 comments

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

0vercl0k avatar May 02 '13 18:05 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.

Mysterie avatar May 22 '13 12:05 Mysterie