引言
在寒假宅家期间,我在Github上发现了一个名为"luaparse"的项目。这个项目可以将Lua源代码解析为AST语法树。我曾经使用过正则表达式对Lua代码进行混淆,但是这种方法存在兼容性和稳定性问题。相比之下,通过处理AST语法树得到的混淆代码具有更高的强度和稳定性,借鉴javascript语言混淆方案,制作了混淆工具LuaEnc 。
概述
LuaEnc是一款专门为Lua5.2~5.3版本开发的代码混淆工具,能够对源码进行多种混淆处理,提高代码的保密性,防止代码泄露。本文将介绍LuaEnc工具的使用方法和混淆时需要注意的一些事项。
正文
使用LuaEnc非常简单,只需要将待混淆的Lua源码放置到工具界面上,配置好自己需要的功能,即可进行混淆
工具会对源码进行以下处理:
1.改变对象属性的访问方式
为了增加混淆难度,LuaEnc会对对象属性的访问方式进行改变。这样做可以使代码更难以被破解。例如,原本访问一个对象属性时可能是通过"."或"[]"来实现,但在混淆后,可以改为其他方式。
2.Lua标准内置对象与库对象的处理
Lua标准内置对象和库对象是编写Lua代码时常用的对象,也是被攻击者攻击的目标。因此,LuaEnc会对这些对象进行特殊处理,以提高混淆效果。
3.数值常量加密
为了防止数值常量被轻易破解,LuaEnc会对其进行加密处理。
4.字符串阵列化,字符串加密
对于字符串常量,LuaEnc会对其进行阵列化处理,并对其进行加密,提高混淆效果。这样做可以增加字符串的难度。
5.自定义标识符混淆
为了增加混淆难度,LuaEnc会对自定义标识符进行混淆处理。这样做可以使自定义标识符更难以被破解,提高代码的安全性。
6.控制流平坦化
为了增加代码逻辑的混乱度,LuaEnc会对控制流进行平坦化处理,使其难以被破解。
7.花指令添加
为了增加混淆难度,LuaEnc会添加花指令,使其难以被破解。
需要注意的事项
由于会对标识符如 变量名 函数名 进行混淆,请不要使用_G _ENV 等数组形式访问对象。
控制流平坦化可能会对代码块内变量的作用域进行干扰,请继续测试,确保正常。
混淆后的代码可能会影响程序的稳定性,需要进行测试和调试。
混淆后的代码大小会变大,可能会影响程序的运行速度。