Cocos引擎加密方案解析

据2023年数据显示,Cocos引擎全球游戏市场的占有率约为20%,国内手游占有率约为40%,在国内手游市场中,不少热门游戏均为Cocos引擎研发,如《捕鱼达人》、《梦幻西游》、《剑与远征》等。

而在近年来国内火热的小游戏赛道,Cocos引擎占有率则高达64%。其内置的H5引擎、免费开源、轻量化等优势,得到众多小游戏开发者青睐,爆款小游戏《羊了个羊》就是由Cocos引擎研发。

与 Unity 相比,Cocos引擎的优势在2D画面渲染方面表现突出,更契合中小型游戏的需求。但同unity一样,Cocos引擎同样绕不开安全问题,由于其开源的特性,针对Cocos引擎的破解更为猖獗。

Cocos引擎的主要资源、代码文件位于包体中 assets/ 目录下,我们以 JavaScript 脚本为例,资源储存在 .JSC 文件中。由于文件无法直接打开进行编译,破解者会在引擎启动工程中找到 libcocos2djs.so 文件,这里储存着秘钥。

libcocos2djs.so文件储存着Cocos秘钥

随后,破解者会尝试将 .SO 文件放入 IDA 等工具中进行反汇编,通过搜索 applicationDidFinishLaunching ,即可找到秘钥,最后将秘钥进行编译即可得到资源、代码文件。

使用IDA工具查找Cocos引擎秘钥

此外,Cocos引擎中还有另一种脚本语言 Lua,相对于 JavaScript ,Lua 更适合制作非 h5 游戏,也同样面临着严重的破解风险。

由于 Lua 是一种解释型语言,所以 Lua 虚拟机可以直接解释执行 Lua 源代码,这就导致许多游戏开发者直接将 Lua 源代码打进 apk / ipa 中。

这种操作相当于直接泄漏了游戏源代码,大大降低了外挂制作门槛,更有可能被拿去做换皮肤二次开发。

FairGuard观察到,部分厂商采用了LuaJIT、自定义Lua等手段,但在面对专业的反编译器及黑灰产猛烈攻势,还是难逃被破解的命运。

反编译器luadec

资源文件作为游戏的重要资产,里面储存着图片、代码、音视频等重要资源,尤其是Cocos引擎中的lua文件,一旦泄露会造成竞品抄袭、知识产权受损、游戏内容剧透、篡改游戏资源制售外挂等一系列严重问题。

如何有效对Cocos引擎进行加密,提高破解门槛,成了游戏厂商的必修课。针对上述问题,FairGuard制定了一套针对Cocos引擎的加密保护方案:

◆ 引擎模块加固

使用业界独创的无导入函数SO加壳对游戏引擎模块进行加固,保护游戏代码不被分析,防止破解者的进一步操作。

FairGuard加固后IDA导出表中无SO函数

◆ JS脚本加密

使用高强度算法对JS脚本进行加密,并防止通过HOOK破解脚本。

◆ C++代码加密

对C编译后的动态库进行加固,防止被反编译。

◆ lua脚本加密

采用深度加密的方式,确保 Lua 脚本无法被直接解密,支持ulua/tolua/slua/xlua等不同 Lua 的脚本加密,同时对 Lua 解析模块进行加固。

正常的字节码:

我们保护后的字节码:

◆ 资源加密

FairGuard加密进行了特殊构造,加密方案只对核心关键位置做加密处理,对游戏加载速度、运行流程程度的几乎没有影响,实现了无感知。

◆ 反外挂

除了各类加密保护,FairGuard加固方案还提供行为检测手段及反修改器、反调试、反注入、反变速等反外挂功能,更好的保护游戏安全。

◆ 防破解

采用FairGuard业界独家技术「无API签名校验技术」,从底层出发,对游戏的引擎与代码进行加密处理,可以针对游戏包签名和文件完整性进行多重校验,防止游戏被植入恶意模块、剔除广告等。

此外,FairGuard Cocos引擎的加密保护方案还具备以下优势:

◆ 低性能开销

纯native方案,安全模块都是C++编写,效率很高。加解密算法使用私有混淆和精巧构造,极大减小性能开销,加固前后几乎感觉不到影响。

◆ 多端互通,支持热更

FairGuard Cocos引擎加密方案支持 Android / iOS / PC / H5平台,支持资源在线热更。

◆ 操作便捷,接入成本低

使用非常简单,只要运行一个命令行即可完成对整个游戏资源的加密。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/31121.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java实现分类下拉树,点击时对应搜索---后端逻辑

一直想做分类下拉,然后选择后搜索的页面,正好做项目有了明确的需求,查找后发现el-tree的构件可满足需求,数据要求为:{ id:1, label:name, childer:[……] }形式的,于是乎,开搞! 一…

算法训练营day15--110.平衡二叉树+ 257. 二叉树的所有路径+ 404.左叶子之和+222.完全二叉树的节点个数

一、110.平衡二叉树 题目链接:https://leetcode.cn/problems/balanced-binary-tree/ 文章讲解:https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解:https://www.bilibili.com/video/BV1Ug411S7m…

体育时间:“中国第一”的出海代表们,一致瞄准了这一赛道?

2024年无疑又是一个体育赛事超级大年。 从1月的亚洲杯,2月的世乒团体锦标赛、第14届冬运会、到6月欧洲杯与美洲杯隔空对决,巴黎奥运会也将在7月盛大开赛,随后则还有8月的巴黎残奥会,对于期待万分的体育粉丝们,这将是极…

计算机编码以及URL转码

目录 一、计算机编码 1.ASCII编码 2. GB2312编码 3.GBK编码 4.UTF-8编码 二、URL转码 1.encodeURI和decodeURI 2.encodeURIComponent 和 decodeURIComponent 三、Base64 一、计算机编码 在计算机中,所有的数据在存储和运算时都要使用二进制数表示&#xf…

Spring Boot程序打包docker镜像

1.将springboot程序使用maven package打包出jar。 2.创建dockerfile。 FROM openjdk:8 VOLUME /tmp EXPOSE 8601 #ADD 后面的参数是项目名字 / 后面的参数是自定义的别名 ADD webflux-hello-0.0.1-SNAPSHOT.jar /webflux-hello.jar #这里的最后一个变量需要和前面起的别名相同…

Python 爬取淘宝指定搜索商品评论 标题 销量 计算sign

只需要替换原来的Cookie和token即可使用,自动计算对应链接地址的sign直接使用即可。需要注意是一个账号爬取过多会有验证码 import json import hashlib import random import timeimport pandas as pd import requestsresults []def fetch_review_list(datas, md…

vuejs3+elementPlus后台管理系统,左侧菜单栏制作,跳转、默认激活菜单

默认激活菜单,效果&#xff1a; 默认激活菜单&#xff0c;效果1&#xff1a; 默认激活菜单&#xff0c;效果2&#xff1a; 跳转链接效果&#xff1a; 制作&#xff1a; <script setup> import {useUserStore} from "/stores/userStore.js"; import {ref} fr…

适配器模式(大话设计模式)C/C++版本

适配器模式 C #include <iostream> using namespace std; // 球员 class Player { protected:string name;public:Player(string name) : name(name) {}virtual void Attack() 0;virtual void Defense() 0;virtual ~Player() {} }; // 前锋 class Forwards : public P…

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题

20240613解决飞凌的OK3588-C的核心板的USB3.0接口不读U盘的问题 2024/6/13 15:21 缘起&#xff0c;由于USB3.0的CC芯片在飞凌的OK3588-C的开发板的底板上&#xff0c;一切正常。 如果你单独使用核心板&#xff0c;很容易出现这个问题【省成本没有使用CC芯片】&#xff1a;不读U…

300PLC连接Modbus转Profibus网关与阀岛modbusRTU通讯

一、概况 300PLC作为常见的控制器设备&#xff0c;在与阀岛Modbus RTU通讯时&#xff0c;通常需要借助Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;来实现连接和数据交换。PLC通过Modbus转Profibus网关&#xff08;XD-MDPB100&#xff09;与阀岛Modbus RTU通讯是比…

labelme使用笔记:目标检测数据集标注和语义分割数据集批量生成

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享&#xff0c;包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中&#xff0c;集合是我们最常用的数据结构之一。为了方便我们操作集合&#xff0c;Google的Guava库提供了一个名为Lists的工具类&#xff0c;它封装了许多用于操作List对象的实用方法。在本文中&#xff0c;我们将详细介绍其常见的用法&#xff0c;以帮助您更好…

PyQt5 生成py文件不能运行;pushButton点击事件;QTextEdit 获取输入框内容

目录 cant open file c.pyuic: c.pyuic $FileName$ -o $FileNameWithoutExtension$.p PyQt5 生成py文件不能运行 pushButton点击事件 QTextEdit 获取输入框内容 整体运行代码: Creating a Qt Widget Based Application | Qt Creator Manual cant open file c.pyuic: c.…

NAT Easyip实验

我们这篇博客将重点讲述easy ip的配置&#xff1a; 以下面的一个简单的实验拓扑图为例&#xff1a; 本实验使用的网络地址&#xff1a; 1. 我们先来完成基础配置&#xff1a; 1.1AR1的基础配置&#xff1a; 1.2AR2上的基础配置 1.3完成AR1和AR2的基础配置后&#xff0c;我们…

rust数据类型

目录 一&#xff0c;基本类型 1&#xff0c;基本类型 &#xff08;1&#xff09;整数类型 &#xff08;2&#xff09;浮点数 &#xff08;3&#xff09;bool类型 &#xff08;4&#xff09;char类型 2&#xff0c;基本类型的代数结构 二&#xff0c;复合类型 1&#x…

这些帮助你成长的IOS应用,建议收藏

TrackIt TrackIt是一款功能丰富的任务清单、日程管理和习惯打卡应用&#xff0c;旨在帮助用户提高效率和专注力。通过这些功能&#xff0c;用户可以更好地规划时间和任务&#xff0c;从而实现个人目标和养成良好习惯。 在目标设定方面&#xff0c;SMART原则是一个常用的方法&a…

【决战欧洲之巅】丹麦 vs 英格兰战术分析和球员状态以及走地数据分析

丹麦 vs 英格兰战术分析和球员状态 阵型与战术 丹麦: 阵型:丹麦通常采用4-3-3阵型&#xff0c;以因防守为基础&#xff0c;同时通过快速反击等找机会。 ”战术: 防守:丹麦在防守时以紧密的四后卫体彩为核心&#xff0c;辅以中场球员的积极回防&#xff0c;形成稳因的防 线。…

解决HassOS无法获取ip地址问题

目录 问题描述解法 问题描述 在ESXi中安装完HassOS后&#xff0c;开机遇到一个无法获取ip地址的问题&#xff0c;如下图所示&#xff1a; 输入network info命令&#xff0c;显示ipv4已被禁用&#xff0c;如下图所示&#xff1a; 解法 在控制台ha >后输入下面命令 netw…

基于Java技术“漫画之家”系统

开头语&#xff1a;你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;Java技术&#xff0c;B/S结构&#xff0c;SpringBoot框架 工具&#xff1a;MyEc…

板凳--------第60章 SOCKET:服务器设计

60.1 迭代型和并发型服务器 1016 1.迭代型&#xff1a; 服务器每次只处理一个客户端&#xff0c;只有当完全处理完一个客户端的请求后才会去处理下一个客户端。只适用于快速处理客户端请求的场景&#xff0c;因为每个客户端都必须等待&#xff0c;直到前面所有的客户端都处理完…