深入解析Lua脚本加密技术,给游戏代码加上“紧箍咒”

更新日期:2022年05月10日

       不少安全专家表明, 在互联网上失掉对代码的托辞,

就像把银行的规划图交给抢劫犯相同。
       Lua是一种被广泛用于游戏开发中的计算机言语, 便利开发者定制自己所需的功用。其间, 红遍全球的《愤恨的小鸟》便是由Lua言语用Wax开发的。此外, 梦境西游、奇观暖暖、高兴消消乐、放置奇兵、最强蜗牛等手游也采用了Lua言语进行编写。近年来, Lua脚本在游戏职业长时刻盛行, 但Lua脚本走漏事情层出不穷, 其安全性也引起重视。
       不法分子经过开私服、开外挂等途径, 完结对游戏代码的商业变现, 这给游戏开发者形成巨大经济损失, 也危及游戏玩家包含账号、物件在内的虚拟常规安全。本文将聚集Lua脚本加密, 深化论述Lua常见的三种加密方法, 并探究怎样进一步的维护Lua代码。一、布景“Lua”在葡萄牙语中是“月亮”的意思, 1993年由巴西的PontificalCatholicUniversity开发。
       作为细巧的解说性言语, Lua具有简略、轻量、易维护的特色, 且能够依据自身的特性来模仿面向对象, 因而其被嵌入到越来越多的运用中, 特别是游戏中, 为游戏开发带来了很大的快捷性。例如, Cocos引擎的干流游戏、U3D游戏中的热更结构xlua都会用到Lua言语。一起, 因为Lua言语自身的这些特性, Lua代码自身并不安全, 许多时分进犯者能够获取Lua源码进行阅览,

剖析, 盗用以及篡改等, 然后进一步的重打包, 给游戏自身带来了很大的安全隐患。二、Lua现有的维护关于这种脚本解说性言语, 从代码维护的按照跟它自身所体现的方式是密不可分的, 关于Lua而言, 现在市道上手游包中能够看到的首要是lua源码, luac, luajit三种的体现方式, 接下来会具体的介绍每一种方式以及自身现有的维护以及所暴漏出来的优缺点。2.1Lua源码现在市道上用到Lua源码自身在游戏中呈现的并不是许多, 不念情义在一些热更下发中会比较多;因而从源码维护的思路会很简略的想到针对Lua源码自身进行混杂维护的计划;现在市道上针对Lua源码进行混杂的厂家首要有以下这几家:XFuscator:Luraph:SyanpseXen:Ironbrew:Verdict:关于这种依据源码的混杂, 长处是是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的虚拟机源码处能够得知在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的文件, 进一步的解说履行;现在许多的游戏厂家, 为了进一步的维护游戏中的脚本, 将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游戏, 能够从以下几个按照动身:运用脚本的维护的算法的挑选?关于虚拟解说器中的符号怎样进一步的消除去?怎样让开发者尽可能的接入便利?关于维护的强度上咱们应该怎样进一步的考虑?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#的组合带来了非常强壮的功用, 但也不免存在被破解的说话。安全进犯常常以代码为方针, 到达破解软件的意图。在导致走漏的网络安全“短板”中, 代码安满是最实质、最中心的问题。不可否认的是, 在数字经济时代, 关于科技企业而言, 代码既是著作权的一部分, 也是中心商业秘要之一。中心代码一旦走漏, 导致软件的中心技术外流, 这关于企业几乎是丧命的冲击。黑客在砸壳、逆向之后, “裸奔”的代码就面对悉数露出的说话, 添加加密算法非常有必要。

Copyright © 2010-2016 商动力科技有限公司 shangdonglikejiyouxiangongsi ,All Rights Reserved (booksfornooks.com) ICP备案号:青G3-20167309-11