对于使用Unity3D开发的程序,存在被反编译的风险,也面临着被dump内存的威胁,最终引起游戏或工程被抄袭甚至盗版。 下面简单介绍对Unity3D脚本分析过程,同时提供了对其保护的参考手段。
工具集:dnSpy、Olldbg、Cheat Engine
背景: Unity3D使用开源mono,C#语法,所有代码都不是编译到EXE,而是位于{APP}\build\game_Data\Managed\Assembly-CSharp.dll(对于最新的Unity3D 2017不是这样),因为mono只是跟C#语法兼容,但是原理完全不一样,传统的C#加壳全部失效;Assembly-CSharp.dll 的加载不是标准的DLL加载过程,既不同于PE的DLL也不同于DotNet的DLL的加载,而是由mono.dll读取 Assembly-CSharp.dll的C#脚本解释执行。
反编译: 反编译Unity3D的脚本代码,使用dnSpy就可以达到很好的效果,dnSpy可以准确的将Unity3D的脚本文件以及标准的DotNet动态库文件反编译成源码形式。一般,将需要被反编译的文件拖入dnSpy工具即可。效果如下,其中可以完整的看到编码者的代码逻辑:
截图官方demo被反编译:
根据反编译后的代码就可以进一步分析软件的流程走向,甚至篡改原有过程,具体不做描述。
对于这种脚本代码的保护,通常采用脚本文件加密,解释器解密的形式来实现加密方案,下面简单介绍下可以针对这种脚本进行保护的现成产品:Virbox Protector、Virbox AHS。
Virbox Protector、Virbox AHS分别可以防止静态分析、动态调试Unity3D的软件产品,具有如下特性:
1.一键加密你的代码逻辑,无法反编译,无法dump内存。 2.不降低游戏帧数, 甚至某些情况下还能提高游戏帧数。 3. Assembly.DLLL代码按需解密,只有调用到才会在内存解密,不调用不解密,黑客无法一次解出所有的代码。 4.完整授权方案,支持云授权 软锁授权,USB加密锁授权 网络锁授权 ,支持限制时间 限制次数 限制网络并发。
1.dnSpy 反编译被加壳的结果对比: 加壳前: 加壳后: 从对比的结果看到很多代码信息已经丢失,再次进行分析时也会有很大困难。
2.PC上的X64Dbg和OllyDbg 调试失败与附加失败。
Virbox AHS提供的这种针对动态调试的保护方案在实时分析程序时会起到显著的作用。
3.Cheat-Engine 读取内存失败(需要新的反黑引擎支持)
通过对原程序内存数据的保护,想使用修改数据的形式来进行作弊的恶意行为也会被拒之门外。
典型客户场景: 1.Unity3D游戏客户街机游戏; 2.VR设备交互体验; 3.机器/医疗/工业/航天等VR交互
|