Mazahaka
Mazahaka

Reputation: 1

LuaJIT 2.1 (non-existent opcodes)

LuaJIT version: 2.1.

When I try to decompile the script, I get an error. Then I saw that there are non-existent opcodes in the byte code, because of which the decompiler refuses to decompile the script.

Below I attach the script itself, as well as the bytecode from it, which I was able to get. Also a link to the decompiler.

Download: Script + Bytecode. Decompiler.

I haven't tried anything since I don't have a computer to try what I wanted. As an option, try putting hooks, thereby pulling the script, but without protection. But there are anti-hooks in the script, and I don't know which ones.

I am also attaching the errors that the decompiler gave out.


Traceback (most recent call last): 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 296, in <module> 
    retval = main_obj.main() 
             ^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 207, in main 
    self.decompile(self.options.file_name) 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 248, in decompile 
    self.ast = ljd.ast.builder.build(header, prototype) 
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 28, in build 
    return _build_function_definition(prototype, header) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 50, in _build_function_definition 
    node.statements.contents = _build_function_blocks(state, instructions) 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 97, in _build_function_blocks 
    statement, line_marked_elements = _build_statement(state, addr, instruction) 
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 447, in _build_statement 
    return _build_var_assignment(state, addr, instruction) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 434, in decorated 
    assn = func(*args, **kwargs) 
           ^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 527, in _build_var_assignment 
    expression = _build_function(state, instruction.CD) 
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 851, in _build_function 
    return _build_function_definition(prototype, state.header) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 50, in _build_function_definition 
    node.statements.contents = _build_function_blocks(state, instructions) 
                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 72, in _build_function_blocks 
    _establish_warps(state, instructions) 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 242, in _establish_warps 
    block.warp, shift = _build_warp(state, block.last_address, warp) 
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\ast\builder.py", line 255, in _build_warp 
    last = instructions[-1] 
           ~~~~~~~~~~~~^^^^ 
IndexError: list index out of range

Traceback (most recent call last): 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 296, in <module> 
    retval = main_obj.main() 
             ^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 207, in main 
    self.decompile(self.options.file_name) 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\main.py", line 241, in decompile 
    header, prototype = ljd.rawdump.parser.parse(file_in, on_parse_header) 
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\parser.py", line 36, in parse 
    r = r and _read_prototypes(parser, parser.prototypes) 
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\parser.py", line 75, in _read_prototypes 
    if not ljd.rawdump.prototype.read(state, prototype): 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\prototype.py", line 49, in read 
    r = r and _read_constants(parser, prototype) 
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\prototype.py", line 137, in _read_constants 
    return ljd.rawdump.constants.read(parser, prototype.constants) 
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\constants.py", line 29, in read 
    r = r and _read_complex_constants(parser, constants.complex_constants) 
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 
  File "C:\Users\1\Desktop\Реверсинг\test\ljd\ljd\rawdump\constants.py", line 74, in _read_complex_constants 
    complex_constants.append(parser.prototypes.pop()) 
                             ^^^^^^^^^^^^^^^^^^^^^^^ 
IndexError: pop from empty list

Upvotes: 0

Views: 205

Answers (0)

Related Questions