百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

lua脚本如何加密?

connygpt 2024-11-06 12:07 28 浏览

随着手游的发展,越来越多的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插件。

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&amp;Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick &#39;n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...