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
如下圖所示:
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,如下圖所示:
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.
如下圖所示:
Reflector下載連結:http://pan.baidu.com/s/1o6KH9xw。