参考· 01

加密选项

36 项 ConfuserEx 保护,分 5 组。每项标注默认值、适用场景与它写进模板的内容。

适用于 v0.2.0/约 6 分钟/参考

先选一档强度

四档预设会一次性把下面一组开关摆到合理位置,之后仍可逐项微调。 一项保护都不启用时,「加密」这一步在执行时会被自动跳过。

预设 定位
不加密 只做合并与打包
基础 内部工具、快速验证:重命名(letters)+ 常量加密,几乎不影响启动速度
标准(推荐) 常规商业分发:重命名 + 常量加密 + 控制流 + 反调试,兼容性风险低
严格 高价值授权软件:再加反篡改、防转储、强化。可能有兼容性风险,务必回归测试

界面上每个选项都标注「默认 X」,改过之后变色;「恢复默认」按钮按 schema 整组重置。 带参数的选项只在对应保护开启后才出现 —— 关掉的保护,它的参数不该占着地方。

加密步骤:四档预设与分组选项
③ 加密 —— 预设在上,分组选项在下
加密选项:每项都标注默认值与适用场景
每个选项都带「默认 X」与一句适用场景,改过之后变色

组 1 · 保护强度

选项 默认 说明
preset normal 写进 <rule preset="…">。显式开启的 protection 会覆盖预设里的同名项,所以它更像「兜底强度」

组 2 · 反编译与防篡改

目标是「让静态分析变贵、让改动被发现」。这几项对启动速度的影响都很小。

选项 默认 说明
antiIldasm 关 阻止 ILDASM 等工具直接打开程序集。零成本
antiDebug 关 检测调试器 / 分析器并阻止附加。对使用性能分析工具的场景不友好
debugMode safe 反调试引擎:safe 走托管 API(兼容性最好)/ win32 走 WinAPI(仅 Windows)/ antinet 最强但不兼容 Mono
antiTamper 关 用整个模块的校验和加密方法体:任何字节被改动程序就加载不起来。副作用是反编译器里方法体全是空的,且会产生不可验证的模块
tamperMode normal 校验时机:normal 启动时校验一次 / jit 每次方法编译前校验(更难绕过、兼容性差)
tamperKey normal 密钥派生:normal 静态算法 / dynamic 动态生成算法
antiDump 关 阻止把解密后的程序集从内存 dump 出来。依赖 WinAPI,仅 Windows
invalidMetadata 关 写入畸形元数据让反编译器解析出错。对运行时无影响,但某些扫描工具会误报
harden 关 加固其它 protection 的运行时,显著提高「脱壳」成本。只在同时启用了别的保护时才有意义

组 3 · 代码混淆

目标是「反编译出来的代码读不懂、也编译不回去」。重命名最有效,但对反射密集的程序有风险。

选项 默认 说明
rename 关 把类名、方法名改成无意义字符。按名字反射查找、或通过序列化跨程序集通信的程序可能被破坏
renameMode unicode unicode 最难读但反射会失效 / letters 兼容性最好 / sequential 输出 symbols.map 便于用崩溃日志里的名字反查 / decodable 可解码 / reversible 用口令加密符号名 / retain 不重命名
renamePassword 空 仅 reversible 下生效。上线后收到崩溃日志可用它把混淆名还原成原始名
renameArgs 开 连方法参数名一起重命名(参数名会出现在堆栈与反射结果里)
renEnum 关 重命名枚举成员。枚举成员名常被当作字符串序列化或写进配置,开启前要确认没有依赖名字的地方
renPublic 关 重命名公开成员。供外部调用的类库不要开 —— 调用方是按名字找的
controlFlow 关 打乱方法内部的控制流。体积会明显增大,执行也变慢
cfType switch switch 用状态机重排(推荐)/ jump 插入跳转制造面条代码,会产生不可验证的模块
cfPredicate normal 状态变量存放方式:normal 直接存 / expression 用动态表达式编码 / x86 用原生 x86 表达式(会破坏 AnyCPU)
cfIntensity 60 0–100。数值越小,每个基本块被切得越碎、越难读,但执行越慢
cfDepth 4 1–16,仅在状态变量用 expression / x86 时生效。越深越难还原,编译越慢
cfJunk 关 在方法里塞入永不执行的代码干扰阅读。明显增大体积,且会产生不可验证的模块
refProxy 关 把字段 / 方法的直接引用改成间接调用,隐藏「谁调用了谁」
refMode mild mild 加一层间接方法(轻量)/ strong 用动态委托(更难还原但更慢)
refInternal 关 默认只代理跨程序集调用;打开后程序集内部的调用也走代理

组 4 · 数据加密(对称)

把常量与内嵌资源编码后存放,运行时再解码 —— 这是 .NET 程序集里最直接的「对称加密」落点, 密钥由 ConfuserEx 随机生成并藏进解码器。

选项 默认 说明
constants 关 加密字符串与数字常量,让反编译出来的代码里看不到关键字、接口地址、密钥片段
constMode normal normal 带随机参数的静态算法 / dynamic 现场生成算法 / x86 生成原生 x86 表达式(最强,但破坏 AnyCPU)
constElements SI 加密哪些常量:S 字符串、N 数字、P 常用值(0/1/-1)、I 数组初始化器,可组合。P 必须与 S 或 N 同时出现
constCfg 关 把解码过程绑定到控制流状态变量上,静态还原难度大幅提高,代价是运行时性能有可感知下降
resources 关 加密内嵌资源(图标、配置文件、内嵌脚本)。资源在加载时解码,启动会稍慢。若已开压缩器,可只留一项以免重复压缩
resMode normal normal 静态算法 + 随机参数 / dynamic 现场生成算法

组 5 · 签名与复现(非对称 / 哈希)

选项 默认 说明
snKeyPath 空 强名称密钥(.snk / .pfx)。用 RSA 私钥给程序集签名,运行时可验证未被替换。留空则不签名
snKeyPass 空 仅当上面给的是 .pfx 容器时才需要。.snk 一般没有口令
seed 空 ConfuserEx 的加密参数是随机的。填一个固定值,同样的输入就能得到字节一致的输出
debugSymbols 关 保留 .pdb。线上排障需要它来还原堆栈行号,但发布给用户的包里通常不该带
compress 开 把程序集压缩后加载,体积更小、加载稍慢。与「资源加密」同时开启会压缩两次,二选一即可

生成强名称密钥:

sn -k app.snk
带参数的选项只在对应保护开启后才出现
条件显示 —— 关掉的保护不会把它的参数留在界面上

兼容性提示

  • cfPredicate=x86、constMode=x86 会破坏 AnyCPU:它们生成原生 x86 指令,64 位进程里跑不起来。
  • antiDump、debugMode=win32 依赖 WinAPI,仅 Windows。
  • debugMode=antinet 最强,但不兼容 Mono。
  • antiTamper、cfJunk、cfType=jump 都会产生**不可验证(unverifiable)**的模块, 某些环境会拒绝加载。

需要看「这些开关到底写进模板的什么位置」时,翻模板与占位符。

搜索Esc

↑ ↓ 选择 · Enter 打开 · 中英文都能搜