如何打包游戏的资产并仅允许引擎读取

How to package the assets of a game and allow only the engine to be able to read?

本文关键字:许引擎 引擎 读取 游戏 何打包      更新时间:2023-10-16

我正在为C++的2D游戏开发一个引擎,几天来我一直在寻找一种方法来保护我未来游戏的图像和音频。我知道没有 100% 的保护,有人可以打开这些文件,但我的意思是刚刚安装游戏的普通用户,阻止它修改精灵,更改声音,用游戏地图数据覆盖 xml 文件。

我下载了一些用Unity制作的游戏,并注意到使用了.assets扩展名,在暗黑破坏神2中它使用了.ma0,.mpq,.data,在FEZ .pak中,在Super Meat Boy中只有一个.tp文件。换句话说,您不能在文本编辑器中打开和编辑任何这些文件或使用 winrar 解压缩,它们提供最低级别的保护。这是怎么做到的?我是否必须创建自己的二进制文件格式,或者是否有任何程序可以使其更容易工作?

你不能。

这种"最低保护水平"甚至比您想象的还要低。您可以在十六进制编辑器中打开这些文件并破解它们。几十年来,这项活动已经司空见惯。

您可以加密数据,但由于密钥必须存储在应用程序中,并且用户拥有应用程序的副本,因此也可以提取和/或更改该副本。

您可以添加数字签名以防止人们修改资产然后使用它们("修改"),但同样,可以在您的应用程序中进行更改。

您可以通过以专有格式发布资产来混淆资产,但这通常纯粹是出于功能原因,因为再次有人会对它们进行逆向工程。

一旦某件事在别人的电脑上,你就失去了对那个东西的控制。

这里实际上有多个问题,iirc:

  • 如何防止用户读取游戏资产?
  • 如何防止用户操纵游戏资产?
  • 什么文件格式可以用来存储游戏资产?

如果您使用的是现有引擎,它可能对此有一些支持,如果它足以满足您的目的,您只需要学习如何使用它。

如果您需要自己动手,则需要清楚地定义您的要求并选择满足这些要求的解决方案。对于资产存储,基于 ZIP 的格式可能最容易处理,所有语言都有某种形式的支持。为了保护完整性,应使用加密算法:数字签名来检测篡改,加密以防止读取。这些可能会稍微减缓资产的开放速度,但在大多数情况下,这应该是可以接受的。