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。

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

  1. 利用def生成dll文件

    DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport),这里不再举例说明:另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被 ...

  2. 如何利用.snk文件生成DLL文件中的Publickeytoken

    1.在该路径下C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin查找是否有sn.exe. 没有的话,从网上下载,注意需要的版本. 2.打开c ...

  3. JNI中使用cl命令生成DLL文件

    问题描述:     在使用JNI调用DLL时,首先需要生成DLL文件 问题解决:     (1)现在使用VS2008的cl.exe程序,生成DLL文件 (1.1)cl.exe环境搭建 注:   cl. ...

  4. 【Linux开发】【DSP开发】利用CCS6.1生成out文件的同时生成bin文件

    [Linux开发][DSP开发]利用CCS6.1生成out文件的同时生成bin文件 标签:[DSP开发] [Linux开发] 尝试在windows上安装的CCS6.1开发AM4378-Linux下的应 ...

  5. 生成dll文件的示例

    看了好多网上写的关于dll文件生成和实用的资料发现多尔不全,都是抄来抄去,有的干脆就是搬用msdn上的原文,实在没有创意和可看的东西.于是本着学和实用的目的自己实践的东西分享给大家. 大前提:使用VS ...

  6. C#生成DLL文件

    使用csc命令将.cs文件编译成.dll的过程 很多时候,我们需要将.cs文件单独编译成.dll文件, 操作如下: 打开命令窗口->输入cmd到控制台->cd C:\WINDOWS\Mic ...

  7. c++ 生成dll文件并调用-转

    .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分   .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll, ...

  8. C# 怎么生成DLL文件(转)

    有两种方法:     但是一般这个使用     打开VS2008,依次点击:菜单->文件->新建项目->项目类型visual C#(这里假设为该项目所取的名字是DllBuild)-& ...

  9. 使用Visual Studio将C#生成DLL文件的方法

    1.命令方式 打开Visual Studio安装目录下的开发人员命令提示 译 File.cs 以产生 File.exe csc File.cs 编译 File.cs 以产生 File.dll csc ...

随机推荐

  1. 《Linux内核分析》课程总结

    朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 不知不觉,在网易 ...

  2. 鸟哥的Linux私房菜第零章

    CPU从主存中读取数据通过微指令集控制和进行计算.主存储器内的数据则是从输入单元所传输进来,而CPU处理完毕的数据也必须要先写回主存储器中, 最后数据才从主存储器传输到输出单元.内存又称主存,是CPU ...

  3. iframe自适应高度(兼容IE 火狐 谷歌)

    <div id="leamain"> <iframe src="#" marginheight="0" marginwid ...

  4. Js_Ajax_用户名检测

    输入"root",OK:输入其它,Error ajax.jsp var xhr; function createXhr() { if (window.XMLHttpRequest) ...

  5. js实现右侧的分享效果

    就是当鼠标移到上面的时候,他会出现,鼠标移出就消失. nmouseover和nmouseout就能实现 <style> *{padding:0;margin:0;} #s1{width:2 ...

  6. google快捷键,通过浏览器本身来查看

    今天玩google浏览器时发现一个不需要访问google就能查看其快捷键的方式,再此记录一下,以备后用. 1:打开Google浏览器 2:打开开发者工具,有三种方法 2-1:按F12快捷键 2-2:按 ...

  7. IE请求访问的设置

    1:问题 目前有个项目采用AngularJs发送Restful风格的请求的方式来实现前后端的通信,测试人员在使用IE浏览器进行测试的时候发现,有时候请求发送不到后台,后来经查找发现是由于IE浏览器的默 ...

  8. MyBatis学习总结(二)——使用MyBatis对表执行CRUD操作

    上一篇博文MyBatis学习总结(一)——MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对u ...

  9. 关于php跨域cookie共享使用方法

    A 服务器所在的域:a1.main.com,A 有应用 main.phpB 服务所在的域:b1.test.com,B 有应用 test.php 1.在 main.php 里设置 cookie 的时候, ...

  10. java集合类(二)

    第十六天知识点总结 一.泛型 泛型:java jdk 1.5 新特性. 泛型的好处: 1.运行时的错误提前到编译时. 2.避免无谓的强制类型转换 自定义方法泛型:自定义泛型就是一个数据类型的占位或一个 ...