• (Unity)Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进展混淆,避免被反编译


    Unity自定义Debug日志文件,利用VS生成Dll文件并使用Dotfuscated进行混淆,避免被反编译。

    1、打开VS,博主所用版本是Visual Studio 2013。

    2、新建一个VC项目,选择类库,取名为JefferyChan,具体步骤如下图:

    新建项目图片

    3、因为要调用Unity中的相关文件,所以这里要引入外部文件。首先在Unity的安装文件夹中找到UnityEngine.dll,我的路径是:D:Program Files (x86)UnityEditorDataManaged 
    如下图所示:

    找到UnityEngine.dll文件

    4、将UnityEngine.dll引入到项目中,如下图: 
    打开项目,然后打开VS的视图->解决方案管理器

    打开解决方案管理器

    5、项目文件下的引用上面单击鼠标右键,引用->添加引用,引入外部文件,如下图所示:

    添加引用

    6,编辑需要编译的C#类文件,博主这里写的是个自定义日志输出文件,具体代码如下:

    using System.Collections;
    using UnityEngine;
    
    /**
     * 
     * 新建一个命名空间 用于保存自己定义的一些公用方法
     * 
     * **/
    namespace JefferyChan
    {
        /**
         * 
         * 新建一个JefferyLog类用于输出调试日志
         * **/
        public class JefferyLog
        {
            //定义一个标志 用于控制是否输出日志
            static public bool EnableLog = true;
    
            /**
             * 打印日志 但是没有传递打印日志对应的组件
             * **/
            static public void Log(object message)
            {
                Log(message, null);
            }
    
            /**
             * 打印日志 并显示打印日志对应的组件
             * **/
            static public void Log(object message, Object context)
            {
                if (EnableLog)
                {
                    //message为打印的信息,context为打印信息对应的组件
                    Debug.Log(message, context);
                }
            }
    
            /**
             * 打印出错日志  但是没有传递打印日志对应的组件
             * **/
            static public void LogError(object message)
            {
                LogError(message, null);
            }
    
            /**
             * 打印出错日志 并显示打印日志对应的组件
             * **/
            static public void LogError(object message, Object context)
            {
                if (EnableLog)
                {
                    Debug.LogError(message, context);
                }
            }
    
            /**
             * 打印警告日志 但是并不打印出具体的警告内容
             * **/
            static public void LogWarning(object message)
            {
                LogWarning(message, null);
            }
    
            /**
             * 打印警告日志 并且打印出警告内容
             * **/
            static public void LogWarning(object message, Object context)
            {
                if (EnableLog)
                {
                    Debug.LogWarning(message, context);
                }
            }
        }
    }
    
    

    7、编译项目,生成dll文件,如下图所示:

    编译项目

    8、找到生成的dll文件,文件路径为:“项目路径”->bin->Debug->JefferyChan.dll,如下图所示:

    找到dll文件

    9、此时的dll文件用Reflector打开,发现反编译出来的代码和原始的代码几乎是一样的,如下图所示:

    编译原始文件

    10、使用Dotfuscated对生成的JefferyChan.dll文件进行混淆,如下图所示:

    进行混淆

    点击生成按钮,进行混淆。

    进行混淆

    11、再次反编译混淆后的代码,发现无法进行反编译,如下图所示:

    这里写图片描述

    Dotfuscated是VS自带的,它存在于VS的安装目录下:D:Program Files (x86)Microsoft Visual Studio 12.0PreEmptive SolutionsDotfuscator and Analytics Community Edition

    如下图所示:

    这里写图片描述

    备注: 
    将项目属性 -> 应用程序 -> 目标框架:改为 .NET Framework 3.5或以下 。这一步很重要,因为Unity3D(当前的Unity3D版本是3.5版) 支持的 .Net 是3.5版。

    如果选择的是4.0版会出现

    Internal compiler error. See the console log for more information. output was:Unhandled Exception: System.TypeLoadException: Could not load type ‘System.Runtime.Versioning.

    如下图所示:

    .net版本

    Reflector下载链接:http://pan.baidu.com/s/1o6KH9xw。

  • 相关阅读:
    Conversions
    Mispelling4
    A hard puzzle
    Easier Done Than Said?
    利用map可以对很大的数出现的次数进行记数
    A+B Coming
    结构体成员变量
    NSString 类介绍及用法
    复习回顾
    函数与方法对比
  • 原文地址:https://www.cnblogs.com/lancidie/p/5879978.html
Copyright © 2020-2023  润新知