做为一种高级语言,c# 类库很容易被 .NET Reflector 这样的工具反编译。攻击者很容易从代码中找到数据库链接方式,加解密方法等重要信息。使用 dnspy 这样的工具甚至能够随意修改类库,下断点进行调试。html
因此咱们须要用 Dotfuscator 等工具对代码进行混淆。正则表达式
Dotfuscator 使用方法:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html数据库
1 在 Input 中选择须要输入的类库(这些类库的依赖项必须在文件所在目录)c#
2 在 Settings 中设置临时目录和输出目录。ide
3 合理设置混淆参数(见下文)。工具
4 保存工程文件,方便下次使用。性能
5 开始混淆,在输出目录获取混淆后的类库,在反编译软件中验证混淆结果。ui
第一层保护:模糊转换 ,在反编译后增长阅读难度。(包括:Renaming, Control Flow, String Encryption)加密
第二层保护:运行时检测,防止他人篡改程序(包括:Tamper Check , Debug Check , Root Check , Shelf Life Check)(本文不做介绍)spa
其余保护:Removal , Watermarking(本文不做介绍)
对命名空间,类,方法,字段进行重命名以增长阅读难度。
对于卖控件的公司来讲,须要勾选 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 会打乱方法的执行顺序,增长大量无用的分支,以增长阅读难度。但有时会影响到性能。若是对性能有要求的话能够将类库排除出列表。
场景:在软件的某个位置弹窗:“您的软件是盗版的!”。
对软件反编译后寻找这个字符串后能够很方便的定位到程序的关键位置,经过篡改程序能够很方便的绕过核心的受权机制。
若是对字符串进行加密,反编译后将找不到这段话。
首先须要将 Disable String Encryption 改成 No (默认为 Yes)
而后将须要混淆字符串的类库勾选
Dotfuscator 全部的勾选均可以精确到类,方法和字段。
可使用筛选器筛选出符合要求的匹配对象。这样在编写代码时能够对特定的类采用类似的命名规则以知足筛选器。(筛选器支持正则表达式)
具体使用方法见官方文档:https://www.preemptive.com/dotfuscator/pro/userguide/en/index.html
https://www.cnblogs.com/aitong/p/10627930.html
我在更换电脑时碰到过一个报错:
Could not find a compatible version of ildasm to run on assembly D:\Dotfuscator\1.exe. This assembly was originally built with .NET Framework v4.0.30319. Build Error.
能够参考这篇文章:https://blog.csdn.net/winnyrain/article/details/17141331?utm_source=copy