如何打包游戏的资产并仅允许引擎读取
How to package the assets of a game and allow only the engine to be able to read?
我正在为C++的2D游戏开发一个引擎,几天来我一直在寻找一种方法来保护我未来游戏的图像和音频。我知道没有 100% 的保护,有人可以打开这些文件,但我的意思是刚刚安装游戏的普通用户,阻止它修改精灵,更改声音,用游戏地图数据覆盖 xml 文件。
我下载了一些用Unity制作的游戏,并注意到使用了.assets扩展名,在暗黑破坏神2中它使用了.ma0,.mpq,.data,在FEZ .pak中,在Super Meat Boy中只有一个.tp文件。换句话说,您不能在文本编辑器中打开和编辑任何这些文件或使用 winrar 解压缩,它们提供最低级别的保护。这是怎么做到的?我是否必须创建自己的二进制文件格式,或者是否有任何程序可以使其更容易工作?
你不能。
这种"最低保护水平"甚至比您想象的还要低。您可以在十六进制编辑器中打开这些文件并破解它们。几十年来,这项活动已经司空见惯。
您可以加密数据,但由于密钥必须存储在应用程序中,并且用户拥有应用程序的副本,因此也可以提取和/或更改该副本。
您可以添加数字签名以防止人们修改资产然后使用它们("修改"),但同样,可以在您的应用程序中进行更改。
您可以通过以专有格式发布资产来混淆资产,但这通常纯粹是出于功能原因,因为再次有人会对它们进行逆向工程。
一旦某件事在别人的电脑上,你就失去了对那个东西的控制。
这里实际上有多个问题,iirc:
- 如何防止用户读取游戏资产?
- 如何防止用户操纵游戏资产?
- 什么文件格式可以用来存储游戏资产?
如果您使用的是现有引擎,它可能对此有一些支持,如果它足以满足您的目的,您只需要学习如何使用它。
如果您需要自己动手,则需要清楚地定义您的要求并选择满足这些要求的解决方案。对于资产存储,基于 ZIP 的格式可能最容易处理,所有语言都有某种形式的支持。为了保护完整性,应使用加密算法:数字签名来检测篡改,加密以防止读取。这些可能会稍微减缓资产的开放速度,但在大多数情况下,这应该是可以接受的。
- 当使用带有VS2019或VSCode的虚幻引擎4.24.2时,我如何修复这些错误的Intellisense错误
- Unity在虚幻引擎4中的"Vector3.Slerp"等效C++?
- 如何创建从Maya(或类似程序)到虚幻引擎的自定义数据导出插件
- 在虚幻引擎中删除NXOpen对象时崩溃
- 引擎节点:未定义的符号:_ZTV6Config
- Agora.io 虚幻引擎插件构建错误
- <random>在实践中应该实际使用哪个随机数引擎? std::mt19937?
- 无法在 Arch Linux 中启动虚幻引擎 4
- 在虚幻引擎中触发C++ dll的事件
- 在 C/C++ 中加载 OpenSSL 自定义引擎
- 组件上的虚幻引擎可蓝图UFUNCTION会导致构建错误
- 使用Visual Studio在虚幻引擎中创建一个新的类c ++给了我太多的错误
- 提高基于组件的游戏引擎的效率
- 在C++中嵌入 Mozilla 的 JavaScript 引擎
- 如何在虚幻引擎4中将char*转换为TCHAR?
- 如何将外部代码包含在虚幻引擎4 C++项目中
- 如何使用虚幻引擎"filter"多播?
- 我可以在没有Xcode的情况下在Mac上使用带有C++的虚幻引擎吗?
- 虚幻引擎C++生成演员错误
- DirectX 11 引擎在第三次代码改进后没有突然运行,我不知道为什么