反编译/反汇编 lua 字节码

逆向工程 拆卸 反编译 字节码
2021-06-16 23:34:07

我一直在尝试反编译 Lua 字节码,并发现了一些有用的工具,如 unluac 和 LuaAssemblyTools。Unluac 似乎可以用 luac 编译的 lua 脚本来解决这个问题,给我几乎准确的源代码,但是当我使用以下代码将 lua 脚本转换为字节码时:

file:write(string.dump(loadfile(filename)))

我得到的输出与 luac 不同,但是它们非常相似,只是在(很多)不同的地方多出了一个字节。现在这个新文件会给我一个IllegalState exceptionfrom unluac 并且当我尝试使用 -l 选项在 luac 中运行字节码文件(由上面的代码行创建)时,我得到:

C:\MyDir>luac -l stringdumped.txt
luac: stringdumped.txt: bad integer in precompiled chunk

因此,有明显的差异string.dump和luac,即使它是在这里建议:http://lua-users.org/wiki/LuaCompilerInLua以使用string.dump为luac的仿真器。

任何人都可以向我解释其中的区别,并建议我将如何反转string.dump“已编译”脚本?

1个回答

loadfile发出的字节码之间几乎没有区别luac您收到错误的唯一可能原因是您正在以文本模式打开文件stringdumped.txt试试下面的代码,看看有没有错误

f = io.open("stringdumped.txt", "wb") --Note that file is opened in binary mode
f:write(string.dump(loadfile("sample.lua")))
f:close()

由于没有区别,输出文件stringdumped.txt既可以由 lua 解释器运行,也可以由unluac反编译逆向步骤也与您对任何其他已编译 lua 脚本所做的完全相似。