因为动态库是要用在Unity3D开发环境的,所以本文记录了使用Eazfuscator.NET混淆C#动态库的一些注意事项。
Eazfuscator.NET是针对.NET开发环境的混淆工具。现在已经开始收费,这里有一个免费版https://download.csdn.net/download/andyhebear/4765606
1.准备动态库。
由于历史原因我使用了MonoDevelop来写动态库。由于在Unity3D中,继承MonoBehaviour的脚本有私有的事件方法,为了使这部分方法在混淆后有效,根据Eazfuscator的帮助手册,可以将此类方法指定为受保护的,并可视化。例如
using UnityEngine;
// 原始的类
public class MyClass:MonoBehaviour{
void Start(){}
void Update(){}
}
要使Start()和Update()两个方法效,就可以做如下改写
using UnityEngine;
using System.Reflection;
// 支持混淆的类
public class MyClass:MonoBehaviour{
[Obfuscation(Feature = "family and assembly visibility", Exclude = false)]
protected void Start(){}
[Obfuscation(Feature = "family and assembly visibility", Exclude = false)]
protected void Update(){}
}
如果想混淆代码控制流程,可以加上相应属性,如下
using UnityEngine;
using System.Reflection;
// 支持混淆的类
[assembly: Obfuscation(Feature = "code control flow obfuscation", Exclude = false)]
public class MyClass:MonoBehaviour{
[Obfuscation(Feature = "family and assembly visibility", Exclude = false)]
protected void Start(){}
[Obfuscation(Feature = "family and assembly visibility", Exclude = false)]
protected void Update(){}
}
2.使用Eazfuscator.Net混淆。
Eazfuscator的混淆操作很简单,直接把编译好的库拖入,等待处理完成就会自动用混淆后的库替换原来的库。
至此,混淆后的库可以在Unity3D中使用了。