LuaJIT 2.1字节码含无效操作码,反编译失败求助
LuaJIT 2.1 字节码反编译失败解决求助
问题详情
- 目标字节码基于LuaJIT 2.1版本
- 使用指定的LuaJIT反编译器反编译时触发错误,经排查是字节码中包含不存在的opcode,导致反编译流程中断
- 持有待反编译的脚本、字节码文件,使用的反编译器为znixian维护的LuaJIT反编译工具
- 因无电脑环境,无法测试通过挂钩提取无保护脚本的方案,且目标脚本带有未知反挂钩机制
反编译时抛出的错误栈追踪
第一条错误
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
寻求帮助
现寻求解决该反编译失败问题的可行方案。
内容的提问来源于stack exchange,提问作者Mazahaka
相关产品推荐
相关产品推荐

