游戏 源码 泄露-深入剖析Lua脚本加密技术,为游戏代码添加“紧缩魔咒”

许多安全专家表示,在互联网上失去对代码的控制就像将CCB的设计图纸交给强盗一样。

Lua是一种广泛应用于游戏开发的计算机语言,方便开发者定制自己需要的功能。 其中风靡全球的《愤怒的小鸟》就是采用Lua语言和Wax开发的。 此外,《梦幻西游》、《奇迹暖暖》、《开心消消乐》、《放置无双》、《最强蜗牛》等手游也都是Lua语言编写的。

近年来,Lua脚本在游戏行业常年流行,但Lua脚本泄露现象屡见不鲜,其安全性也备受关注。 不法分子通过开放私服、开放插件等方式实现游戏代码的商业变现,这给游戏开发商造成巨大的经济损失,也影响了游戏玩家包括账户、物品等虚拟资产的安全。

本文将围绕Lua脚本加密,讨论Lua中三种常见的加密方法,并探讨如何进一步保护Lua代码。

一、背景

“Lua”在法语中是“月亮”的意思,由法国天主教大学于1993年开发。

Lua作为一种成熟的解释性语言,简单、轻量、易于维护,并且可以根据自身的特点模拟面向对象。 因此,它被嵌入到越来越多的应用程序中,尤其是游戏中。 发展带来极大便利。 比如Cocos引擎的主流游戏以及U3D游戏中的热更新框架xlua都会使用Lua语言。

同时,由于Lua语言本身的特点,Lua代码本身并不安全。 很多情况下,攻击者可以获取Lua源代码进行读取、分析、窃取和篡改,然后进一步重新打包,这给游戏本身带来了很多问题。 安全隐患大。

2. Lua现有的保护

对于这种类型的脚本解释性语言,从代码保护的角度来说,与其自身的表达方式密不可分。 对于Lua来说,目前市面上的手游包中能看到的主要有lua源码、luac、luajit。 接下来将以表达的形式详细介绍每种方法,以及其现有的保护方式以及暴露出来的优缺点。

2.1Lua源码

目前市面上很多游戏中使用Lua源码本身并不多,但在一些热更新中使用较多。 因此,从源代码保护的角度来看,很容易想到对Lua源代码本身进行混淆的解决方案; 目前市场上对Lua源码进行混淆的厂家主要有以下几种:

XFuscator:

卢拉夫:

Synpse Xen:

铁酿:

判决:

这些基于源代码的混淆的优点是Lua经过处理后变得越来越复杂,这增加了攻击者分析的成本和难度。 由于攻防的升级,之前的混淆也有了相应的反混淆方法。 同时,混乱不仅仅是混乱本身所表现出来的兼容性问题,对于开发者来说还存在以下问题:

1、同一段代码的混淆在不同的时间进行混淆,得到的混淆效果不同:

为了降低混淆程度和难度,混淆器中包含需要热更新的随机代码。 热更新时会进行比较,所以没办法进行热更新处理;

2.Lua语句混乱的兼容性问题:

由于Lua句型的灵活性,在反混淆处理中存在很多兼容性问题;

3、开发者准入问题:

对于开发者来说,接入第三方并与第三方沟通解决问题的成本较高;

2.2luac方法

Luac是自己语言的字节码格式。 和Python等其他脚本语言​​​​在虚拟机中显示的内容是一样的。 Lua加载到显存后,虚拟机加载相应的字节码。 由于Lua主要有5.1、5.2、5.3三个版本,所以三种格式也会有对应的luac版本。 目前手游主流版本是5.2版本;

虽然luac不会以源码的形式出现,但由于在Lua源码中可以窥探到Lua字节码的执行和格式,比如luadec反编译工具,所以luac的方式仍然是不安全的。 目前市场上针对这些保护的方式主要有以下三种:

2.2.1:Luac加密

从Lua虚拟机的源码中我们可以知道,Lua是在luaL_loadbuffer函数中加载的,所以有安全意识的厂商都会对Lua进行加密。 在实际执行之前修改此源代码并揭示秘密;

但由于虚拟机的执行过程是开源的,而且由于cocos项目编译过程需要静态链接对应的引擎库,对对应的引擎so文件进行签名,所以对于攻击者来说,luaL_loadbuffer函数可以执行显存DUMP得到正常的字节码,然后使用反编译工具进行进一步的修改;

2.2.2:修改Lua虚拟机中操作码的顺序

对于Lua等解释型语言来说,无论是虚拟机还是相应的反编译工具都有固定的操作码顺序。 有意识的安全厂商会通过改变对应操作码的顺序来保护它们,如下图所示: 左边是正常的操作码顺序,右边是随机化后的操作码;

这样重新编译处理后的luac就可以看到如下图所示:对应的opcode不同;

操作码不同,对应的解释顺序如下:

至于目前对这些自定义更改的操作码的处理方式,攻击者可以通过将目标虚拟机加载的Lua文件与正常虚拟机编译的luac进行比较,“吐出”对应的映射表,然后进一步与反编译工具的帮助。 编译进行进一步处理;

或者因为Lua本身没有很多操作码,如上图所示,可以很容易定位到正常的执行顺序; 因此,这些处理方法都不是很安全。

2.2.3:保护Lua的虚拟机执行进程

可以看到,部分游戏厂商对Lua虚拟机进行了安全编译,使得整个虚拟机的解释过程变得复杂化。 虽然这种做法“治标不治本”。

类似于下图:左边和右边是功能相同的函数,只不过左边是由安全编译器处理的:

以往的处理方法存在两个问题:

首先,由于Lua本身是开源的,经过安全编译处理后,相应的符号仍然存在; 攻击者可以轻松找到它;

其次,攻击者可能不需要太关心中间的虚拟化解释和执行过程,因此从整个防护的角度来看,并没有什么实质性的作用。

2.2.4 小结:

目前以luac为主要表现形式的游戏厂商主要综合使用前三种保护方式。 但经过分析可以看出,它并没有从根本上起到很好的作用,只能阻止一些中间攻击者。 对于真正的力量生命值的保护没有抓住。

2.3luajit方式

考虑到Lua的执行效率,luajit诞生了。 从名字就可以看出,luajit是由Lua的即时编译器生成的,是一个手写汇编实现的Lua类库,也是一个可以直接生成机器码的JIT编译器。 设备; 根据dynasm动态生成buildvm_xxx.h文件,并进一步解释并执行;

目前很多游戏厂商为了进一步保护游戏中的脚本,将Lua处理成luajit格式。 对于luajit来说,也有相应的反编译工具,比如ljd或者luajit-lang-toolkit或者luajit-decomp,所以有的游戏厂商会在通过luajit方法后进行加密处理;

借助cocos内置的加密,大多数厂商都会将自己的私钥和签名值设置如下;

并调用对应的XXTEA加密算法,加密后可以看到如下luajit编码方式:

面对这些加密处理方式,解密也很简单:

一是可以利用HOOK在关键函数处进行内存转储;

其次,也可以反编译代码,如下图所示,就是某个著名游戏对应的key和sign值,然后调用XXTEA揭秘,得到标准的luajit方法; 然后结合反编译器进行反编译修改等;

3、加强Lua保护

从之前lua、luac、luajit的保护和逆向方面来看,如果想要真正保护Lua游戏,可以从以下几个角度入手:

使用脚本选择保护算法?

如何进一步删除虚拟类库中的符号?

如何让开发者接入尽可能方便?

我们应该如何进一步考虑保护的硬度?

3.1 算法的选择性

目前很多游戏厂商都采用Quick-Cocos2dx或者以XXTEA为代表的cocos自带的算法来对脚本、zip包等进行加密,这样攻击者就可以很容易地利用这种方法。 算法完成揭秘等操作; 因此,算法的设计越“私有化”越好。 这样可以在第一级阻止攻击者静态恢复脚本。

3.2 清除虚拟类库中的符号

游戏 源码 泄露-深入剖析Lua脚本加密技术,为游戏代码添加“紧缩魔咒”

通过它,你可以看到,无论是自定义的操作码解释器,还是用来处理Lua虚拟机的安全编译器,都存在问题。 由于静态链接的问题,符号表被暴露。 符号表的存在为攻击者提供了丰富的分析线索游戏 源码 泄露,因此可以躲避Lua的虚拟机解释引擎,既保护了内部的私有化解密算法,又去除了符号,让攻击者难以进行进一步的分析。 已达到第二级保护。 同时,安装了shell后,游戏周围的可疑环境就会被监控,比如上面提到的HOOK。

3.3 让开发者尽可能方便的访问

比如上面提到的游戏 源码 泄露,Lua混淆的时候,应该尽可能的考虑到开发者的功能业务。 是游戏的逻辑业务还是热更新? 否则,就像上面提到的基于源代码的混淆一样,每次随机化都会导致事半功倍。

3.4 如何进一步考虑防护硬度

从里面的分析过程可以看出,我们从以下几个角度加强了硬度:

混淆Lua源码时,可以坑luac和luajit对应的反编译工具。 由于部分攻击者不了解反编译原理,因此加强防范攻击者反编译;

由于Lua自身句型的灵活性,可以定制Lua自身的格式,同时可以更改相应的类库部分。 这样,攻击者就必须分析定制的格式和相应的类库部分,增加了分析的难度。

总结一下,如下图所示:

四。 概括

在游戏开发领域,Lua、C++、C#的结合带来了非常强大的功能,但也不可避免地存在被破解的风险。

安全攻击通常针对破解软件的代码。 在导致泄密的网络安全“短板”中,代码​​安全是最本质、最核心的问题。

不可证明的是,在数字经济时代,对于科技公司来说,代码不仅是版权的一部分,更是核心商业秘密之一。 一旦核心代码泄露,就会导致软件核心技术外流,这对企业来说几乎是致命的打击。

黑客破壳、逆向工程后,“裸奔”代码面临全面暴露的风险,因此增加加密算法非常有必要。

网易易盾游戏反作弊,分享前沿技术知识和趋势,帮助企业规避影响业务健康发展的安全风险。 结合网易多年的游戏安全实践经验,亿盾针对游戏行业常见安全风险,提供一站式全生命周期手游安全解决方案。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 游戏源码 游戏 源码 泄露-深入剖析Lua脚本加密技术,为游戏代码添加“紧缩魔咒” https://www.wkzy.net/game/184754.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务