(Unity)Unity自定義Debug日誌檔案,利用VS生成Dll檔案並使用Dotfuscated進展混淆,避免被反編譯...

weixin_34292959發表於2016-09-17

Unity自定義Debug日誌檔案,利用VS生成Dll檔案並使用Dotfuscated進行混淆,避免被反編譯。

1、開啟VS,博主所用版本是Visual Studio 2013。

2、新建一個VC專案,選擇類庫,取名為JefferyChan,具體步驟如下圖:

新建專案圖片

3、因為要呼叫Unity中的相關檔案,所以這裡要引入外部檔案。首先在Unity的安裝資料夾中找到UnityEngine.dll,我的路徑是:D:\Program Files (x86)\Unity\Editor\Data\Managed 
如下圖所示:

找到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.0\PreEmptive Solutions\Dotfuscator 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。

相關文章