前言
使用Unity3D开发的程序存在被反编译的风险,也存在显存转储的威胁,最终导致游戏或项目被抄袭甚至盗版。 下面简单介绍一下Unity3D脚本的分析过程,并为其防护提供参考方法。
工具集
dnSpy、Ollydbg、CheatEngine
背景
大家都知道Unity3D使用开源的monoC#语法。 所有代码都没有编译为EXE,而是位于{APP}uildgame_DataManagedAssembly-CSharp.dll中(最新的Unity3D2017不是这样),但mono语法只兼容C#,原理完全不同。 传统的C#防病毒方法都无效,因为Assembly-CSharp.dll不是标准的DLL加载进程。 它既不是 PE DLL,也不是 dotNet DLL。 相反,mono.dll 读取 Assembly-CSharp。 dll的C#脚本被解释并执行。 所有这一切都无需等待官方 IL2CPP 或定制您自己的单声道引擎!
反编译
要反编译Unity3D脚本代码,可以使用dnSpy来达到非常好的效果。 dnSpy可以准确地将Unity3D脚本文件和标准DotNet动态库文件反编译为源代码。 通常游戏反编译源码,只需将需要反编译的文件推送到dnSpy工具中即可。 效果如下,可以完整的看到编码器的代码逻辑:
官方demo反编译截图
根据反编译的代码,可以进一步分析软件的流程方向,甚至可以篡改原始流程。 详细情况将不再描述。
如何保护脚本代码?
对于这些脚本代码的保护,一般采用脚本文件加密和协程解密来实现加密方案。 下面简单介绍一下可以保护这些脚本的现成产品:VirboxProtector和VirboxAHS。
VirboxProtector和VirboxAHS分别可以避免Unity3D软件产品的静态分析和动态调试游戏反编译源码,并具有以下特点:
1.一键加密您的代码逻辑,使反编译和转储显存变得困难。
2、不会提高游戏帧率,在某些情况下甚至可以提升游戏帧率。
3. Assembly.DLL代码按需显示。 只有调用时才会在显存中显示出来。 如果不被调用,则不会被透露。 黑客很难一次性破解所有代码。
4、完整的授权解决方案,支持云授权、软锁授权、USB加密锁授权、网络锁授权,支持时间限制、数量限制、网络并发数限制。
5.自带反黑客引擎和驱动级反调试,对大多数调试器都有效。
(注:如需要游戏防盗最高安全硬度,请参考防盗引擎)
使用加密工具前后对比
1、dnspy反编译被免杀的结果:
杀人前
脱离杀戮后
分析:从对比结果可以看出,大量的代码信息丢失了,再次分析会非常困难。
2.X6464Dbg和OllyDbg在PC上调试和挂载失败
分析:VirboxAHS 提供的这些动态调试保护方案将在程序的实时分析中发挥重要作用。
3.Cheat-Engine读取显存失败(需要新的反黑客引擎支持)
分析:通过保护原程序的显存数据,想要通过更改数据进行作弊的恶意行为也会被拦截。
典型客户场景
1.Unity3D游戏客街机游戏
2.VR设备交互体验
3、机器/医疗/工业/航天VR交互