首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在加密时带来调试信息然后lua代码使用luac

如何在加密时带来调试信息然后lua代码使用luac
EN

Stack Overflow用户
提问于 2018-02-11 11:29:31
回答 2查看 413关注 0票数 2

我在"orgin.lua“文件中编写了以下代码

代码语言:javascript
复制
if test==nil then
    print(aa["bb"]["cc"])  -- to produce a crash
end
print(1120)

当它崩溃时,它将生成以下信息:

代码语言:javascript
复制
lua: origin.lua:3: attempt to index global 'aa' (a nil value)

为了防止反编译并确保代码的安全性,我使用以下命令来转换代码:

代码语言:javascript
复制
luac -o -s test.lua origin.lua

我知道参数-s是条带调试信息,那么它在崩溃时不会显示行数:

代码语言:javascript
复制
lua: ?:0: attempt to index global 'aa' (a nil value)

但是如何在加密时带上调试信息,然后lua代码使用luac呢?有什么解决方案吗?

EN

回答 2

Stack Overflow用户

发布于 2018-02-11 14:43:44

没有办法做到这一点内置于Lua,但有一些解决办法。

如果您只需要行号,那么一种选择是将行号保留在块中。行号对于逆向工程并不是很有用(unluac目前根本不使用行号),所以它不应该影响安全性。Lua没有提供这样的选项,但很容易修改Lua,使其在剥离时保留它们。来自ldump.c

代码语言:javascript
复制
n = (D->strip) ? 0 : f->sizelineinfo;

可以更改为

代码语言:javascript
复制
n = f->sizelineinfo;

(免责声明:未经测试)

更复杂的选项将是修改Lua运行时以输出虚拟机程序计数器而不是行号,并且还输出描述当前函数在块中的位置的信息(例如,顶层、第一函数、嵌套在第三函数中的第二函数等)。然后,开发人员可以在块的非剥离版本中查找行号。(这是一个在lua-l上使用这种方法的人的reference --但是没有提供源代码。)

请注意,防止反编译并不是真正的安全性。它可能有助于抵御偶然的攻击,但Lua字节码并不难读。

票数 1
EN

Stack Overflow用户

发布于 2018-02-11 17:04:16

luac不会加密输出。它将你的Lua源代码编译成字节码,仅此而已。代码既没有加密,也没有更快地运行,只是加载时间更短,因为不需要编译步骤。

如果你想要加密你的代码,我建议使用AES-256加密字节代码,然后在将它传递到Lua状态之前在内存中解码它。这样,字节码在磁盘上被加密,但在内存中被解密。

开销很低。我们多年来一直在使用这种技术。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48728005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档