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

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

Lua是一种广泛应用于游戏开发的计算机语言,可以让开发者轻松定制自己需要的功能。 其中,举世闻名的《愤怒的小鸟》就是用Lua语言和Wax开发的。 据悉,梦幻西游、奇迹暖暖、开心小乐、放置英雄、最强蜗牛等手游也都是使用Lua语言编写的。

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

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

一、背景

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

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

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

2. Lua现有的保护

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

2.1Lua源码

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

XFuscator:

卢拉夫:

SyanpseXen:

铁酿:

判决:

对于这些基于源代码的混淆,优点是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或者cocos自带的算法,比如XXTEA等来进行加密处理,包括对脚本、zip包进行加密,这样攻击者就可以很方便的利用这个算法来完成操作比如去神秘化; 算法的设计越“私密”越好,这样可以在第一层阻止攻击者执行静态恢复脚本。

3.2 清除虚拟类库中的符号

通过它我们可以看到,无论是定制opcode类库游戏源码设置,还是使用安全编译器处理Lua虚拟机,都存在问题。 由于静态链接的问题,符号表暴露了。 符号表的存在为攻击者提供了丰富的分析线索,可以免杀Lua虚拟机解释引擎,不仅可以保护内部的私有化解密算法,还可以清除符号,使攻击者很难进一步进行攻击。分析。 已达到第二级保护。 同时,借助外壳,它会监视游戏周围的可疑环境,例如上面提到的HOOK。

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

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

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

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

在混淆Lua源码时,可以坑luac和luajit对应的反编译工具,因为有些攻击者不了解反编译的原理,而攻击者则加强了防止反编译;

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

总结一下,如右图:

四。 概括

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

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

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

黑客破壳逆向代码后,“裸奔”代码面临全面暴露的风险。 减少加密算法是非常有必要的。

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

收藏 (0) 打赏

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

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

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

常见问题

相关文章

官方客服团队

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