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。