使用 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 从拉取代码,编译到最后的混淆步骤很多.这时就可以使用批处理来进行自动化. 用 ...
随机推荐
- java免费空间!最简单的openshift免费空间上传代码教程!和FTP一样简单!
史上最简单的openshift免费空间上传代码教程!没有之一! 最近因为想弄一个免费的空间,而且最好是Java的空间,找了一大片,jsp的空间少不说,免费的更是寥寥无几. 找了一大推垃圾空间,终于让我 ...
- Mysql设计索引的原则
内容来自书籍<深入浅出MySQL++数据库开发.优化与管理维护+第2版+唐汉明> 设计索引的原则1. 搜索的索引列,不一定是所要选择的列.换句话说,最适合索引的列是出现在 WHERE 子句 ...
- gogland golang 颜色&字体 colors&font 配置文件
<scheme name="Ya" version="142" parent_scheme="Darcula"> <opt ...
- 移动端H5页面如何屏蔽双击缩放的功能?(转)
来自大佬的回答: 我在我们的页面中加了很多,除了ios10以上的safari不兼容以外还没有遇到过不兼容的情况. <!-- 视图窗口,移动端特属的标签. --> <meta name ...
- 第02章 查询DSL进阶
本章内容 Lucene默认评分公式是如何工作的. 什么是查询重写. 查询二次评分是如何工作的. 如何在单次请求中实现批量准实时读取操作. 如何在单次请求中发送多个查询. 如何对包括嵌套文档和多值字段的 ...
- Postman -- HTTP请求的Chrome插件
摘要 : Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件. 用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网 ...
- fwrite与fread
函数原型 size_t fread(void *buffer, size_t size, size_t count, FILE *stream); size_t fwrite(const void ...
- XE10开发的APP对于苹果IPV6上架要求的处理(DelphiTeacher)
1.服务器必须使用域名.不能使用IP地址2.Indy的话,域名加[]3.DataSnap的话,Params.Values['CommunicationIPVersion'] :='IP_IPv6';4 ...
- [LeetCode 题解]: Pascal's Triangle
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- C# Winform Label内容根据其宽度自动调整字体大小
C# Winform Label内容根据其宽度自动调整字体大小 项目,有个要求,Label中显示的内容,能够根据其宽度自动调整字体的大小进行显示,刚刚开始的时候,总是想着通过不同的方法来直接测量内容的 ...