1

作为经验丰富的 Web 开发人员,我知道 javascript 代码不安全,而只能是缩小/模糊处理。

然而,许多游戏引擎有足够的信心允许他们的引擎代码和客户的游戏代码被下载并在客户端/浏览器中可见。

-

试图了解 Unity3D 是如何做到这一点的,我遇到了客户端/浏览器下载的文件的以下细分:

  • 一个包含 asm.js 运行时和 JavaScript 插件的 MyProject.asm.framework.unityweb 文件。`

  • 包含播放器的 asm.js 模块的 MyProject.asm.code.unityweb 文件。

  • 一个包含二进制图像的 MyProject.asm.memory.unityweb 文件,用于初始化播放器的堆内存。

  • 包含资产数据和场景的 MyProject.data.unityweb 文件。

来源: https ://docs.unity3d.com/Manual/webgl-building.html

-

然后我看到他们正在使用 emscripten 将他们的 C/C++ 代码编译为 Javascript:

To run in WebGL, all code needs to be JavaScript. We use the emscripten compiler toolchain to cross-compile the Unity runtime code (written in C and C++) into asm.js JavaScript. asm.js is a very optimizable subset of JavaScript which allows JavaScript engines to AOT-compile asm.js code into very efficient native code.

来源: https ://docs.unity3d.com/Manual/webgl-gettingstarted.html

-

问题:

  1. 是 Emscripten 和/或 asm.js 以某种方式保护 Javascript 代码吗?如何?
  2. 它甚至安全吗?如果我真的很努力,我可以从这段代码中“窃取”一些东西并为游戏编写一个 hack/cheat:https ://files.unity3d.com/jonas/AngryBots/Release/AngryBots.js
  3. 如果我已经编写了一个 javascript 游戏,我现在可以做什么来做 Emscripten 为 Unity3D 游戏所做的事情?(假设#2是真的)
4

1 回答 1

2

是 Emscripten 和/或 asm.js 以某种方式保护 Javascript 代码吗?

不,这些只是编译 unity -> webgl 代码 -> javascript 的工具链的一部分

它甚至安全吗?

不,没有什么是安全的。如果你有一个流行的游戏,人们就会破解它。

如果我已经编写了一个 javascript 游戏,我现在可以做什么来做 Emscripten 为 Unity3D 游戏所做的事情?

对于任何打算在网络浏览器中玩的游戏,你应该编译到现在的标准 WebAssembly,这是在你发布问题一年后。 阅读有关 Unity + Web 组装的更多信息

如果您要编译到 WebAssembly,它导出的二进制文件很难进行逆向工程,但并非不可能。已经有可用的工具可以帮助做到这一点。

归根结底,您无法阻止客户端黑客攻击。计算服务器上所有重要的东西,比如货币、健康等,否则你必须用一些东西信任客户端。

于 2020-04-04T05:43:27.053 回答