Unity 代码混淆: CodeGuard的使用

CodeGuard

使用CodeGuard工具,可以对Unity项目的C#代码进行混淆(支持Android和iOS)。建议混淆变量和属性即可,函数的混淆要谨慎,很容易逻辑出问题。

CodeGuard下载地址:http://download.csdn.net/detail/kaitiren/9101453

使用方法

将CodeGuard导入到unity工程中

打开Window->CodeGuard->Profiles

根据你的需要进行设置。

然后打包的时候就会自动混淆代码了(会自动执行CodeGuard.cs的MidCodeGuarding函数)

具体怎么设置

情况一:All Except Skip Types

除了Skip的函数名,其余全部混淆

在Skip Types中输入Count数量,然后在Skip Type中输入要跳过的类名

情况二:Only Selected

只混淆选中的类,其余都不混淆

在Select Types中输入Count数量,然后在Select Type中输入要混淆的类名

情况三:Combination

以上两种情况的结合

 

公共设置

设置 描述 备注
Private Members 对private成员进行混淆  
Private Field & Properties 对private字段和属性进行混淆

Field是字段,比如 private int m_a; 

Propertity是属性,比如

private int a { get { return m_a; } }

Type Fields 所有的字段都会被混淆(非强硬) 为了确保Unity正常工作,部分字段会被跳过
Type Fields Aggressively 所有的字段都会被混淆(强硬) Unity可能无法正常工作
Properties 所有属性都会被混淆  
Custom Mothods 自定义函数 为了确保Unity正常工作,部分函数会被跳过,比如Awake、Start、Update函数会被跳过
Proxy Parameters 对代理函数参数进行混淆 比如OnCollisionEnter(Collision collision)的参数
Method Parameters 对函数的参数进行混淆 所有非代理函数的参数会被混淆
Aggressively 尽可能多的混淆,慎用 可能会破会原有的逻辑,导致无法正确运行
Exclude Method Names 要跳过的函数名  
Proxy/Unity Methoes 生成Unity的代理函数,比如 Update()、OnGUI()等

自己的Update()会被混淆,生成的Update()函数中会调用被混淆的Update()函数

Proxy/Exclued Method Names 为剔除的函数生成代理函数  
Proxy/Custom Methods 为自定义函数生成代理函数  

注意:CodeGuard不支持对类名进行混淆

 

关于Proxy

如果勾选了Unity Methods,则它会把我们的Awake、Start、Update等函数混淆,并生成Awake、Start、Update等函数(没有被混淆),然后调用我们被混淆的Awake、Start、Update等函数。

比如

void Start()
{
    Debug.Log("Start");
}

会变成

void ك()
{
    Debug.Log("Start");
}

void Start()
{
    this.ك();
}

具体选项可以查看自带的Read Me.txt文档说明

注意

下载下来的CodeGurad工具混淆的时候可能会报错:DirectoryNotFoundException: Directory ‘F:/Unity5.5/Unity/Editor/Data/PlaybackEngines\androidplayer\Managed’ not found

只需要把CodeGuard.cs的DoCodeGuardAndroidBuild的

files.AddRange(Directory.GetFiles(enginePath,"*.dll"));

这行注释掉即可

如果是iOS,则注释掉DoCodeGuardiOSBuild的

files.AddRange(Directory.GetFiles(enginePath,"*.dll"));

如何检查混淆是否生效

可以用ilspy反编译工具反编译apk包内的Assembly-CSharp.dll,变量和函数都变成奇怪的符号了

注:先把 .apk 改成 .zip,然后解压,进入 assets/bin/Data/Manged,就可以看到Assembly-CSharp.dll了,我们的C#代码就是变成成这个Assembly-CSharp.dll的,把Assembly-CSharp.dll拖入到ILSpy中即可

 

ilspy 下载地址:https://github.com/icsharpcode/ILSpy/releases

相关文章

这篇文章将为大家详细讲解有关Unity3D中如何通过Animator动画...
这篇文章主要介绍了Unity3D如何播放游戏视频,具有一定借鉴价...
这篇文章给大家分享的是有关Unity3D各平台路径是什么的内容。...
小编给大家分享一下Unity3D如何实现移动平台上的角色阴影,希...
如何解析基于Unity3D的平坦四叉树地形与Virtual Texture的分...
这篇文章主要介绍Unity3D如何实现动态分辨率降低渲染开销,文...