使用 Dotfuscator 对代码进行混淆
Dotfuscator 简介
作为一种高级语言,c# 类库很容易被 .NET Reflector 这样的工具反编译。攻击者很容易从代码中找到数据库连接方式,加解密方法等重要信息。使用 dnspy 这样的工具甚至可以随意修改类库,下断点进行调试。
所以我们需要用 Dotfuscator 等工具对代码进行混淆。
Dotfuscator 使用方法:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html

Dotfuscator 使用流程
1 在 Input 中选择需要输入的类库(这些类库的依赖项必须在文件所在目录)
2 在 Settings 中设置临时目录和输出目录。
3 合理设置混淆参数(见下文)。
4 保存工程文件,方便下次使用。
5 开始混淆,在输出目录获取混淆后的类库,在反编译软件中验证混淆结果。

Dotfuscator 的保护措施
第一层保护:模糊转换 ,在反编译后增加阅读难度。(包括:Renaming, Control Flow, String Encryption)
第二层保护:运行时检测,防止他人篡改程序(包括:Tamper Check , Debug Check , Root Check , Shelf Life Check)(本文不作介绍)
其他保护:Removal , Watermarking(本文不作介绍)
Renaming
对命名空间,类,方法,字段进行重命名以增加阅读难度。
对于卖控件的公司来说,需要勾选 Library 选项,以防止 public 的类被重命名。如果类被重命名了那么其他人将无法调用这个类库。
对于卖软件的公司来说,需要取消勾选 Library 选项,这样所有的类都会被重命名。

Dotfuscator 利用了 c# 的重载特效,将完全不同的方法重命名为同一个方法,被称为 Overload Induction。
勾选 Use Enhanced Overload Induction 。
右侧的 Renaming Scheme 建议选择 Unprintable ,会将把类名重命名为一些不可打印的字符。这些字符无法再显示器上显示出来。

Overload Induction 这项技术不适用于 xaml 代码,使用反射和指定入口点的配置文件的情况。(wpf 控件大量使用 xaml ,不能进行 overload induction)
如果勾选了 Use Enhanced Overload Induction 选项时,需要将不需要进行重命名的类库在 Exclude 界面中勾选以排除重命名列表。

Control Flow
Control Flow 会打乱方法的执行顺序,增加大量无用的分支,以增加阅读难度。但有时会影响到性能。如果对性能有要求的话可以将类库排除出列表。

String Encryption
场景:在软件的某个位置弹窗:“您的软件是盗版的!”。
对软件反编译后寻找这个字符串后可以很方便的定位到程序的关键位置,通过篡改程序可以很方便的绕过核心的授权机制。
如果对字符串进行加密,反编译后将找不到这段话。
需要强调的是,对于 const string 常量,字符串加密功能将不起作用。所以建议在编写代码时将重要的常量改为 static string !!!!!!!!!!!!!!!!!!!!!
首先需要将 Disable String Encryption 改为 No (默认为 Yes)

然后将需要混淆字符串的类库勾选

部分勾选
Dotfuscator 所有的勾选都可以精确到类,方法和字段。
可以使用筛选器筛选出符合要求的匹配对象。这样在编写代码时可以对特定的类采用相似的命名规则以满足筛选器。(筛选器支持正则表达式)
具体使用方法见官方文档:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html

使用批处理进行混淆
https://www.cnblogs.com/aitong/p/10627930.html
使用 Dotfuscator 对代码进行混淆的更多相关文章
- Intellij idea 和android studio 代码给混淆
Intellij idea 和android studio 代码给混淆 一.指令说明-optimizationpasses 5 # 指定代码的压缩级别 -dontusemixedcaseclassna ...
- Flutter 发布APK时进行代码/资源混淆的坑
Flutter 发布APK时进行代码/资源混淆的坑 @author ixenos 1. 关键点 proguard是Java的代码混淆工具,但是当用第三方库的时候,必须要告诉proguard不要检查,因 ...
- vue项目配置 `webpack-obfuscator` 进行代码加密混淆
背景 公司代码提供给第三方使用,为了不完全泄露源码,需要对给出的代码进行加密混淆,前端代码虽然无法做到完全加密混淆,但是通过使用 webpack-obfuscator 通过增加随机废代码段.字符编码转 ...
- 详解计算miou的代码以及混淆矩阵的意义
详解计算miou的代码以及混淆矩阵的意义 miou的定义 ''' Mean Intersection over Union(MIoU,均交并比):为语义分割的标准度量.其计算两个集合的交集和并集之比. ...
- 使用VS2013自带的PreEmptive Dotfuscator and Analytis来混淆C#代码
1. 使用VS2013编译你要打包的程序,会在文件夹中的 ..\bin\Release中 2. 点击VS2013中的TOOLS -> PreEmptive Dotfuscator and Ana ...
- 详细讲解Android对自己的应用代码进行混淆加密防止反编译
1.查看项目中有没有proguard.cfg. 2.如果没有那就看看这个文件中写的什么吧,看完后将他复制到你的项目中. -optimizationpasses 5 -dontusemixedcasec ...
- java混淆工具 字符串加密 程序加密 代码逻辑混淆 防止反编译
混淆工具使用文档 ht-confusion-project1.0.0 目 录 1.功能介绍... 1 2.安装说明... 3 2.1Window查询jdk版本(点击开始菜单,输入cmd, 输入java ...
- 混淆-SmartAssembly
SmartAssembly 7 documentation:https://documentation.red-gate.com/sa SmartAssembly7.2版本下载链接: https:// ...
- 批处理 进行svn代码拉取,vs编译,dotfuscator混淆
Dotfuscator的使用:https://www.cnblogs.com/aitong/p/10684004.html 从拉取代码,编译到最后的混淆步骤很多.这时就可以使用批处理来进行自动化. 用 ...
随机推荐
- C++11学习笔记之三lamda表达式,std::function, std::bind
//lamda //first lamda [] {}; // second lamda []() //or no need () when paramater is null { std::cout ...
- Yii2 中国省市区三级联动
1.获取源码:https://github.com/chenkby/yii2-region 2.安装 添加到你的composer.json文件 "chenkby/yii2-region&qu ...
- ContextLoaderListener和Spring MVC中的DispatcherServlet学习 随手记
Servlet上下文关系 DispatcherServlet的上下文是通过配置servlet的contextConfigLocation来加载的,默认实现是XmlWebApplicationConte ...
- 20169205实验一 Java开发环境的熟悉(Linux+IDEA)
20169205实验一 Java开发环境的熟悉(Linux+IDEA) 实验内容及步骤 使用JDK编译.运行简单的Java程序 打开windows下的cmd → 输入cd Code命令进入Code目录 ...
- CSS 形状绘制
最后一个 先放代码 <style type="text/css"> #heart { positio ...
- 浅析Java语言慢的原因
Java在早期(比如JDK1.2以前)是很慢的,后续版本由于有许多优化手段的加入,Java正变得越来越快,所以现在也有很多关于Java和C/C++孰快孰慢的争论.我想就我自己的理解,谈一下影响Java ...
- 螺旋折线——第九届蓝桥杯C语言B组(省赛)第七题
原创 如图p1.png所示的螺旋折线经过平面上所有整点恰好一次. 对于整点(X, Y),我们定义它到原点的距离dis(X, Y)是从原点到(X, Y)的螺旋折线段的长度. 例如dis(0, 1)=3, ...
- 系统数据库--恢复Master数据库
实现步骤:关闭SQL SERVER 服务,使用DAC登录 在cmd下还原master 重启SQL SERVER 服务
- System Workbench for STM32(based on Eclipse)开发环境配置
导入现有项目 不能有同名项目,即使不是同一目录 编译 根目录的Debug目录是编译时自动生成的.另外如果项目使用了git,那么编译时会自动在根目录生成一个.gitignore文件,把Debug目录排除 ...
- LightOJ 1094 - Farthest Nodes in a Tree
http://lightoj.com/volume_showproblem.php?problem=1094 树的直径是指树的最长简单路. 求法: 两遍BFS :先任选一个起点BFS找到最长路的终点, ...