当前位置: 首页 > news >正文

虚幻引擎资源加密方案解析

前段时间,全球游戏开发者大会(Game Developers Conference,简称GDC)在旧金山圆满落幕,会议提供了多份值得参考的数据报告。根据 GDC 调研数据,当下游戏市场中,Unreal Engine (下文简称虚幻)和 Unity 是使用最多的游戏引擎,各有 33% 的开发者表示这两者是他们首选的工具集。

数据来源丨全球游戏开发者大会

与 Unity 相比,虚幻引擎的优势在于强大的画面表现与视觉特效,契合当下游戏市场追求高品质、精品化游戏的需求。但同 Unity 一样,虚幻引擎也面临严重的安全问题。

虚幻引擎的主要代码逻辑位于项目中 EXE 以及资源文件中,可以使用资源提取工具 UnrealPakViewer 对游戏的 pak 包进行分析,使用工具打开包体即可提取其中的代码、图片、视频等各类资源,大幅度降低了外挂、破解的门槛。

UnrealPakViewer分析包体后可查看各类资源及代码

这些资源是游戏的重要资产,一旦泄露会造成竞品抄袭、知识产权受损、游戏内容剧透、篡改游戏资源制售外挂等问题,如何有效对虚幻引擎资源进行加密,提高破解门槛,保护游戏资源,成了游戏厂商的必修课。

要对引擎进行加固,要解决两大难题,首先是兼容性问题,虚幻4、虚幻5有众多小版本,这些版本在性能、技术与体验方面都存在差异,加密方案能否完美兼容?

其次是如何兼顾加密强度与性能消耗问题,如果单纯为了加密而影响了游戏性能,导致游戏流畅程度出现问题,是游戏厂商与玩家都不能接受的。

针对上述问题,FairGuard制定了一套针对虚幻引擎的资源加密保护方案。该方案完美兼容 UE4 / UE5 各个版本;并且精心构造了一套算法,有效的解决了加密强度与性能消耗平衡问题,在保证高加密强度的同时,具备性能消耗小的特点。

除此之外,该方案还具备以下特点:

▎速度快,无感知

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

▎加密强度高

加解密算法进行了自定义混淆,让破解者无法分析出算法,算法流程图如下所示:

FairGuard算法流程图

▎解密速度快

核心文件块很小,不随整个资源文件大小而变化。使用主流手机测试,300个资源文件一次性解密,额外增加的解密时间不到10ms。

对加密算法进行了高强度自定义混淆,混淆经过精心设计,在增加复杂度的同时,兼顾了效率,运行开销很小。

▎防解包、反调试

FairGuard加固方案可以有效防止解包、调试,加固后包体无法进行提取、分析等恶意操作,不给破解者提供线索。

动图

加密后包体无法被提取资源

▎三端互通,支持热更

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

▎操作便捷,接入成本低

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

相关文章:

  • vue3+threejs新手从零开发卡牌游戏(十四):调整卡组位置,添加玩家生命值HP和法力值Mana信息
  • 在项目中缓存如何优化?SpringCache接口返回值的缓存【CachePut、CacheEvict、Cacheable】
  • 【Java八股面试系列】中间件-Redis
  • android 13 相册和拍照问题
  • css简单动画实现
  • 记录关于智能家居的路程的一个bug___Segmentation fault(段错误)
  • 基于springboot实现网页时装购物系统项目【项目源码+论文说明】
  • 深度学习pytorch——卷积神经网络(持续更新)
  • 安卓调试桥ADB
  • Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!
  • Java自带的线程池及调用、ThreadPoolExecutor类(线程池的7大参数)、任务队列及底层原理
  • QT+Opencv+yolov5实现监测
  • 阿里云短信服务免费100条
  • 类与对象中C++
  • C# get set 访问器
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • 2017 年终总结 —— 在路上
  • Android Studio:GIT提交项目到远程仓库
  • HTML-表单
  • HTTP 简介
  • JavaScript DOM 10 - 滚动
  • JS 面试题总结
  • JS数组方法汇总
  • leetcode98. Validate Binary Search Tree
  • swift基础之_对象 实例方法 对象方法。
  • Xmanager 远程桌面 CentOS 7
  • 闭包--闭包作用之保存(一)
  • 检测对象或数组
  • 前端临床手札——文件上传
  • 入门到放弃node系列之Hello Word篇
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 正则表达式小结
  • 如何正确理解,内页权重高于首页?
  • ​什么是bug?bug的源头在哪里?
  • #include到底该写在哪
  • #Linux(帮助手册)
  • $.ajax,axios,fetch三种ajax请求的区别
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (二)pulsar安装在独立的docker中,python测试
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Oracle 9i 数据库设计指引全集(1)
  • .NET Core 成都线下面基会拉开序幕
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • [20150904]exp slow.txt
  • [22]. 括号生成
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [BeginCTF]真龙之力
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [C#]获取指定文件夹下的所有文件名(递归)