




















https://www.cnblogs.com/gsyifan/p/21161614
本系列文章基于 TWSoft.AssemblyProtector 保护引擎,系统讲解 .NET 程序集的防护技术,从流水线架构到每一层保护的实现原理。
| # | 标题 | 核心内容 |
|---|---|---|
| 01 | 流水线架构与保护引擎总览 | 三阶段流水线、ProtectOptions、多模块编排 |
| 02 | 字符串加密:让反编译器的搜索功能失效 | Ldstr HOOK、XOR 块加密、xorshift32、不可见 Unicode |
| 03 | 符号混淆:名称就是第一道防线 | VTable 感知重命名、跨模块同步、6 种命名模式 |
| 04 | 控制流混淆:打乱逻辑让分析者绕路 | 基本块拆分、JumpMangler、不透明谓词 |
| 05 | 代码虚拟化:把 IL 变成只有你能懂的字节码 | 自定义 VM、栈式解释器、Token 名称反射 |
| 06 | 方法体加密:密钥在手才能执行的代码 | DynamicMethod 解密、ILGenerator 重建 IL |
| 07 | JIT Hook 保护:在编译时刻解密 | clrjit.dll Hook、Trampoline、哨兵 IL |
| 08 | 防篡改校验:任何修改都会触发自毁 | FNV-1a 方法体哈希、Environment.FailFast |
| 09 | 反调试与反转储:让调试器无处下手 | IsDebuggerPresent、PE 头归零、元数据销毁 |
| 10 | 资源加密:把 DLL 藏进保险箱 | SPN 三阶段加密、xorshift128、AssemblyResolve |
| 11 | 类型注入:无 DLL 依赖的运行时交付 | InjectHelper 深度克隆、框架外观程序集重定向 |
| 12 | 授权保护集成:从保护到变现的闭环 | 验证器编译、入口点注入、多点验证、HMAC 签名 |
本系列文章由 TWSoft.AssemblyProtector 保护引擎驱动。工具在全部完成后部分开源,欢迎在 GitHub 关注。文章内容仅供技术学习,请勿用于非法用途。
.NET 程序编译为 IL(中间语言),附带完整的元数据——类名、方法签名、字段类型一览无余。使用 dnSpy、ILSpy 等工具可以几乎完整还原源代码。对于商业软件,这意味着核心算法暴露、授权验证逻辑可被绕过、通信协议和 API 密钥泄露。
我们的保护引擎提供了 全链条防护——从字符串加密到方法体加密、从反调试到代码虚拟化,层层设防。
所有运行时助手类型在保护时通过 InjectHelper 深度克隆到目标程序集中。用户分发的受保护程序是完全自包含的,没有任何额外的 .dll 文件。
多个保护步骤共享 ProtectionContext,其中包含模块引用、随机数生成器、运行时类型服务、注入的用户类型等。这确保了步骤之间可以无缝协作。
使用 dnlib 库读写 .NET 程序集。dnlib 是 Mono.Cecil 的替代品,在 ConfuserEx 等知名保护工具中广泛使用。
每个保护步骤实现 IProtectionStep 接口,包含三个可选方法:
public interface IProtectionStep
{
string Name { get; }
// 阶段1:Inject(注入运行时)— 所有启用步骤先集体执行
foreach (var ctx in contexts)
{
foreach (var step in steps.Where(s => s.IsEnabled(ctx.Options)))
step.Inject(ctx);
}
为什么要分三个阶段? 因为 Order 靠前的步骤注入的运行时类型,可以被 Order 靠后的步骤保护。例如授权验证器(Order=5 注入)在后续的字符串加密(Order=10)和防篡改(Order=60)中会被自动保护。
ProtectionPipeline 构造函数中注册了全部 10 个保护步骤:
public ProtectionPipeline()
{
_steps = new List<IProtectionStep>
{
new LicenseInjectionStep(),
每个步骤通过 IsEnabled(opts) 决定是否启用:
// 字符串加密:由 EncryptStrings 开关控制
public bool IsEnabled(ProtectOptions options) => options.EncryptStrings;
ProtectOptions 是所有保护步骤的控制中心:
public class ProtectOptions
{
// === 字符串加密 ===
public bool EncryptStrings { get; set; }
public class ProtectionContext
{
public required ModuleDefMD Module { get; init; }
public class ProtectionSession
{
public IList<ProtectionContext> Contexts { get; }
public class AssemblyProtectorService
{
private IList<ProtectResult> ProtectMultipleCore(
List<string> inputs, string outputDir, ProtectOptions options)
{
| 入口 | 类型 | 技术 | 适用场景 |
|---|---|---|---|
TWProtector.CLI |
命令行 | .NET 10 Console | CI/CD 自动化 |
TWProtector (GUI) |
桌面 | Avalonia 12 | 跨平台可视化 |
TWProtector (WPF) |
桌面 | WPF | Windows 原生体验 |
命令行示例:
TWProtector.CLI --input MyApp.exe --output ./protected \
--preset all --encrypt-strings --obfuscate \
--license --online --api-url http://server:5159 \
--software-key YOUR_KEY
本文概述了保护引擎的流水线架构。后续文章将逐层深入每一类保护的具体实现。下一篇将详细讲解字符串加密——这是最基础但最有效的第一道防线。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。