一步解决 Unity 游戏新安全风险(整理)

https://indienova.com/indie-game-development/unite-2019-shanghai-unity-security-build/

Unity 游戏的安全风险存在分析工具多、破解门槛低、攻击方法通用化等几个特点。

一.Unity 支持 Mono 和 IL2CPP 两种编译模式:

  • 使用 Mono 编译的游戏,它将 C#脚本代码编译为 IL 中间语言打包到游戏客户端,在游戏执行时候编译为汇编代码。这类中间语言存在容易被反编译为 C#源代码的风险。

  • 后来基于安全性和执行效率方面的考虑,Unity 支持了 IL2CPP 编译。使用 IL2CPP 模式编译,游戏的脚本代码没有了,脚本代码被编译成了 Native 代码发布。前面提到的工具都失效了,安全性得到了一定的提升。但是 IL2CPP 编译后会生成一个 global-metadata.dat 文件,这个文件里面包含了大量的符号信息。

二.联合开发了一个 Unity 保护方案:UPS。方案主要做了两个方面的保护。

1.Mono 保护(Mono 保护的对象是游戏的主逻辑 dll:Assembly-CSharp.dll 和 Assembly-CSharp-firstpass.dll。)

  • 首先要做的是文件级加密,以达到保护文件的效果。经过文件加密后的游戏安全性的确是提升了,但是攻击者还是可以从内存中得到明文文件,然后进行反编译。

  • 经过方法加密后,就算攻击者得到了内存中的明文脚本文件,也无法反编译。(把字符串信息也处理掉。加密结果可以看到,代码和类名方法名完全不可读。)

  • 指令加密,经过加密后的 opcode 对应的不再是 Mono 中标准的 IL 指令。

2.IL2CPP 保护(IL2CPP 保护的对象是 metadata 文件:global-metadata.dat)。

  • IL2CPP 保护又是什么效果呢?前面提到 global-metadata.dat 文件中包含了大量的符号信息,我们对此文件进行了多级别加密,使得通用工具解析失败,无法拿到游戏的敏感信息。

三.UPS 方案在稳定性和兼容性都得到了进一步的提升。

  • 稳定性方面,UPS 方案是 Unity 原生支持的,不会修改游戏和引擎二进制。
  • 兼容性方面,UPS 方案不会在游戏工程中引入第三方组件。
  • 跨平台方面,我们支持 Win/Mac 版的 Unity-Editor,支持对 Windows/Android 双平台游戏的保护。
  • 保护强度方面,我们提供文件级、方法级、指令级等多级加密,并且每次加密的结果都不一样。

你可能感兴趣的:(一步解决 Unity 游戏新安全风险(整理))