前言

对于使用 Unity3D 开发的程序,存在被反编译的风险,也面临着被 dump 内存的威胁,最终引起游戏或工程被抄袭甚至盗版。 下面简单介绍对Unity3D 脚本分析过程,同时提供了对其保护的参考手段。

工具集

dnSpy、Ollydbg、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# 脚本解释执行。这一切不用等官方 IL2CPP 和自己定制 mono 引擎!

反编译

反编译 Unity3D 的脚本代码,使用 dnSpy 就可以达到很好的效果,dnSpy 可以准确的将 Unity3D 的脚本文件以及标准的 DotNet 动态库文件反编译成源码形式。一般,将需要被反编译的文件拖入 dnSpy 工具即可。效果如下,其中可以完整的看到编码者的代码逻辑:

unity生成的程序用什么反编译工具 程序脚本反编译分析与加密(1)

截图官方demo被反编译

加壳前

unity生成的程序用什么反编译工具 程序脚本反编译分析与加密(2)

加壳后

分析:从对比的结果看到很多代码信息已经丢失,再次进行分析时也会有很大困难。

2.PC 上的 X64Dbg 和 OllyDbg 调试失败与附加失败

unity生成的程序用什么反编译工具 程序脚本反编译分析与加密(3)

unity生成的程序用什么反编译工具 程序脚本反编译分析与加密(4)

分析:Virbox AHS 提供的这种针对动态调试的保护方案在实时分析程序时会起到显著的作用。

3.Cheat-Engine 读取内存失败(需要新的反黑引擎支持)

unity生成的程序用什么反编译工具 程序脚本反编译分析与加密(5)

分析:通过对原程序内存数据的保护,想使用修改数据的形式来进行作弊的恶意行为也会被拒之门外。

典型客户场景

1.Unity3D 游戏客户街机游戏

2.VR 设备交互体验

3.机器/医疗/工业/航天等 VR 交互

,