许多安全可靠研究者表示,在网络上丧失对标识符的控制,就像把银行的草图交予抢匪一样。

Lua是一种被广为用作格斗游戏合作开发中的计算机词汇,方便快捷合作开发人员订制自己所需的机能。其中,风靡全球的《愤慨的兔子》就是由Lua词汇用Wax合作开发的。此外,魔幻诛仙、空前绝后暖暖、高兴绍尼县乐、置放变形金刚、最强大蛞蝓等手机游戏也选用了Lua词汇进行撰写。

自动草稿

近几年,LuaJAVA在格斗游戏行业长年盛行,但LuaJAVA外泄该事件比比皆是,其安全可靠性也引起关注。犯罪分子通过开Persona、开BUG等有效途径,实现对格斗游戏标识符的商业性增值,这给格斗游戏合作开发人员导致非常大损失,也严重危害格斗游戏玩者包括帐号、U盘其中的交互式金融资产安全可靠。

责任编辑将著眼LuaJAVA身份验证,深入细致阐释Lua常用的四种身份验证方式,并积极探索如何进一步的为保护Lua标识符。

一、大背景

Lua在西班牙语中是星星的原意,1993年由阿根廷的Pontifical Catholic University合作开发。

自动草稿

作为轻巧的如前所述词汇,Lua具有单纯、高性能、易为保护的特征,且可以根据另一方面的优点来演示程序语言,因此其被内嵌到愈来愈多的应用领域中,特别是格斗游戏中,为格斗游戏合作开发带来了非常大的便利性。比如,Cocos发动机的非主流格斗游戏、U3D格斗游戏中的热更架构xlua单厢加进Lua词汇。

同时,由于Lua词汇另一方面的这些优点,Lua标识符本身并不安全可靠,很多时候攻击者可以获取Lua源码进行阅读,分析,盗用以及篡改等,然后进一步的重打包,给格斗游戏本身带来了非常大的安全可靠隐患。

二、Lua现有的为保护

对于这种JAVA如前所述词汇,从标识符为保护的角度跟它另一方面所表现的形式是密不可分的,对于Lua而言,目前市面上手机游戏包中可以看到的主要是lua源码,luac,luajit四种的表现形式,接下来会详细的介绍每一种形式以及另一方面现有的为保护以及所暴漏出来的优缺点。

2.1Lua源码

目前市面上加进Lua源码本身在格斗游戏中呈现的并不是很多,但是在一些热更下发中会比较多;因此从源码为保护的思路会很容易的想到针对Lua源码本身进行混淆为保护的方案;目前市面上针对Lua源码进行混淆的厂家主要有以下这几家:

XFuscator:

Luraph:

Syanpse Xen:

Ironbrew:

Verdict:

对于这种基于源码的混淆,优点是是Lua经过处理以后更加的复杂化了,增大了攻击者进行分析的成本和难度;由于攻防升级,对于上面的混淆也有相对的反混淆处理方式。同时混淆除了自己混淆本身所表现出来的兼容性问题以外,对于合作开发人员也有以下这几个问题:

1.同一段标识符的混淆在不同时间进行混淆,所得到的混淆效果是不同的:

由于混淆器为了增大混淆的程度和难度,里面会有随机的标识符要进行热更,热更的时候会进行比较,这样没办法进行热更处理;

2.针对Lua语法混淆的兼容性问题:

由于Lua语法的灵活性,因此去混淆处理的兼容性问题比较多;

3.合作开发人员接入问题:

对于合作开发人员而言进行接入以及出现问题跟第三方进行沟通解决的成本比较大;

2.2luac的形式

luac是作为自己的词汇的字节码格式,与其他JAVA词汇python等交互式机中所表现的出来是一样的,等Lua加载到内存中以后,交互式机会加载对应的字节码,由于lua主要有5.1、5.2、5.3三个版本,因此也会有对应的三个格式的luac版本,目前在手机游戏中非主流是5.2的版本;

虽然说luac不会以源码的形式出现,但是由于Lua字节码的执行以及格式可以根据在Lua源码中进行探知到,比如luadec反编译工具,因此luac形式还是不安全可靠的。目前市面上对于这种为保护主要有三个形式:

2.2.1:Luac的身份验证

从Lua的交互式机源码处可以得知在luaL_loadbuffer函数会加载Lua,因此有安全可靠意识的厂家会对Lua进行身份验证。修改这个源码,在真正的执行前进行解密;

但是由于交互式机的执行过程是开源的,并且由于cocos工程编译处理需要静态链接对应的发动机库,这样对应的发动机so文件是有符号的,因此对于攻击者来说,在luaL_loadbuffer函数处可以进行内存的DUMP得到正常的字节码,然后使用反编译工具进行处理,进行进一步的修改;

自动草稿

2.2.2:修改Lua交互式机中opcode的顺序

对于Lua这种如前所述词汇,无论是交互式机,还是对应反编译工具都是有一个固定的opcode的顺序,有意识的安全可靠厂商会通过修改对应的opcode的顺序进行为保护,如下图所示:左边是正常opcode的顺序,右边是进行随机化以后的opcode的;

自动草稿

这样从新编译处理完以后的luac可以看到如下图所示:对应的opcode是不一样的;

自动草稿

opcode不一样以及对应的解释顺序是如下:

自动草稿

目前对于这种自定义修改opcode的处理方式,目前攻击者可以根据通过目标交互式机加Lua文件跟正常交互式机编译的luac进行对比吐出对应的映射表,然后进一步的借助于反编译工具进行反编译处理进一步的处理;

或者由于Lua另一方面的opcode不是很多,如上图所示可以很轻松的定位到正常的执行顺序;因此这种处理方式也不是很安全可靠。

2.2.3:对于Lua的交互式机执行过程进行为保护

可以看到有的格斗游戏厂商对Lua交互式机进行安全可靠编译处理,也就是复杂化整个交互式机的解释流程,这种做法其实治标不治本

类似如下图所示:左右是相同机能的一个函数,只是右边是经过安全可靠编译器处理的:

自动草稿

对于上面这种处理方式存在的两个问题:

一是由于Lua本身是开源的,经过安全可靠编译处理完以后,对应的符号还是存在;攻击者很容易的定位;

二是对于攻击者而言其实不用太关心中间的交互式化解释执行过程,因此从整个为保护的角度来讲,实质性作用不大。

2.2.4小结:

目前的以luac为主要表现形式的格斗游戏厂商主要是对于上面四种为保护的综合使用,但是经过分析可以看到从根本上没有起到一个好的作用,只能阻止部分初级的攻击者,对于真正的攻击点的为保护没有抓住。

2.3luajit的形式

由于考虑到Lua的执行效率问题,luajit诞生了,从名字上可以看出,luajit是Lua的即时编译器生成的,一个用手写汇编实现的Lua解释器和一个可以直接生成机器标识符的JIT编译器;根据dynasm动态生成buildvm_xxx.h的文件,进一步的解释执行;

目前很多的格斗游戏厂家,为了进一步的为保护格斗游戏中的JAVA,将Lua处理为luajit的格式,对于luajit而言,也有对应的反编译工具,ljd或者luajit-lang-toolkit或者luajit-decomp因此进而一些格斗游戏厂商在经过luajit形式以后会进行身份验证处理;

借助于cocos自带的身份验证,大部分的厂商会通过如下设置自己私有的key和sign值;

自动草稿

以及调用对应的XXTEA的身份验证算法,可以看到经过身份验证以后得到如下的luajit的编码形式:

自动草稿

面对上面这种身份验证的处理方式,解密也非常的单纯:

一是可以使用HOOK在关键的函数处进行内存DUMP;

二是也可以通过反编译标识符,如下图所示为某知名格斗游戏对应的key和sign值,然后调用XXTEA进行解密可以得到标准的luajit的形式;然后结合反编译器进行反编译修改等等;

自动草稿

三、Lua为保护的加强

通过上面对于lua、luac、以及luajit的为保护以及逆向的角度来看,要想真正的去为保护Lua格斗游戏,可以从以下几个角度出发:

使用JAVA的为保护的算法的选择?

对于交互式解释器中的符号怎么进一步的消除掉?

怎么让合作开发人员尽可能的接入方便快捷?

对于为保护的强度上我们应该怎么进一步的考虑?

3.1算法的选择性

目前很多的格斗游戏厂商通过Quick-Cocos2dx或者cocos自带的算法,以XXTEA这种为代表进行身份验证处理,包括对于JAVA以及zip包等等身份验证,这样使得攻击者也能够轻意的去利用这些算法完成解密等操作;因此算法的设计越私有化越好,这样可以在第一个层面上做到防止攻击者进行静态的还原JAVA。

3.2消除交互式解释器中的符号

通过上面可以看到无论是自定义opcode解释器还是使用安全可靠编译器处理Lua交互式机,这其中存在一个问题,由于静态链接的问题,符号表是暴漏的,符号表的存在为攻击者提供了丰富的分析线索 ,因此可以对Lua的交互式机解释发动机进行加壳处理,不仅仅能够为保护上面的私有化解密算法,同时符号的消除使得攻击者很难得进一步去分析。做到了第二个层面上的为保护,同时有了壳以后会对格斗游戏周围的可疑环境进行检测,比如上面提到的HOOK等。

3.3让合作开发人员尽可能的接入方便快捷

比如上面提到的对于Lua在混淆处理的时候,尽可能的考虑到合作开发人员的机能业务,是格斗游戏的逻辑业务还是热更?否则像上面提到的基于源码的混淆,每次的随机化会导致事倍功半。

3.4为保护的强度上应该怎么进一步的考虑

从上面的分析过程可以看到这里面我们从以下这几个角度进行强度上的加强:

在对Lua源码混淆处理的时候,可以对luac以及luajit对应的反编译工具进行对坑,由于部分攻击者不是很懂反编译的原理,加强使得攻击者不能反编译;

由于Lua另一方面语法的灵活性,可以对于Lua本身的格式进行自定义化,同时修改对应的解释器部分,这样攻击者就不得不分析自定义的格式以及对应的解释器部分,加大分析的难度。

综上所述,如下图所示:

自动草稿

四、总结

在格斗游戏合作开发领域,Lua与C 、C的组合带来了十分强大的机能,但也难免存在被破解的风险。

安全可靠攻击常常以标识符为目标,达到破解软件的目的。在导致外泄的网络安全可靠短板中,标识符安全可靠是最本质、最核心的问题。

不可否认的是,在数字经济时代,对于科技企业而言,标识符既是著作权的一部分,也是核心商业性机密之一。核心标识符一旦外泄,导致软件的核心技术外流,这对于企业几乎是致命的打击。

黑客在砸壳、逆向之后,裸奔的标识符就面临全部暴露的风险,增加身份验证算法十分有必要。

举报/反馈

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!