如何去混淆 Lua 脚本?

local script= string.dump(
    function()
        print('Hi')
    end
)

buff=""

for v=1,string.len(script) do
    buff=buff..'\\'..string.byte(script,v)
end

print(buff)

将脚本转化为字节码,有什么反转的方法吗?

点赞
用户107090
用户107090

你无法将字节码反向转换为 Lua 源代码,但是你可以使用 luac -l 列出 VM 指令。

2017-05-25 21:31:05
用户10041320
用户10041320

为了找到VM bytecodeLua bytecode之间的差异,VM bytecode的前面始终会有\24。在这种情况下,这是VM (虚拟机)字节码。这个混淆的东西也使用了string.dump函数,可以很容易地被反转。

以下是修改后的反编译版本:

local script= string.dump(
    function()

      print('Hi')

    end
)
buff=""

for v=1,string.len(script) do
    buff=buff..'\\'..string.byte(script,v)
end
buff = "'"..buff.."'"
print("print("..buff..")")

这个版本只是简单地使用print函数来打印在脚本中创建的string.dump。源代码显然可见,我很确定这适用于所有不安全的VM obfuscators

2018-07-08 13:24:24