网站首页 > 技术教程 正文
随着手游的发展,越来越多的Cocos-lua端游开发者转移到手游平台。Lua脚本编写逻辑的手游也是越来越多,伴随着Lua手游的增加,因此Lua的安全问题对于游戏开发者亦是迫在眉睫。
一. Lua 手游使用场景
1.Unity3d
Unity3d 引擎的原生脚本语言是 C#, 由于iOS系统安全限制无法热更新C#, 从而出现了许多使用Lua的热更新框架,如toLua/uLua/xLua 等。这些框架将 Unity3d 引擎API封装为Lua接口,让游戏开发人员拥有使用Lua脚本开发游戏逻辑/界面的能力。需要热更新时,服务端可以动态下发Lua 脚本,客户端加载新的Lua脚本即可更新游戏逻辑/界面等。
2.Cocos2dx
在 Cocos2dx 引擎中,可选的脚本语言有 Lua 与 Javascript。相对于 Javascript, 因 Lua 更适合制作非 h5 游戏而被广泛使用。
二. Lua 手游识别方法
Android平台apk包直接解压,找到./lib目录下的so逻辑模块,寻找是否内嵌lua引擎,如果有libcocos2dlua、libhellolua字样,其内嵌lua引擎的可能性极大。然后将可疑so拖入IDA,查看lua引擎字符串,找到lua引擎内字符串,那该手游基本就可以确定是内嵌了一个lua引擎,并极大可能是用lua编写游戏逻辑。
三. 常见破解方法
Lua手游的破解主要分为两种,一种为拿到游戏Lua脚本并进行替换。另一种是使用辅助工具加载自身的一个Lua脚本(该脚本和游戏脚本在同一个命名空间,可直接修改游戏脚本数据,调用函数),在此我们只介绍获取Lua脚本的常规方法。
1.从assets资源中获取
一般在assets目录下可获得lua或者luac源码。若获取的是lua源码类型,可直接修改后重打包即可。而针对luac源码类型,可使用unluac等开源项目/工具反编译回lua源码。然后修改直接替换回修改后的lua源码文件即可。
2.从luaL_loadbuffer函数获取
luaL_loadbuffer是一个比较常规的加载点。Cocos引擎的Lua加载器为cocos2dx_lua_loader,但最终都是调用luaL_loadbuffer函数来加载。即使脚本有做加密的情况下也一般都会在这上面对Lua脚本进行解密,即我们可在luaL_loadbuffer函数获取buff参数可得到解密后的Lua脚本,修改逻辑后可以直接在这个点替换回去。
3.从底层reader函数处获取
Lua引擎加载lua脚本最底层是lua_reader函数。该函数负责最底层的脚本buff遍历,因此在此处dump出来的lua脚本是最纯正的lua脚本,所有加密都已经被去除(修改lua opcode或者引擎逻辑除外)。
四. 常见Lua保护方案
1.cocos2dx xxtea 加密
cocos compile 命令提供了--lua-encrypt 等参数用于加密 Lua 脚本:
lua 相关参数:--lua-encrypt 开启 XXTEA 加密功能。--lua-encrypt-key LUA_ENCRYPT_KEY 指定 XXTEA 加密功能的 key 字段。--lua-encrypt-sign LUA_ENCRYPT_SIGN 指定 XXTEA 加密功能的 sign 字段。
但是这个加密容易被破解,外挂制作者可以很容易就在 libcocos2dlua.so 中找到 xxtea 的密钥, 之后就可以解密出脚本:
2. 自定义 Lua 操作码
有些游戏会自定义 Lua 操作码,使得常规的luadec/unluac无法反编译字节码。可以提高一些外挂制作门槛,但由于代码自身保护强度不够,被轻易还原操作码,进而被反编译。
五.蛮犀安全Lua 加固方案
蛮犀安全针对 Lua 脚本存在的各方面安全风险问题,在深入理解 Lua 语言特点与Lua虚机的基础上,采用全新的 Lua 脚本保护方案,从全方面确保 Lua 脚本不被逆向分析与破解。
1.字节码深度加固
Cocos2dx 使用 xxtea 整体加固脚本文件,这种方式不仅易于被分析出加密密钥,也容易被hook luaL_loadbuffer而得到明文文件。采用深度加固的方式,确保 Lua 脚本无法被直接解密,确保无法通过hook luaL_loadbuffer或更底层的lua_reader函数截获明文脚本文件。
正常的字节码:
00000000 1b 4c 75 61 53 00 19 93 0d 0a 1a 0a 04 08 04 08 |.LuaS...........|
00000010 08 78 56 00 00 00 00 00 00 00 00 00 00 00 28 77 |.xV...........(w|
00000020 40 01 00 00 00 00 00 00 00 00 00 00 01 02 04 00 |@...............|
00000040 80 00 02 00 00 00 04 06 70 72 69 6e 74 04 0c 68 |........print..h|
00000050 65 6c 6c 6f 20 77 6f 72 6c 64 01 00 00 00 01 00 |ello world......|
保护后的字节码:
00000000 1b 1b 1b 03 04 84 a6 d6 b2 48 d2 2e 35 5d ee 68 |.........H..5].h|
00000010 e3 88 78 2b 30 05 b3 11 21 44 78 ae 01 06 db 8f |..x+0...!Dx.....|
00000020 16 26 da 8e 16 db ed 45 0a 2d fb d0 42 3e 28 4d |.&.....E.-..B>(M|
00000030 48 12 fa df a2 9e 02 1a 9f 3c 2e 8b b8 8c d5 00 |H........<......|
2.运行时动态保护
蛮犀安全深入虚拟机引擎,使用压缩/混淆/控制流平坦化/指令等效替换等方式定制了独有的运行时信息,进一步提高逆向分析难度。
3.Lua 虚拟机代码保护
与此同时,加固方案中配合高强度的无导出符号so加固方式加固,使得Lua 虚机代码不易被逆向分析。
正常的Lua虚拟机native层代码,可看到大部分Lua接口:
加固处理后的Lua虚拟机native 层代码,无法找到任何接口:
4.支持平台
支持iOS、Android、PC全平台。
5.用户使用方便
使用用户无需更改上层 Lua 脚本代码,即可对接开发过程,并整个过程对开发者透明。
6.总结
蛮犀安全从多个攻击角度审视 Lua 脚本安全问题,从Lua语言多各个层面出发,推出了全新的Lua脚本加固方案,该方案能为Lua代码提供高强度的保护。同时支持官方Lua与LuaJIT,支持Cocos2dx 引擎,支持uLua/toLua/ xLua等Unity3d插件。
- 上一篇: 想做游戏开发需要学什么?
- 下一篇: C++学习 | 面试官:我们只想要这样的C++工程师
猜你喜欢
- 2024-11-27 志玲姐姐带我飞!《女神联盟》安卓版10月底公测!
- 2024-11-27 C/C++实现雷霆战机游戏,超级武器版「最后附源码」
- 2024-11-27 WWDC 2014 iOS 8游戏相关的十个重大更新
- 2024-11-27 C++学习 | 面试官:我们只想要这样的C++工程师
- 2024-11-27 想做游戏开发需要学什么?
- 2024-11-27 跨平台的UI自动化框架,适用于游戏和App,支持私有化部署
- 2024-11-27 不用 H5,闲鱼 Flutter 如何玩转小游戏?
- 2024-11-27 当下单职业打金中最火爆的传奇手游!不来看看?
- 2024-11-27 C++ 能用来做什么?八大就业方向分析
- 2024-11-27 微信小程序自动化测试工具Airtest
你 发表评论:
欢迎- 最近发表
-
- 函数公式的7大潜规则,这次给你讲透了
- 数据逆向查找不止有vlookup,你该知道的三种逆向查询操作
- Vlookup函数怎么一次查找能返回多个结果?
- vlookup函数的嵌套你用过吗?一次可以引用3个表格的数据
- Vlookup函数的新用法,查询合并单元格,很多Excel高手都不知道
- 分明有数据,公式也没错,为什么vlookup还是会返回错误值
- 条件判断还在用if函数就out了,vlookup函数模糊查询一键完成
- EXCEL函数 VLOOKUP函数 HLOOKUP函数
- excel中vlookup函数的用法(excel中vlookup函数公式)
- 自动获取vlookup函数的第三参数,再也不用一列一列的数了
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)