混淆选项详解
恒盾C#混淆加密大师提供多种混淆加密选项,以下是详细说明:
基本保护选项
1. 防调试
勾选后,混淆加密的dll/exe文件无法在VS中,或者其他第三方调试工具中调试,程序如果发现有调试进程附加到自己,将会自动退出。
2. 防ILDasm
勾选后,系统自带的ILDasm程序,无法对加密的dll/exe程序进行反编译,反编译的时候会报错。

3. 防DnSpy
勾选后,加密的程序如果发现自己正在被DnSpy调试,则会报错并退出程序,防止被DnSpy动态调试。

4. 防篡改 (仅限EXE)
勾选后,exe程序无法被修改,任意对EXE文件的改动将导致EXE程序无法运行。
5. 加壳 (仅限EXE)
勾选后,将会对EXE程序加一层壳,原先的程序会被加密内嵌到EXE中,静态反编译工具将无法查看到任何原先的EXE代码。

6. 防de4dot
勾选后,可以防止de4dot对加密的程序进行反混淆,导致de4dot报错。

7. 防断点
勾选后,加密的程序如果发现自己运行到某个地方长时间停顿(意味着被下断点),则会报错退出。
8. 防ILSpy
勾选后,处理后的EXE/dll将无法被ILSpy解析。
9. 防虚拟机
勾选后,程序如果检测到自己运行在虚拟机中,将自动停止运行。
注入功能选项
1. 垃圾域
勾选后,加密的程序会被注入多个无用的域,可以干扰反编译工具,并且使反编译后的代码更难以阅读,起到保护的效果。
2. 垃圾空指令
勾选后,加密的程序的指令中,会被注入多个空指令,可以使反编译后的IL code难以阅读。
3. 垃圾函数
勾选后,加密的程序会被注入多个无用的函数,可以干扰反编译工具,并且使反编译后的代码更难以阅读,起到保护的效果。
4. 垃圾类型
勾选后,加密的程序会被注入多个无用的类型,可以干扰反编译工具,并且使反编译后的代码更难以阅读,起到保护的效果。
5. 垃圾字符串
勾选后,加密的程序会被注入多个无用的字符串,可以干扰反编译工具,并且使反编译后的代码更难以阅读,起到保护的效果。
混淆功能选项
1. 文件信息混淆
勾选后,会对加密程序的文件信息进行混淆,修改文件的内部名称,Assembly信息等。
2. 布尔混淆
勾选后,会对布尔值进行混淆,将布尔值转换成难以识别的基础类型。
3. 文件时间混淆
勾选后,会对加密文件的时间戳进行修改。
4. 流程混淆
勾选后,会对加密文件中的指令进行乱序,导致整个程序内部进行多次跳转,使得静态分析难以理解程序的意图。

5. 字符串加密
勾选后,会对程序中的字符串进行加密,可以有效防止静态分析出一些程序的关键代码的位置。

6. DOS头混淆
勾选后,会对EXE文件的DOS头进行修改,变成无法识别的字符串。
7. 数字混淆
勾选后,程序会对整型数字进行混淆,使得简单的数字,变成复杂的数字运算,配合控制流程等加密选项,起到更好的保护效果。

8. 字符串拆分
勾选后,将会对字符串进行拆分,将一个完整的字符串拆分成多个字符串相加的形式。

9. 函数调用混淆
勾选后,调用函数将不再使用函数名的方式进行,而是使用程序内部的函数token进行调用,使得静态分析难以看出使调用了哪个函数。

10. 字符串隐藏
勾选后,字符串将会被加密存放到原生函数中,反编译工具将无法获取到其具体的值。

11. 数字隐藏
勾选后,整型数字将会被加密存放到原生函数中,反编译工具将无法获取到具体的值。
12. 函数体隐藏
勾选后,将会对函数体进行加密,加密后的函数体在反编译工具中将无法被查看到。

13. 混淆引用列表
勾选后,会对引用列表进行混淆,使得反编译工具反编译出来的引用列表难以被理解。
14. 小数混淆
勾选后,代码中的小数会被加密存放,无法直接反编译出小数的值。
15. 链式函数混淆
勾选后,函数调用将会嵌套多层函数调用,使得难以静态分析代码的含义。
16. 异步混淆
勾选后,程序将把一些代码转换为异步调用的形式,使得逆向分析更加困难。
17. 错误函数体混淆
勾选后,会在函数中加入一些错误的指令,使得一些静态分析工具无法正常解析出函数内部的代码。
18. 原生化EXE
勾选后,会对EXE文件进行原生化处理,将EXE文件转变成原生程序,C#反编译工具将无法分析出内部的任何IL代码。
19. 加密资源文件
勾选后,可以对程序中的资源文件进行加密,反编译工具将无法查看资源文件的内容。
重命名选项
不同的重命名模式
不同的重命名模式会把相应的函数,类型,域等按照相应的格式进行重命名,分别如下面所示:
字母数字模式

UUID模式

特殊字符模式

Base64模式

英文单词模式

重命名对象
- Module重命名 - 勾选后,会对全局Module对象进行重命名
- 域重命名 - 勾选后,会对类中的域进行重命名
- 函数重命名 - 勾选后,会对程序中的函数进行重命名
- 命名空间重命名 - 勾选后,会对命名空间进行重命名
- 参数重命名 - 勾选后,会对函数的参数进行重命名
- 类型重命名 - 勾选后,会对程序中的不同类型进行重命名
- Assembly重命名 - 勾选后, 会对程序的Assembly名称进行重命名 (1.4.5新增功能)
随机种子 (1.4.5新增功能)
可以设置随机种子, 对于同一个EXE/DLL, 相同的随机种子每次混淆都会产生相同的结果, 便于排查问题

随机种子可以填写字母和数字
忽略列表功能
忽略列表功能可以填入不想被混淆的函数或者类型,对应的函数或者类型将不会被混淆加密。
例如,项目中有下面的代码:
using System;
namespace ConsoleApp1
{
internal class TestClass
{
internal TestClass()
{
new Program();
}
internal int MemberFunc()
{
int a = 1;
a++;
return a;
}
}
}
如果不想让MemberFunc()这个函数被混淆加密处理,可以在忽略列表中输入如下的条目,以下三种写法均可:
ConsoleApp1.TestClass.MemberFunc
或者
TestClass.MemberFunc
或者
MemberFunc
其中第一种写法更为精确,可以避免不同命名空间,或者不同class内部的同名函数都被忽略。

这样在处理的log中,可以看到相应的函数已经被忽略,该函数不会被混淆选项处理,将保持原样。

密码保护功能 (1.4.5新增功能)
密码保护功能可以给C#程序添加一个打开密码, 每次需要输入正确的密码才能运行

例如可以按照上图的设置, 给一个WPF程序添加密码, 加密混淆处理过后, 打开WPF程序, 需要输入正确的密码才能运行.
