协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
dotnet-reactor【开发与工程】Use when protecting .NET assemblies from reverse engineering — obfuscation, string encryption, control flow obfuscation, anti-debugging, licensing. .NET Reactor: commercial-grade .NET code protection and licensing tool.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
name: dotnet-reactor description: "Use when protecting .NET assemblies from reverse engineering — obfuscation, string encryption, control flow obfuscation, anti-debugging, licensing. .NET Reactor: commercial-grade .NET code protection and licensing tool." tags:
官网: https://www.eziriz.com/dotnet_reactor.htm
下载: https://www.eziriz.com/downloads.htm
版本: 商业闭源软件,不在 NuGet 分发;以官网下载页最新版为准(截至2026年)
许可证: 商业(提供个人/企业/全球许可证)
⚠️ 本 SKILL 仅作为技术使用说明,请确保使用 .NET Reactor 时拥有合法授权,并仅对自己拥有版权的代码使用。
.NET Reactor 主要功能:
也支持命令行 dotNET_Reactor.Console.exe 与 MSBuild 集成(CI 友好)。
完成后建议:
dotNET_Reactor.Console -project myproj.nrproj
# 或直接传参
dotNET_Reactor.Console -file App.dll \
-targetfile Protected\App.dll \
-necrobit 1 -obfuscation 1 -control_flow_obfuscation 1 \
-string_encryption 1 -anti_ildasm 1 -anti_tampering 1
-project 即保存的 GUI 配置(.nrproj XML)。
<Target Name="Protect" AfterTargets="Build">
<Exec Command="dotNET_Reactor.Console -project $(MSBuildThisFileDirectory)protect.nrproj"/>
</Target>
通过 GUI Obfuscation 选项卡或属性:
[Obfuscation(Exclude = true, ApplyToMembers = true)]
public class PublicApi
{
public string Hello() => "hi";
}
或在 .nrproj 中手动配置 Exclude 表。
推荐排除:
下载 License Generator + License Library(Eziriz 提供),在代码中:
using DNR.LicenseManager;
if (!License.IsValid()) {
// 显示注册窗体或退出
Application.Exit();
}
将类标记为不可重命名:
[Obfuscation(Exclude = true, ApplyToMembers = true)]
public static class License { ... }
License Manager 选项卡 → Enable Licensing → 配置:
GUI → License Manager → Trial Settings:
GUI → Advanced:
Files → Add multi assemblies → Merge Assemblies:将依赖打包到主 exe:
Assembly.GetExecutingAssembly().Location 可能变化dotnet publish -c Release 后再保护,对 self-contained 多文件目录可批量保护| 工具 | 类型 | 强度 | 注意 |
|---|---|---|---|
| .NET Reactor | 商业 | 高(IL 加密 + 控制流) | 收费 |
| ConfuserEx 2 | 开源 | 中 | 维护活跃度低 |
| Obfuscar | 开源 | 仅重命名 | 简单稳定 |
| Eazfuscator.NET | 商业 | 高 | 收费 |
.nrproj 配置文件.nrproj 加入仓库,MSBuild AfterTarget 自动保护Type.GetType() / Assembly.Load() 调用,加入 Exclude 列表Type.GetType("全名") 会失败,必须排除被反射的类型[Obfuscation(Exclude=true)]{Binding Path=Name} 依赖属性名,必须排除被绑定的类型ITransient/IScoped 接口按名称匹配的服务可能失效| 场景 | 推荐方案 |
|---|---|
| 商业软件防破解 | .NET Reactor(Necrobit + 授权) |
| 开源项目基础混淆 | Obfuscar(免费,仅重命名) |
| 无需混淆(API 已鉴权) | 不保护,靠服务端鉴权 |
| 单文件分发 | Merge Assemblies + 保护 |
| 问题 | 解决 |
|---|---|
反射 Type.GetType("...") 失败 | 排除被反射的类型/方法 |
| 序列化字段丢失 | JSON 用 [JsonProperty] 显式映射;或排除字段 |
| WPF XAML 绑定失败 | 排除被 XAML 引用的类型与属性 |
| 启动慢 | Necrobit 解密成本;可关闭部分保护项 |
| 被 AV 误报 | 联系杀软厂商加白;选择「Anti Debug = Mild」 |
| Linux 运行报错 | Necrobit 对 Linux / .NET Core 的支持依赖较新版本,需升级后实测验证 |