如何加密lua脚本并使其能够与LuaJIT执行程序一起运行

时间:2017-05-10 00:39:40

标签: encryption lua luajit roblox

我想制作一个可以通过外部程序运行的受保护的Lua脚本[用于游戏]。这意味着我不希望任何其他人看到源代码。外部程序是Lua包装器

  

Seraph是一个ROBLOX Lua脚本执行漏洞。它使用包装器来模拟真实的ROBLOX脚本环境。它可以在7级高级线程中运行脚本,允许您访问API函数并更改通常无法访问的属性。它还包含loadtring和GetObjects等缺失函数的重新实现,并绕过各种安全检查,例如HttpGet / HttpPost函数中的URL信任检查。

他们最近实施了LuaJIT,我认为这可能会有所帮助。如果它只能由LuaJIT包装器运行那么棒!

- PS我知道基本的lua但不能写任何酷。 --PPS它需要能够从在线数据库中提取密码

2 个答案:

答案 0 :(得分:1)

由于我不熟悉ROBLOX,我只是关注你问题的这一部分:

  

这意味着我不希望其他人看到源代码。

为此,您将需要使用Lua的字节码转储工具。执行脚本时,Lua首先将其编译为字节码,然后在VM中执行所述字节码。 LuaJIT做了同样的事情,除了它有一个完全不同的VM&执行模型。重要的是LuaJIT的字节码与标准的Lua兼容,并且仍然提供相同的字节码转储功能。

所以,最好的'保护'您可以拥有的代码是在您的代码上编译它,然后在外部机器上仅发送和执行它的已编译的二进制版本。

以下是如何做到的。首先,您在计算机上使用此代码生成包含游戏字节码的已编译二进制文件:

local file = io.open('myGame.bin', 'wb')
file:write(string.dump(loadfile('myGame.lua')))
file:close()

您现在已经在' myGame.bin'中编写了代码的编译版本。这基本上是安全的#39;因为你会得到。

现在,在您想要运行游戏的远程环境中,您可以转移' myGame.bin'它,并运行编译后的二进制文件,如下所示:

local file = io.open('myGame.bin', 'rb')
local bytecode = file:read('*all')
file:close()
loadstring(bytecode)()

这将有效地运行myGame.lua'中的所有内容。开头。

忘记密码/加密。卢克帕克的评论很尖锐。如果您不希望某人拥有您的来源,您可以给他们编译代码:)

答案 1 :(得分:0)

要加密Lua Script。您必须对其进行混淆。它在某些网站上缩小了Lua Script,但表示对其进行了模糊处理。错了!缩小和混淆是不同的。一个非常安全的Lua Script Obfuscation是{m}#0001的Luraph Obfuscation。它在他的不和谐服务器中以To obfuscate 1 script cost $1的价格出售。

Discord服务器链接:https://discord.gg/DJmXrd2