lua 字节码的加密。

本文探讨了Lua作为嵌入式脚本语言在项目开发中的应用,以及随着使用者增加,代码保护的重要性。文章重点分析了lua字节码的序列化和反序列化过程,涉及luac.c、ldump.c和lundump.c文件。通过luaU_dump函数,展示了Proto类型的结构,它是lua中chunk的原型,包含字节码、常量表和debug信息等。为了增强字节码的安全性,提出了通过对DumpBlock和LoadBlock函数进行修改,对字节码进行简单加密的方法,甚至可以通过重写DumpFunction来混淆闭包成员的dump顺序,以提高静态分析的破解难度。
摘要由CSDN通过智能技术生成

lua作为嵌入式脚本语言,在项目开发中的积极作用毋庸置疑。虽然便捷,但随lua使用者的数量增多,lua暴露出来的项目核心代码的问题的越来越明显。随着官方提供的luac的解释器,能够给lua明文代码做简单的加密。文章主要正对字节码的序列化和反序列化进行分析。

luac.c文件就是luac.exe的实现部分。
ldump.c和lundump.c 分别是lua的保存和读取字节码的实现部分。
luaU_dump作为dump的函数入口,声明如下:
int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, void* data, int strip)
Proto类型是lua中一段chunk的原型,在lobject.h中声明,是不对外公开的内部类型,lua把任何一段可执行的脚本都看成一个Proto,Proto包含了函数原型的字节码,函数引用的常量表,debug信息(包括行号),本地变量,upvalue。由于Proto保存了相当完整的debug信息,所以如果在compile的时候把这些debug信息输出,是非常有利于反编译的。

实际上Proto就是一个闭包实现,而在lua中你可以把一个lua文件看成一个闭包。所以就很容易理解,lua语言结构其实就是递归包含闭包的关系。

从DumpFunction函数的实现可以就能看出这层关系,子闭包作为一个常量在DumpConstants函数中dump了。

static void DumpFunction(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值