C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一些商业用途的C#软件来说,因为盯着的人多,更是极易被攻破。使用VS自带的Dotfuscator可以实现混淆代码、变量名修改、字符串加密等功能。

飘易使用的是 Dotfuscator 4.2 PRO 版本,有需要的可以到网上搜索下载 Dotfuscator Professional Edition 4.9破解版本。安装 Dotfuscator 好 打开界面,有几个需要配置的地方: Options、Input、Rename、String Encryption、Build,其他的默认即可,下面飘易一一讲解。

Options 选项 这是全局配置选项:
    把 Disable String Encryption 设为 NO,即启用字符串加密;检查 Disable Control flow、Dsiable Renaming 也为 NO,即保证控制流和混淆功能打开,其他默认。如下图:

Input 选项里 选择你需要混淆加密的 dll、exe文件,参考第一幅图;

Rename 选项 勾选“use enhanced overload induction”(使用增强模式),注意:不要勾选下方的“ Do not suppress on serializable types”,即序列化类型的变量不加密,否则编译后可能异常; “Renaming Scheme” 选择“Unprintable”(不可打印字符,即乱码),也可以选择其他如小写字母、大写字符、数字的方式。如下图:

String Encryption 选项 include里勾选需要字符串加密的工程文件exe、dll等。

Build 选项 设置输出目标文件夹,点击下方的 “Build”按钮即可重新生成新的 exe、dll文件了。

好了,我们来看一下加密混淆后的效果:

原来的代码:

        string tt = "fm";
        bool vip = false;

private void Form1_Load(object sender, EventArgs e)
        {
            richTextBox1.Text = "start";
        }

private void button1_Click(object sender, EventArgs e)
        {
            richTextBox1.Text = "button1 Clicked";
            vip = true;
            richTextBox1.Text += vip.ToString();
        }

经过Dotfuscator混淆加密后,我们使用著名的反编译软件 Reflector 来查看,可以发现函数体内的代码已经看不到了,提示:“  This item is obfuscated and can not be translated.”;字符串也变成了乱码,函数名称也不可见了,效果图如下:

使用Dotfuscator混淆的几个注意点】:
1、如果你加密的dll、exe里有public类,需要被外部引用的话,那么引用这个public的相关dll、exe也要一起放到Dotfuscator Input 里,同时进行混淆加密,不然外部调用出错。
2、如果有public类,但是你不想照着第1点的方式做的话,可以勾选 Library 模式(input 里 展开项目,见下图),或者不选择 rename 选项,仅仅用 control flow 混淆(该种方式下会看见类名、函数名,但是看不到函数体)。

3、如果有public类,但是你也不想按照我的第一点、第二点的方法做的话,可以在rename选项里排除这些public的类名、方法名、属性名即可:使用 rename exclude 里左侧排除项目,或 右侧 正则排除方法,见下图:

这里有一篇其他网友写的用Dotfuscator 混淆asp.net程序实践心得,可以参考阅读。

Dotfuscator可以实现混淆代码、变量名修改、字符串加密的更多相关文章

  1. 查找jar包中.class文件关键字(变量名,字符串)

    有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxse ...

  2. C语言变量名转字符串的方法

    C语言中将变量名转换成字符串使用的是#符号,来看下边两个宏定义: #define name2str(name) (#name) #define print_val(x) printf(#x" ...

  3. shell的字符串和数字的转化(数字自动做字符串处理,变量名做字符串输出用单引号)

    shell里面怎么样把字符串转换为数字? 例如:a="024" 1,用${{a}} 2,用let达到(()) 运算效果. let num=0123; echo $num; 83 3 ...

  4. str.replace替换变量名的字符串

    网易云课堂该课程链接地址 https://study.163.com/course/courseMain.htm?share=2&shareId=400000000398149&cou ...

  5. C#使用Dotfuscator混淆代码以及加密

    http://www.cnblogs.com/tianguook/archive/2012/10/06/2713105.html C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进 ...

  6. C#使用Dotfuscator混淆代码的加密方法

    C#编写的代码如果不进行一定程度的混淆和加密,那么是非常容易被反编译进行破解的,特别是对于一些商业用途的C#软件来说,因为盯着的人多,更是极易被攻破.使用VS自带的Dotfuscator可以实现混淆代 ...

  7. 转:C#使用Dotfuscator混淆代码的加密方法

    Author:flymorn Source:flymornCategories:C#编程 PostTime:2011-9-16 1:04:49 正 文:   C#编写的代码如果不进行一定程度的混淆和加 ...

  8. Javascript变量名混淆细节

    前言 UglifyJS会对JS文件的变量名进行混淆处理.要理解Javascript变量混淆的细节.我们须要回答下面几个问题: 1.遇到一个变量myName,我们怎么知道这个myName变量要不要混淆 ...

  9. C#使用Xamarin开发可移植移动应用进阶篇(9.混淆代码,防止反编译)

    前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 今天讲讲如 ...

随机推荐

  1. ecshop常用语句

    ecshop之中的IF语句: <select name="product_cat" id="product_cat" class="form-c ...

  2. 深入PHP empty(),isset(),is_null()

    PHP empty(),isset(),is_null()的实例测试.   有关 PHP编程 的 empty(),isset() 还有 is_null() 这三个函数的用法讨论得已经很多了,而且很多资 ...

  3. set_exception_handler 和 set_error_handler 函数

    定义和用法 set_exception_handler() 函数设置用户自定义的异常处理函数. 该函数用于创建运行时期间的用户自己的异常处理方法. 该函数会返回旧的异常处理程序,若失败,则返回 nul ...

  4. Java输出1~1000之间所有可以被3整除又可以被5整除的数

    主要在于判断是否能被整除,思路是用取余运算符%,取余结果为0就表示能被整除. 代码如下: public class NumDemo { public static void main(String a ...

  5. 内存详解--理解 JVM 如何使用 AIX 上的本机内存

    转自---http://www.ibm.com/developerworks/cn/java/j-nativememory-aix/

  6. yhd日志分析(一)

    yhd日志分析(一) 依据yhd日志文件统计分析每日各时段的pv和uv 建hive表, 表列分隔符和文件保持一致 load数据到hive表 写hive sql统计pv和uv, 结果保存到hive表2 ...

  7. python-抓取图片

    今天看到博客园一个文章,python抓取图片,也没看内容,心想自己也写一个抓取脚本试试看,一方面自己也在学习python,另一方面毕竟实际工作也经常会遇到这种需要临时写脚本的时候,突击锻炼还是好的嘛. ...

  8. ado.net的5个主要对象

    connection 连接对象 command 命令对象,指示要执行的命令和存储过程! datareader是一个向前的只读的数据流. dataadapter是功能强大的适陪器,支持增删改查的功能 d ...

  9. oracle 各种问题排查

    一.ORA-00257 ORA-00257归档日志写满,最简单方法.可以更改归档的大小. 二.job不自动运行解决方法 http://www.cnblogs.com/xbding/p/5861443. ...

  10. C#类型的转换:Converter<TInput, TOutput> 委托的使用

    Converter<TInput, TOutput> 委托 表示将对象从一种类型转换为另一种类型的方法. 此委托由 Array 类的 ConvertAll<TInput, TOutp ...