.NET 程序集保护权威指南
本手册完整覆盖 TWProtector 的代码虚拟化、符号混淆、字符串加密、Native 原生外壳、反调试反篡改、内置授权系统与命令行自动化,适用于 .NET Framework 4.0/4.8 与 .NET 6/8/10。
1. 简介
不存在能绝对阻止破解的软件保护方法。任何保护系统的价值,在于把逆向分析的成本抬高到攻击者认为"不值得"的程度。抵抗逆向工程的能力,决定了保护系统的整体强度。
TWProtector 是面向 .NET 程序集 的新一代保护工具。它不依赖加壳或简单加密,而是通过 符号混淆、逻辑混淆、代码虚拟化、IL 加密、原生外壳宿主、反调试反篡改 等多层机制,使受保护程序的代码与逻辑对分析者极度复杂且不可逆。
与通用二进制保护器不同,TWProtector 深度理解 .NET 元数据(类型、方法、字段、命名空间、程序集引用),因此能在保持程序行为完全一致的前提下,施加针对性的 IL 级与运行时级保护,并把保护、授权、签名整合进同一条流水线。
2. 术语表
- IL(中间语言) — .NET 编译产物,由 CLR 即时编译(JIT)为机器码执行。保护的核心对象。
- 字节码 / VMBC — 将真实 IL 转码为自定义虚拟机指令后得到的代码,由内置解释器执行。
- 虚拟化(Virtualization) — 把方法 IL 转换为虚拟机指令,逆向需重建整套未知指令集,复杂度不可逆。
- 混淆(Obfuscation) — 通过重命名符号、控制流扁平化、插入垃圾指令等手段使代码难以理解,功能不变。
- 变异(Mutation) — 用等价指令或产生相同结果的指令序列替换原始指令。
- 入口点(EntryPoint) — 程序集开始执行的方法(如
Main/RealMain)。 - JIT Hook — 在 CLR 即时编译时刻拦截并还原受保护方法体的技术。
- Profiler(CoreCLR) — .NET Core 提供的非托管注入接口,可在 JIT 阶段改写方法 IL。
- 原生外壳(Native Shell) — 用 C++ 编写的宿主程序,托管 CLR 并在内存中解密加载受保护 PE。
- 双 VM — C++ 原生虚拟机保护 C# 托管虚拟机自身,形成嵌套双层保护。
- 诱饵 Stub(Decoy) — PE 中留下的假方法体(如抛异常空体),真实逻辑运行时恢复。
- 水印(Watermark) — 嵌入程序集的唯一标识,用于追踪泄露源头。
- 强名称(Strong Name) — 基于 .snk 密钥的程序集签名,保证来源与完整性。
- 自举保护(Self-Protection) — 保护器对自身程序集施加保护的特殊策略。
3. 软件分析与保护原理
破解手段分为静态分析与动态分析:
- 静态分析:反编译/反汇编受保护程序(如 dnSpy、ILSpy),直接阅读 IL 或还原的 C#。字符串明文、语义化符号名、线性控制流都会为分析者提供线索。
- 动态分析:在调试器中运行程序,逐条绕过校验逻辑、内存转储、修改运行时状态。
单纯加壳或整体加密不足以防御:解壳后可从内存转储原始 PE,拿到密钥后可解密代码段。TWProtector 采用多层纵深策略同时打击两类分析:
| 攻击面 | TWProtector 对应防御 |
|---|---|
| 静态反编译 | 符号混淆、字符串加密、逻辑混淆、元数据混淆、PE 头混淆、签名抹除、Anti-ILDASM |
| IL 阅读 | 方法虚拟化 / IL 加密 / 纯 IL 表 / Native 虚拟化(IL 不以明文存在) |
| 调试器附加 | 反调试、反反射检测、入口点转移 |
| 内存转储 | 反转储、Native 外壳内存加载不落盘 |
| 补丁篡改 | Anti Tamper 哈希校验、SHA-256 文件自校验 |
| 反编译工具 | 反反编译器进程检测(dnSpy/ILSpy) |
核心思想:代码越复杂、语义线索越少、明文暴露面越小,破解者理解程序逻辑就越困难,从而放弃。
4. 什么是 TWProtector
TWProtector 提供两种入口,共享同一保护引擎与授权缓存:
- GUI 图形界面(TWProtector.exe)— 项目树 + 全局/每文件选项 + 授权配置,适合交互式使用。
- 命令行 CLI(TWProtector.CLI.exe)— 完整参数 + JSON 配置 + 每文件覆盖,适合构建流水线自动化。
其能力基石是把 .NET 程序集保护拆为可组合的多层:字符串加密、符号混淆、逻辑混淆、方法保护(五模式)、Anti Tamper、强名称签名、Native 原生外壳、其它推荐保护、授权保护,共 9 个功能组,可按需逐组开关、逐文件差异化。
5. 版本与功能矩阵
版本主要区分方法保护能力与授权管理能力;混淆与基础保护全版本支持。
| 功能 | 试用版 | 标准版 | 专业版 | 企业版 | 旗舰版 |
|---|---|---|---|---|---|
| 字符串加密 / 符号混淆 / 逻辑混淆 | ✓ | ✓ | ✓ | ✓ | ✓ |
| Anti Tamper / 其它推荐保护 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 方法保护 — IL加密 (DynamicMethod) | ✗ | ✓ | ✓ | ✓ | ✓ |
| 方法保护 — 纯IL表 (PureILTable) | ✗ | ✓ | ✓ | ✓ | ✓ |
| 方法保护 — JIT Hook | ✗ | ✗ | ✓ | ✓ | ✓ |
| 方法保护 — 代码虚拟化 (Virtualize) | ✗ | ✗ | ✓ | ✓ | ✓ |
| 方法保护 — C++虚拟化 (NativeVirtualize) | ✗ | ✗ | ✗ | ✗ | ✓ |
| 双 VM (NativeVmProtection) | ✗ | ✗ | ✗ | ✓ | ✓ |
| Native 原生外壳 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 授权保护 — 离线注入 | ✗ | ✗ | ✓ | ✓ | ✓ |
| 授权保护 — 在线验证 | ✗ | ✗ | ✗ | ✓ | ✓ |
| Stub 隐藏诱饵 | ✗ | ✗ | ✓ | ✓ | ✓ |
6. 快速上手
GUI 三步流程
- 启动
TWProtector.exe,在"保护"页点击选择文件夹,载入程序所在目录(左侧生成项目树)。 - 点击项目节点配置全局保护选项,或点击单个文件节点配置每文件覆盖。
- 点击右下角🚀 生成保护程序,输出到指定目录,在"日志"页查看每层保护结果。
CLI 一行命令
:: 激活授权(首次)
TWProtector.CLI --activate <授权码>
:: 保护单个 EXE,全功能
TWProtector.CLI --input app.exe --output protected
:: 仅字符串加密 + 混淆
TWProtector.CLI --input app.dll --output out --preset obfuscate
:: 使用 JSON 配置 + 每文件覆盖
TWProtector.CLI --config protect.json --file-options overrides.json
.twprotector.license 缓存,激活一次即可。7. GUI 图形界面
主界面顶部为五个选项卡:保护 / 授权 / 日志 / 帮助 / 关于,标题栏含授权版本与深浅色主题切换按钮。"保护"页是核心工作区。
7.1 文件与项目树
选择文件夹后,左侧呈现项目树:
- 一级节点 = 项目名(默认取目录名,双击可重命名),代表整个保护任务。
- 二级节点 = 程序集文件(.exe / .dll),带复选框决定是否纳入保护。
- 文件节点后的 ⚙ 标记 表示该文件已设置独立覆盖选项。
- 支持全选 / 全不选;顶部通栏设置输出目录。
点击项目节点,右侧显示全局选项;点击文件节点,右侧显示该文件的继承与覆盖面板。
7.2 全局保护选项
项目节点对应右侧面板,按 9 个功能组分块组织(详见 第 9 章)。父开关关闭时,组内子选项自动失效。授权版本不支持的功能会显示为不可用。
7.3 每文件保护选项(v1.6)
点击文件节点,右侧显示该文件对 9 个功能组的三态覆盖:
- 继承全局(默认)— 跟随项目全局设置。
- 启用 — 强制该文件启用此功能组(即使全局关闭)。
- 禁用 — 强制该文件禁用此功能组(即使全局启用)。
典型场景:全局启用混淆,但把某个对外提供 API 的第三方 DLL 设为"名称混淆:禁用",保留其公开符号不被改名。"全部恢复继承"可一键清除该文件所有覆盖。配置随 TWProtector.option 持久化,下次打开自动载入。
7.4 授权配置
"授权"页配置对被保护程序注入的授权保护:验证模式(在线/离线)、API 地址与密钥、产品名、RSA 公钥、入口点注入、多点注入等。详见 第 12 章。
7.5 日志与生成
"日志"页实时显示每个文件的保护进度、兼容性提示、方法保护覆盖率与最终结果摘要。日志同时落盘到输出目录 Logs\yyyy-MM-dd.log,便于排查失败原因。
8. 命令行工具 (CLI)
CLI 与 GUI 共享同一引擎,所有保护行为完全等价,适合集成进 MSBuild / CI 流水线。支持两种模式:命令行开关与 JSON 配置文件。
8.1 参数全表
命令与输入
| 参数 | 说明 |
|---|---|
--activate <key> | 激活工具授权 |
--input <file|folder> | 输入文件或目录,可重复或用分号分隔 |
--output <dir> | 输出目录 |
--config <json> | JSON 配置文件模式 |
--file-options <json> | 每文件覆盖字典 |
--pattern <glob> | 目录模式匹配,默认 *.dll;*.exe |
--preset | all / strings-only / rename-only / obfuscate |
功能开关(均支持 --flag / --no-flag)
| 组 | 参数 |
|---|---|
| 字符串 | --encrypt-strings、--string-mode |
| 混淆 | --obfuscate、--rename-mode、--rename-ns/types/methods/properties/fields/params/public/private/protected/internal、--flatten-namespaces |
| 逻辑 | --obfuscate-logic、--opaque-strength、--dispatcher、--nesting-depth、--randomize-patterns、--reorder-locals、--insert-nops、--cctor-state-machine |
| 方法 | --encrypt-methods、--method-mode、--method-scope、--method-names、--native-vm-protection、--jit-hook-stub-hiding |
| 防篡改 | --anti-tamper |
| Native | --native、--native-anti-dump、--native-mini-dump-hook、--native-anti-process、--native-obfuscate、--native-instr-subst、--native-junk-code |
| 其它 | --additional、--anti-debug、--anti-dump、--encrypt-resources、--metadata-confusion、--anti-decompiler、--pe-header-confusion、--signature-erasure、--anti-reflection、--sha256-self-check |
| 签名 | --strong-name、--snk <path> |
| 授权 | --license、--validate-mode、--api-url、--api-key、--product-name、--public-key、--encrypt-entry、--multi-point |
8.2 JSON 配置文件
{
"input": ["App.exe", "Lib.dll"],
"outputDir": "protected",
"options": {
"EncryptStrings": true,
"Obfuscate": true,
"EncryptMethods": true,
"MethodMode": "NativeVirtualize",
"NativeProtection": false,
"AntiTamper": true
},
"fileOverrides": {
"Lib.dll": { "Rename": "Off" }
}
}
枚举值用字符串(如 "DynamicMethod"、"在线验证")。fileOverrides 键为相对配置文件目录的路径。
8.3 每文件覆盖
优先级:--file-options > config.fileOverrides > TWProtector.option.FileOverrides。覆盖文件示例:
{
"App.exe": { "Methods": "On", "Native": "On" },
"Lib.dll": { "Rename": "Off" },
"Third.dll":{ "Obfuscate": "Off" }
}
9. 保护选项详解
9.1 字符串加密
把 ldstr 指令加载的字符串字面量加密为资源,运行时由注入的解密方法还原。明文字符串是反编译最强的语义线索,加密后分析者无法从字符串推断功能。
| 模式 | 强度 | 说明 |
|---|---|---|
| DelegateProxy(默认) | 中 | 委托间接调用解密,抗 de4dot 自动解密 |
| XorWithJunk | 中 | XOR + 解密路径插入干扰指令 |
| MultiLayer | 高 | 外层 XOR + 内层委托转发 |
| StackWalk | 最高 | XOR + StackFrame 调用方验证,防反射调用解密(与方法保护互斥,会降级为 DelegateProxy) |
9.2 符号混淆
重命名命名空间、类、方法、属性、字段、参数、泛型参数。基于 VTable 感知算法,自动阻止会破坏虚表/接口实现/反射依赖的重命名。
- 按可见性控制:public/private/protected/internal 各自独立开关。多程序集且有跨程序集调用时,建议关闭 public 重命名以保留对外 API。
- 重命名模式:Unicode(默认,反编译器显示混乱)等 6 种。
- 命名空间扁平化:移除命名空间,所有类型归入全局。
- 跨程序集同步:多文件保护时共享名称服务,保证 A 引用 B 的类型改名后引用同步更新。
9.3 逻辑混淆
对方法体 IL 施加等价变换,保持行为不变但结构面目全非:
- 控制流扁平化:基本块拆分 + 不透明谓词分发,强度 0–100(默认 60)。
- 不透明谓词:None / Basic / Strong / Paranoid 四级,恒真/恒假条件混淆分支。
- Switch 分发模式:用 switch 状态机替代线性跳转(经典控制流扁平化)。
- 嵌套深度:1–3 层,每层强度衰减防止片段爆炸。
- 等价指令替换 / 局部变量重排 / 随机 NOP 插入:打破 AI 可识别的指令模式。
- .cctor 状态机:把类型静态构造包装为状态机模式,增加控制流分析难度。
9.4 方法保护五模式
方法保护是核心强度来源,五选一互斥。选择依据是安全强度 vs 性能开销 vs 平台兼容:
| 模式 | 原理 | 强度 | 性能 | 平台 |
|---|---|---|---|---|
| DynamicMethod(默认) | IL 提取后加密存入资源,stub 调用运行时经 DynamicMethod 解密执行 | 高 | 较好 | 全平台 |
| PureILTable | 真实 IL 存入数据表,运行时 DynamicMethod 直接执行,无解释器开销,支持所有 opcode | 中高 | 最好 | 全平台 |
| Virtualize | IL → 自定义 VM 字节码,托管解释器执行 | 很高 | 较低 | 全平台 |
| JitHook | Hook clrjit!compileMethod(FW)/ COM Profiler(Core),JIT 时还原哨兵 IL | 很高 | 接近原生 | 仅 .NET Framework 4.5+ |
| NativeVirtualize | IL → C++ 原生 VM 字节码,VM 解释器在原生内存运行 | 最高 | 低 | 全平台 |
加密范围
All(全部)、EntryPointOnly(仅入口)、ByMethodName(按方法名列表,分号分隔)三种。建议对关键算法方法用 ByMethodName 精准保护,兼顾性能。
9.5 双 VM 增强(NativeVmProtection)
用 C++ 原生虚拟机保护 C# 虚拟机的关键方法(或各模式的解密方法),形成嵌套双层保护。与 NativeVirtualize 互斥(后者已直接用 C++ VM)。需企业版及以上。
9.6 Stub 隐藏诱饵(JitHookStubHiding)
把受保护方法在 PE 中只留下诱饵空体(如 throw new NotSupportedException(...)),真实 IL 运行时由 JIT Hook 恢复。反编译看到的只是抛异常的方法,形成"JIT Hook 隐藏 + 虚拟化执行"双层。被 VM 跳过的方法走 E 类降级:原始 IL AES-256 加密 + 诱饵体,Profiler 在 JIT 前恢复原生执行。
9.7 Anti Tamper
对方法体 IL 计算 FNV-1a 哈希并嵌入校验逻辑,运行时检测代码段被篡改则 Environment.FailFast 立即终止,抵抗补丁攻击。
9.8 强名称签名
保存时用 .snk 密钥对程序集签名,并同步多程序集互相引用的公钥。用于需要强名称身份的场景。
9.9 Native 原生外壳
把保护后的托管 PE 经 AES-256 加密嵌入 C++ 原生外壳,运行时由外壳宿主 CLR 并在内存解密加载(.NET Core 用 hostfxr,.NET Framework 用 ICLRRuntimeHost)。IL 保护在加密前全部生效,外壳是额外一层。
- 反转储:擦除内存 PE 头、Hook MiniDumpWriteDump、检测危险进程自动退出。
- 外壳混淆:用 iced 对原生外壳模板做指令级混淆(指令替换 + 死代码插入),防止定位 AES 解密逻辑。
9.10 其它推荐保护
- 反调试:检测调试器附加。
- 反转储:防止内存转储。
- 反反编译器:检测 dnSpy/ILSpy 进程,发现即退出(测试前请先关闭这些工具)。
- 资源加密 / 元数据混淆 / PE 头混淆 / Anti-ILDASM:破坏元数据与 PE 结构干扰反编译。
- 签名抹除:移除 DebuggableAttribute / CompilerGenerated 等,消除 AI 语义推断线索。
- 反反射检测:入口点转移到 RealMain + 解密方法反反射保护,工具反射调用即崩溃。
- SHA-256 自校验:文件末尾追加哈希,运行时重算比对,被改即退出。
9.11 保护水印
在程序集注入唯一标识特性,用于追踪泄露/盗版副本的合法来源。流水线恒启用,无需手动开关。
10. 保护流水线
保护引擎按固定顺序执行 26 个 Step,分四阶段:Inject → Execute → ConfigureWriter → PostWrite。每个 Step 依据该文件的有效选项决定是否启用。
| Order | Step | 作用 |
|---|---|---|
| 5 | LicenseInjection | 注入授权验证器 |
| 8 | CallGuard | 入口点转移 + 反反射 |
| 10 | StringEncryption | 字符串加密 |
| 20 | Obfuscation | 符号重命名(跨模块同步) |
| 30 | LogicObfuscation | 控制流扁平化 |
| 31 | CctorStateMachine | .cctor 状态机 |
| 32 | PatternRandomization | 等价指令/重排/NOP |
| 35 | Virtualization | IL → VM 字节码 |
| 40-43 | AntiDebug/AntiDump/AntiDecompiler/Sha256 | 运行时防护注入 |
| 50 | ResourceEncryption | 资源加密 |
| 52 | MethodEncryption | IL 加密 + DynamicMethod |
| 55 | JitHook | JIT 拦截还原 |
| 60-68 | MetadataConfusion/AntiTamper/PeHeader/AntiIldasm/SignatureErasure | 元数据与防篡改 |
| 80 | StrongName | 强名称签名 |
| 90-91 | NativeAot/NativeShell | 原生外壳(Core/Framework) |
| 96 | StackReserve | 大栈 PE 补丁(防深递归爆栈) |
| 100 | Watermark | 保护水印 |
11. 运行时注入组件
保护会向目标程序集注入运行时辅助类(注入后重命名为不可见 Unicode 名,反编译不可见):
| 组件 | 职责 |
|---|---|
| MethodGuard | DynamicMethod 解密执行入口 |
| JitHook | compileMethod hook 还原 |
| VirtualMachine | IL 字节码解释器 |
| NativeVmBridge | C++ VM 反射桥 |
| NativeMemoryModule | 内存加载 VM DLL(不落盘) |
| MethodDataTable | 纯 IL 数据表执行 |
| Constant | 字符串解密 |
| ResourceEncryptor | 资源解密 |
| AntiDebug / AntiDump / AntiDecompiler / AntiTamper / CallGuard / Sha256 | 各类运行时防护 |
12. 授权系统
TWProtector 内置完整授权解决方案,基于 RSA 非对称加密,序列号/离线文件无法伪造,无需集成第三方授权库。
12.1 工作原理
- 开发者在 Web 后台创建软件,生成 RSA 密钥对(私钥留存,公钥用于验证)。
- 保护时把公钥与授权配置注入被保护程序(LicenseInjection Step)。
- 终端用户激活:在线模式向 API 服务器验证;离线模式用机器码 + 签名
.lic文件 HMAC-SHA256 验证。 - 被保护程序在入口点及多个方法点检查授权状态,未授权则限制功能。
12.2 客户端 SDK API
客户端 SDK(netstandard2.0)LicenseClient 公开方法:
ActivateLicenseAsync(...) // 激活授权
ValidateLicenseAsync(...) // 在线验证
RequestLicenseAsync(...) // 申请授权
GetLicenseVersionAsync(...) // 查询版本
GetMachineCode() // 获取机器码
GetDefaultMachineCode() // 默认机器码
ValidateOfflineLicenseFile(...)// 离线 .lic 验证
12.3 Web 管理后台
MVC + REST API,控制器涵盖 Software / License / Customer / ApiKey / Account / Admins,支持序列号属性(过期日期、升级期限、硬件锁定、黑名单、用户数据)与激活状态实时监控。
12.4 离线注册机
WinForms Keygen 桌面工具 + 命令行工具(机器码 / 离线 .lic 生成),供无网络场景签发授权。
12.5 授权集成建议
① 把校验结果与业务逻辑"融合",绕过校验则功能异常;
② 比较密钥哈希而非明文;
③ 校验结果存动态内存而非全局字段;
④ 对校验方法与调用方法同时施加虚拟化保护。
13. 标记与精确控制
选择要保护的方法有三种方式:
- 按方法名:
MethodScope=ByMethodName+ 分号分隔名称列表。 - 排除标记:用
[Obfuscation(Exclude=true)]让类型/成员免于重命名(TWProtector 遵守该标准 .NET 特性)。 - 入口点:入口方法默认纳入保护,必要时可降级(不影响整体安全)。
被保护程序行为必须与原程序完全一致——TWProtector 以"不破坏"为第一原则,遇不兼容自动降级并记录,而非跳过保护。
14. 进程级选项规则(v1.6)
并非所有功能组都能逐文件差异化。进程级选项必须全进程一致,否则产物无法加载:
| 类别 | 功能组 | 原因 |
|---|---|---|
| 进程级(自动提升) | Native 保护、方法保护 | 外壳宿主/JIT Hook 注入作用于整个进程,混合模式导致依赖 DLL 加载错位或 stub 恢复时序崩溃 |
| 模块级(可差异化) | 字符串/混淆/逻辑/AntiTamper/强签名/其它/授权 | 纯模块内 IL 变换,互不影响 |
规则:任一文件启用进程级组而其它文件关闭时,自动把该组提升到全部模块并在日志输出"兼容性提升"警告,保证产物可运行且不削弱保护。
15. 兼容性与限制
支持范围
- 框架:.NET Framework 4.0 / 4.8,.NET 6 / 8 / 10。
- 架构:AnyCPU / x86 / x64。
- JitHook:仅 .NET Framework 4.5+。
已知限制
- Native 保护 × Stub 隐藏的多程序集场景:依赖 DLL 经匿名加载后受保护方法体运行时恢复可能错位,导致 LINQ/反射/泛型崩溃。单程序集不受影响;关闭其一即可规避。
- C# 虚拟机(Virtualize)对个别 opcode(如 conv.ovf)支持弱于 C++ 虚拟机,遇不支持指令会降级。
- 反反编译器检测会终止运行中的 dnSpy/ILSpy,测试前请先关闭。
- 深自举(保护器保护自身)耗时显著,属解释执行 + 跨桥调用的结构性开销。
16. 最佳实践
- 分层而非全开:核心算法用 NativeVirtualize / Virtualize,一般逻辑用混淆 + 字符串加密,平衡强度与性能。
- 先小范围验证:用 ByMethodName 保护少数关键方法,运行确认行为一致后再扩大。
- 保留对外 API:多程序集场景关闭 public 重命名,或用每文件覆盖禁用第三方 DLL 的混淆。
- 授权方法虚拟化:对授权校验及其调用方法施加虚拟化,配合融合式校验设计。
- CI 用 CLI + JSON:配置纳入版本控制,每文件覆盖固化到
TWProtector.option。 - 看覆盖率报告:每次保护后检查方法保护覆盖率与降级清单。
17. 常见问题 (FAQ)
Q:方法保护模式能组合吗?
五种模式互斥,但可搭配"双 VM"增强选项与 Stub 隐藏诱饵。
Q:专业版支持在线授权吗?
专业版仅离线授权;在线(Web)授权为企业版及以上。
Q:保护后程序无法运行?
多为互斥组合或进程级选项冲突。查看日志兼容性提示,逐一排查;参考第 15 章限制。
Q:如何只保护部分方法?
用 MethodScope=ByMethodName 指定方法名,或对不想保护的成员加 [Obfuscation(Exclude=true)]。
Q:每文件覆盖会覆盖全局子选项吗?
不会。覆盖只切换功能组父开关,组内子选项始终跟随全局;强制启用而全局关闭时,子选项采用默认值。
Q:授权码安全吗?
基于 RSA,密钥长度足以杜绝注册机;授权码在设置文件中 AES 加密存储。
18. 性能与体积
保护强度与运行时开销正相关,按场景选择:
| 模式 | 运行时开销 | 适用 |
|---|---|---|
| PureILTable | 几乎无 | 性能敏感、需全 opcode 支持 |
| DynamicMethod | 小 | 通用推荐 |
| JitHook | 接近原生 | FW 高性能强保护 |
| Virtualize | 中 | 强保护 |
| NativeVirtualize | 较大 | 最高安全(核心算法) |
逻辑混淆强度(Intensity)与嵌套深度也影响体积与性能。深递归场景由 StackReserve 步骤自动补丁大栈,防止爆栈。