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. Java 开发必会的 Linux 命令

    作为一个Java开发人员,有些常用的Linux命令必须掌握.即时平时开发过程中不使用Linux(Unix)或者mac系统,也需要熟练掌握Linux命令.因为很多服务器上都是Linux系统.所以,要和服 ...

  2. quartus II PIN脚相关之一

    FPGA设计中有时候会改变输入输出名称,但是会带来一个问题,在PIN 叫配置页面上会有余留的久名称的Pin脚.如实例中,把 FPGA_CLK_50MHZ 名称修改为 FPGA_CLK,经过编译综合之后 ...

  3. 28. Triangle && Pascal's Triangle && Pascal's Triangle II

    Triangle Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...

  4. django model 中class meta

    class Meta: ordering = ['-num', 'length'] verbose_name = 'name' verbose_name_plural = 'names' orderi ...

  5. FW: Chef集中管理工具实践之 (1) 环境部署

    本文转载:http://heylinux.com/archives/2208.html Chef集中管理工具实践之 (1) 环境部署 目录结构Chef集中管理工具实践之 (0) 什么是ChefChef ...

  6. 服务器间打通ssh无密钥

    1 打通无密钥 配置HDFS,首先就得把机器之间的无密钥配置上.我们这里为了方便,把机器之间的双向无密钥都配置上. (1)产生RSA密钥信息 ssh-keygen -t rsa 一路回车,直到产生一个 ...

  7. (Forward) Music Player: From UI Proposal to Code

    Some developers have difficult to code when the UI proposal is a bit “sophisticated” or “complex”. M ...

  8. X32,X64,X86 代表什意义

    X32,X64,X86是什么意思 各代表什么:X86指32位,X64指64位,现在用户最多的是XP,但win7是趋势,发展很快,建议你装个win7 32位的系统,下载的话地方很多,官方安装原版和gho ...

  9. Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目

    一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...

  10. yum命令指南

    yum check-update  检查可更新的所有软件包 yum update  下载更新系统已安装的所有软件包yum upgrade  大规模的版本升级,与yum update不同的是,连旧的淘汰 ...