简介

众所周知C#等net框架的程序是无法防止反编译的,但可以通过混淆,让反编译出来的代码非常难看.

Dotfuscator是微软推荐使用的第三方混淆器,用来保护你的net程序.可以在安装VS的时候顺带安装它,也可以从官网下载到独立安装包.

官网

本文将简单的测试它的效果,并记录测试过程

首先写段代码用来测试

新建个winform工程,添加个定时器,设为100毫秒触发一次:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{ } //一段注释
private void timer1_Tick(object sender, EventArgs e)
{
var datetime = DateTime.Now; var strprogress = "";
var second = DateTime.Now.Second;
for (var i = 0; i < second; i++)
{
strprogress += "■";
}
Text = $"当前时间为:{datetime.ToString("HH:mm")} {strprogress}";
} }//End Class
}

编译出EXE

用ILSpy打开

可以看到,代码除了注释,都是可以反编译出来的.

安装Dotfuscator

在VS安装工具中找到它

如果你用的版本和我一样是VS2017的话,你应该能在安装工具里找到这个:



安装它!

在VS的菜单中找到它

上一步完成后,你将发现这里多了这个:



打开它!

注册试用版

第一次运行Dotfuscator会收集你的信息用来注册试用版,你可以在这填写信息,并获取一个注册码(会发到你的邮箱)

你也可以不填写,也能正常试用Dotfuscator

混淆过程

将编译出来的程序添加进去

左边菜单,点击"输入",将切换到这个界面,点绿色加号,添加文件:

如果添加文件时,界面显示很奇怪,比如添加的文件不显示,可以试试先保存配置,再读取配置.

生成

点击这里,可开始混淆:



输出目录

可以看到输入exe所在的目录多了个文件夹

里面是混淆过的EXE:

查看效果

测试混淆的程序是否可正常运行

尝试反编译



可以看到 已编译的 .NET 应用内的类型、字段、属性、方法和参数名称 被改成了无法从名字认出作用的符号.

由于该软件是收费软件,我使用的只是试用版,如果购买正式版,能开放更强的混淆功能,如"字符串加密"等功能.如果有需要,建议使用正式版.

找一个大点的程序试试

由于上面使用的程序测试代码比较短,看不出多好的效果,我这找了个相对比较大的net程序,来试试:

混淆前的代码:

混淆后的代码

可以看到很多地方简直面目全非,认不出啥是啥了.给修改带来了很大的困难

使用Dotfuscator混淆你的.net程序的更多相关文章

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

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

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

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

  3. 批处理 进行svn代码拉取,vs编译,dotfuscator混淆

    Dotfuscator的使用:https://www.cnblogs.com/aitong/p/10684004.html 从拉取代码,编译到最后的混淆步骤很多.这时就可以使用批处理来进行自动化. 用 ...

  4. 利用VS自带的dotfuscator混淆代码的学习

    对于一些原创的敏感代码,我们可以通过简单的重命名混淆使得别人难以真正理解执行原理.这一点,使用VS自带的dotfuscator即可实现. 如上图所示,你可以自定义选择哪些类被排除重命名,内置的规则中, ...

  5. c# dotfuscator 混淆后无法使用

    在实体类中忘记给字段加上 get ;set ;导致编译后程序无法使用. 下面这个(A代码)是可以正常混淆的.     public class PhoneUsedStatus     {        ...

  6. Dotfuscator混淆加密

    混淆加密 1. 需要安装Dotfuscator软件 2. 安装好后打开软件,找到编译好的DLL文件 3. 打开[setting]设置属性,如下图: 把 Disable String Encryptio ...

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

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

  8. java混淆工具 字符串加密 程序加密 代码逻辑混淆 防止反编译

    混淆工具使用文档 ht-confusion-project1.0.0 目 录 1.功能介绍... 1 2.安装说明... 3 2.1Window查询jdk版本(点击开始菜单,输入cmd, 输入java ...

  9. Dotfuscator可以实现混淆代码、变量名修改、字符串加密

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

随机推荐

  1. MySQL全文本搜索

    启用全文本搜索支持 create table text( -> id int not null auto_increment, -> texts text null, -> prim ...

  2. 自建mail服务器之二:hmailserver

    具体参考: http://blog.xuite.net/sendohshih/blog/41958216-3%E5%88%86%E9%90%98%E8%BC%95%E9%AC%86%E6%93%81% ...

  3. range— 建立一个包含指定范围单元的数组 (數字、字母)

    range()函数快速创建从1到12的数字数组 $numbers=range(0,12); echo '<pre>'; print_r($numbers); echo '</pre& ...

  4. 十二、springboot(七)打包启动

    1.打包 mvn clean package -Dmaven.test.skip=true2.运行 a.不能后台运行 java -jar 项目.jar     b.可后台运行        java ...

  5. 到底什么是ES索引?

    你会发现,其实在ES里面,索引扮演的角色其实并不是存储,而是“索引”,看起来有点傻,但是其实我之前一直理解索引是存储,其实从命名上可以看出来,索引其实是分片的索引,分片的字典,记录了每个分片的位置,索 ...

  6. MySQL 绿色版安装Window 系统

    为了便捷安装现在网上提供了许多的绿色版本MySQL安装包,下载后解压即可使用,但是MySQL 下载直接运行还是有一点小问题,需要把MYSQL 注册成为系统服务: 1.下载mysql绿色版本 例如:my ...

  7. 阅读<Video Test Pattern Generator v7.0>笔记

    阅读<Video Test Pattern Generator v7.0>笔记 1.数据宽度的问题 TotalDataWidth的计算公式: 疑问:为什么TotalDataWidth后面需 ...

  8. excel技巧--单元格合并与拆分

    如果要将上图的地区列做成下图的合并单一列: 有如下做法: (以下图表格为例) 1.选择要排序的表格,点击“开始”-->排序和筛选-->自定义排序.在对话框选择“业务项目”进行排序: 2.选 ...

  9. adb命令模拟按键输入keycode

    adb命令模拟按键输入keycode 2017年05月18日 14:57:32 阅读数:1883 例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent ...

  10. PHP批量添加数据

    <?php // 连接数据库 header('content-type:text/html;charset=utf-8'); define('DB_HOST','127.0.0.1'); def ...