只统计具备独立结构或算法路径的实现;seed、比例、深度、阈值等参数排列不单独计数。
SOFTWARE PROTECTION CONCEPTS
软件保护技术概览
本页介绍软件保护中常见的源码变换、控制流混淆、字节码保护、虚拟化和运行时防护技术。示例仅用于说明基本概念,不代表任何工具的固定输出模式。
- 07
- 技术领域
- 39
- 核心概念
- 05
- 分析阶段
单项技术通常只增加特定分析阶段的成本,应根据威胁模型、兼容性和性能预算组合使用。
ANALYSIS-STAGE MATRIX
技术与分析阶段
从分析者所处阶段观察技术作用,能避免把不同目标的保护手段简单排成单一强弱顺序。
| 技术领域 | 源码阅读 | 控制流恢复 | 字节码分析 | 动态分析 | 自动化/LLM |
|---|---|---|---|---|---|
| 符号与源码变换 | 主要 | 辅助 | 有限 | 有限 | 辅助 |
| MBA 与数据保护 | 辅助 | 有限 | 辅助 | 有限 | 辅助 |
| CFF 与不透明谓词 | 辅助 | 主要 | 辅助 | 辅助 | 主要 |
| 字节码、IR 与 Stub | 有限 | 辅助 | 主要 | 辅助 | 辅助 |
| 虚拟化保护 | 有限 | 主要 | 主要 | 主要 | 主要 |
| Anti-LLM | 辅助 | 辅助 | 辅助 | 有限 | 主要 |
| 运行环境保护 | 有限 | 有限 | 辅助 | 主要 | 有限 |
“主要 / 辅助 / 有限”表示通常的主要作用阶段,不代表统一的安全强度评级,也不能替代针对具体产物的攻防评估。
SOURCE & SYMBOLS
源码与符号保护
改变代码的直接可读线索,使名称、文本和调用关系不再自然表达业务意图。
Identifier Renaming
标识符重命名- 定义
- 用无业务语义的名称替换函数、变量和参数标识。
- 常见变体
- 短混淆名、视觉相似名、长随机名、Unicode 相似字符。
- 概念示例
calculate_price(total)→_O0(l1)。- 适用范围
- 降低源码浏览、全文搜索和调用关系速读效率。
- 局限
- 类型、常量和行为仍可能暴露语义,反射代码需保守处理。
Synthetic Symbol
合成符号匿名化- 定义
- 对保护流程生成的辅助变量和函数统一去除可识别前缀。
- 常见变体
- 前缀折叠、随机映射、按作用域独立命名。
- 概念示例
decrypt_helper改写为与普通局部符号一致的名称。- 适用范围
- 避免辅助符号直接标记变换位置和运行职责。
- 局限
- 只能隐藏标签,无法隐藏辅助逻辑自身的行为特征。
Reflective Call
反射式调用- 定义
- 把直接属性调用改写为运行时名称解析。
- 常见变体
getattr查找、名称分片、间接调用表。- 概念示例
service.run(x)→getattr(service, name)(x)。- 适用范围
- 干扰基于语法节点的调用图和属性引用分析。
- 局限
- 运行时仍需解析真实名称,且可能影响静态检查和性能。
String Protection
字符串保护- 定义
- 不在静态代码中直接保存敏感文本,而在需要时恢复。
- 常见变体
- 分片重组、编码包装、流式变换、Native 侧恢复。
- 概念示例
"internal_api"以多段数据表达,调用前临时组合。- 适用范围
- 减少密钥标签、接口名和规则文本的直接检索线索。
- 局限
- 使用时通常会出现明文;简单编码不构成密码学保护。
DATA & EXPRESSIONS
数据与表达式变换
使用语义等价但结构复杂的表达式隐藏常量、条件和中间数据关系。
MBA Constants
混合布尔算术常量- 定义
- 用算术与位运算恒等式组合表达原始常量。
- 常见变体
- 线性 MBA、嵌套 MBA、多项式 MBA。
- 概念示例
- 常量
42改为在目标位宽上恒等于 42 的组合式。 - 适用范围
- 增加常量提取、模式匹配和符号化简成本。
- 局限
- 弱表达式可被规范化;必须验证位宽和溢出语义。
Dataflow MBA
数据流 MBA- 定义
- 把运行时值包入等价的零函数或多项式数据流。
- 常见变体
- 恒零函数包裹、多项式包裹、嵌套依赖。
- 概念示例
x + y与一个对所有输入恒为零的复杂项相加。- 适用范围
- 干扰值传播、表达式切片和自动语义归纳。
- 局限
- 可能放大表达式和运行成本,求解器仍可处理受限规模。
Opaque Predicate
不透明谓词- 定义
- 构造结果已知但不容易从静态形式立即判断的条件。
- 常见变体
- 代数恒真、MBA 等式、恒零式、布尔多项式。
- 概念示例
- 真实分支由恒真条件保护,并搭配不可达的干扰路径。
- 适用范围
- 增加分支可达性判断和控制流简化成本。
- 局限
- 固定模板容易识别;动态执行可直接观察分支结果。
Permutation Table
排列查表- 定义
- 通过可逆排列把数据映射到不同表示,再按需逆变换。
- 常见变体
- 随机置换、仿射置换、按字节分段置换。
- 概念示例
- 原值先映射为表索引,使用时通过逆表得到等价值。
- 适用范围
- 隐藏直接常量关系,并与字符串或 MBA 组合。
- 局限
- 正逆关系必须存在于运行链路,单独使用可被追踪。
Runtime Value Hiding
运行时藏值- 定义
- 静态阶段保存经过变换的值,执行过程中才恢复真实数据。
- 常见变体
- 局部派生、分片恢复、诱饵值并存。
- 概念示例
- 敏感阈值不直接出现在赋值语句,而由运行时输入组合得到。
- 适用范围
- 减少静态上下文中的高价值数据线索。
- 局限
- 动态跟踪仍可能捕获恢复后的值。
CONTROL FLOW & CALLS
控制流与调用结构
重塑基本块之间的关系和函数边界,使原始程序结构不再直接对应业务流程。
Control Flow Flattening
控制流平坦化 · CFF- 定义
- 把原本自然连接的基本块改为由统一调度结构驱动。
- 常见变体
- 状态打乱、虚假分支、加密比较、树形分发、间接分发、嵌套平坦化。
- 概念示例
- 入口→调度⇄状态块 A / B / C→出口
- 适用范围
- 显著增加控制流图恢复、结构化反编译和路径归纳成本。
- 局限
- 带来体积和性能开销;动态轨迹仍可辅助恢复真实转移。
Inline Calls
函数内联- 定义
- 将安全的被调用函数体展开到调用点,消除部分函数边界。
- 常见变体
- 表达式内联、语句体内联、选择性调用点展开。
- 概念示例
tax = rate(x)变为调用点中的等价计算步骤。- 适用范围
- 削弱函数级定位、复用关系和调用图线索。
- 局限
- 闭包、异常、递归和动态绑定会限制安全覆盖范围。
Junk Code
垃圾代码- 定义
- 加入不改变可观察结果的语句或计算。
- 常见变体
- 无效赋值、栈中性计算、不可达块、MBA 垃圾表达式。
- 概念示例
- 在真实步骤之间加入结果不被使用且无副作用的计算。
- 适用范围
- 增加代码体积、切片噪声和人工审阅负担。
- 局限
- 数据流分析可清理简单垃圾;错误设计会改变副作用或栈状态。
Fake Branches
虚假分支- 定义
- 增加表面可达、实际不可达或无业务影响的分支。
- 常见变体
- 恒假分支、诱饵目标、分层虚假边。
- 概念示例
- 真实路径旁加入形式合理但无法满足条件的处理分支。
- 适用范围
- 扩大控制流图并干扰路径优先级判断。
- 局限
- 依赖不透明条件质量;覆盖率和动态执行可筛除部分路径。
Dispatcher Topology
分发器拓扑- 定义
- 使用不同拓扑组织状态到基本块的映射关系。
- 常见变体
- 线性比较、决策树、掩码树、分组间接索引。
- 概念示例
- 调度目标由多级选择结构确定,而不是单一顺序判断。
- 适用范围
- 降低针对固定 CFF 形态的自动识别和恢复稳定性。
- 局限
- 逻辑拓扑最终仍需产生确定控制转移。
BYTECODE & IR
字节码与 IR 保护
在源码以下重组指令、基本块和函数载荷,使分析者必须理解额外的格式与运行桥接。
Version-Independent IR
版本无关中间表示- 定义
- 把不同解释器版本的指令语义映射到统一中间层。
- 常见变体
- 栈式 IR、CFG IR、语义指令 IR。
- 概念示例
- 版本相关输入先标准化,再应用同一 CFG 变换。
- 适用范围
- 支持跨版本变换并隔离解释器细节。
- 局限
- 必须精确维护调用、跳转、缓存和异常语义。
L2 Inline
字节码层内联- 定义
- 在中间表示中展开符合安全条件的小函数。
- 常见变体
- 单返回路径、局部变量重映射、选择性展开。
- 概念示例
- 调用指令被参数搬移、函数体和返回值搬移替代。
- 适用范围
- 在无源码形态下进一步打散函数边界。
- 局限
- 异常表、闭包和复杂调用协议限制可用范围。
Basic Block Merge
基本块合并- 定义
- 在保持跳转语义的前提下重新组织或合并 CFG 节点。
- 常见变体
- 直通块合并、跳板消除、条件结构归并。
- 概念示例
- 多个短块重排为更少但边关系更复杂的块。
- 适用范围
- 改变反汇编工具看到的块边界和图形结构。
- 局限
- 涉及异常区间或协议邻接时必须保守跳过。
Junk Instructions
垃圾指令- 定义
- 在指令流中插入净栈效果为零的无关序列。
- 常见变体
- 常量压栈丢弃、局部往返、无效算术、比较丢弃、MBA 中性序列。
- 概念示例
- 真实指令之间加入执行后栈深和状态不变的短序列。
- 适用范围
- 增加反汇编长度和语义切片噪声。
- 局限
- 必须满足栈中性与协议邻接;规范化工具可删除简单形态。
IR Decoy
IR 诱饵- 定义
- 在中间表示中加入不可达块或无关常量线索。
- 常见变体
- 不可达基本块、诱饵常量池、伪算法片段。
- 概念示例
- 静态图中存在看似关键的算法块,但入口不可满足。
- 适用范围
- 干扰仅依赖静态图、字符串和常量的分析。
- 局限
- 精确可达性分析或动态覆盖可识别诱饵。
Opcode Remap
操作码重映射- 定义
- 改变操作码与语义之间的映射,并由配套运行端解释。
- 常见变体
- 静态置换、按构建随机布局、分组映射。
- 概念示例
- 标准反汇编器读取同一字节时得到错误的指令含义。
- 适用范围
- 提高现成字节码工具直接分析的适配成本。
- 局限
- 映射可从运行端和动态轨迹恢复,不构成独立加密保证。
Function Stub
函数桩- 定义
- 以轻量入口替代真实函数体,调用时再请求受保护载荷。
- 常见变体
- 每次恢复、进程内缓存、按函数派生。
- 概念示例
- 调用→Stub→校验与恢复→执行
- 适用范围
- 减少静态 CodeObject 中直接存在的真实逻辑。
- 局限
- 运行时必须获得可执行表示,动态截获仍是威胁。
Module Payload Protection
模块载荷保护- 定义
- 把模块或函数载荷作为受校验的密文保存。
- 常见变体
- 模块级、函数级、按用途独立派生。
- 概念示例
- 启动入口只装载封装数据,通过校验后才重建执行对象。
- 适用范围
- 保护静态产物中的真实指令与常量内容。
- 局限
- 密钥管理与运行端边界决定整体安全性。
VIRTUALIZATION
虚拟化保护
把选定逻辑编译到自定义执行模型,使分析者需要先恢复虚拟指令系统和运行语义。
Register VM
寄存器虚拟机- 定义
- 用自定义寄存器机解释选定函数的虚拟字节码。
- 常见变体
- 固定寄存器集、窗口寄存器、带 spill slot 的分配模型。
- 概念示例
- 原始表达式被转换为虚拟寄存器之间的数据搬移与运算。
- 适用范围
- 保护高价值、范围可控且语义受支持的函数。
- 局限
- 引入运行开销;解释器与 handler 仍可被逆向。
Randomized ISA
随机化指令集- 定义
- 每次构建改变虚拟语义的编码布局。
- 常见变体
- 操作码排列、操作数顺序、填充策略、trap 布局。
- 概念示例
- 相同逻辑在不同产物中对应不同虚拟指令表示。
- 适用范围
- 降低一次性分析结果跨样本复用的价值。
- 局限
- 逻辑语义不变,单个样本仍可被完整建模。
Register Allocation
寄存器分配- 定义
- 把中间值映射到物理虚拟寄存器和 spill slots。
- 常见变体
- 线性扫描、图着色、调用约束分配。
- 概念示例
- 跨调用存活值被放入可保持区域,临时值使用调用易失区域。
- 适用范围
- 保证 VM 执行正确,并形成不同的数据布局。
- 局限
- 它首先是编译正确性机制,不应单独视为保护保证。
Per-Instruction Encryption
逐指令加密- 定义
- 仅在取指阶段临时恢复当前虚拟指令。
- 常见变体
- 位置相关独立恢复、前序明文参与的密钥链。
- 概念示例
- 运行端按程序计数器恢复一条指令,执行后丢弃临时明文。
- 适用范围
- 缩短完整虚拟字节码明文驻留窗口。
- 局限
- 取指点仍可被跟踪;跳转和异常入口会增加复杂度。
ANALYSIS INTERFERENCE
分析干扰与 Anti-LLM
通过改变输入上下文的质量、规模和可信度,增加自动摘要、机制识别和跨函数归纳的校验成本。
Prompt Injection
提示上下文干扰- 定义
- 在代码文本中加入面向自动分析上下文的干扰信息。
- 常见变体
- 分片文本、编码文本、不同提示语境模板。
- 概念示例
- 分析输入混入与真实程序语义无关的指令性文本。
- 适用范围
- 干扰未经隔离和校验的 LLM 辅助分析流程。
- 局限
- 健壮的分析系统会将代码视为不可信数据;可能产生审计噪声。
Mechanism Attack
机制识别干扰- 定义
- 制造看似能解释保护机制、实则不可靠的结构和说明。
- 常见变体
- 伪安全警告、特殊文本、假漏洞、占位实现、误导注释。
- 概念示例
- 多个自洽但互相冲突的机制线索同时出现。
- 适用范围
- 增加自动机制分类和人工初步研判的验证负担。
- 局限
- 不能改变真实执行行为,深入动态验证可排除错误线索。
Honeypot
算法蜜罐- 定义
- 加入与业务主题相似但不承担真实结果的诱饵逻辑。
- 常见变体
- 静态伪算法、诱饵常量、藏值伴随诱饵、伪逻辑骨架。
- 概念示例
- 静态代码出现完整的“评分算法”,但返回值从未进入真实输出。
- 适用范围
- 干扰基于名称、常量和局部语义的热点识别。
- 局限
- 污点分析和动态数据流可以区分真实结果与诱饵。
Runtime Logic Hiding
运行时藏逻辑- 定义
- 让静态可见逻辑与真正承担结果的运行路径分离。
- 常见变体
- 间接恢复、运行桥接、伪装算法骨架。
- 概念示例
- 源码中的主体提供合理外观,真实函数体在调用边界进入运行时。
- 适用范围
- 减少完整业务算法在单一静态上下文中的暴露。
- 局限
- 依赖载荷保护;动态调用链仍可被观察。
Context Exhaustion
上下文膨胀- 定义
- 增加相关性不一的代码和依赖,扩大有效分析窗口。
- 常见变体
- 辅助函数膨胀、函数首尾填充、长依赖链。
- 概念示例
- 核心函数周围出现大量语法合理但低价值的辅助定义。
- 适用范围
- 增加有限上下文模型的筛选、切片和跨文件关联成本。
- 局限
- 增加体积;检索增强和程序切片可缩小上下文。
PAYLOAD, LICENSE & RUNTIME
载荷、许可与运行环境保护
围绕密文恢复、密钥用途、设备许可和 Native 执行边界建立多层约束。
Payload Tag Validation
密文标签校验- 定义
- 恢复载荷前验证密文及关联数据未被意外或恶意修改。
- 常见变体
- 模块标签、函数标签、许可载荷标签。
- 概念示例
- 标签不匹配时拒绝返回任何可执行明文。
- 适用范围
- 阻止被篡改载荷继续进入重建和执行阶段。
- 局限
- 无法阻止拥有有效运行环境的观察者记录合法恢复结果。
Domain-Separated Key Derivation
用途隔离派生- 定义
- 从根秘密为不同用途派生彼此隔离的子密钥。
- 常见变体
- 模块域、函数域、许可域、运行秘密域。
- 概念示例
- 同一根秘密结合不同用途标签得到不同结果。
- 适用范围
- 限制单一子密钥泄露对其他保护用途的影响。
- 局限
- 根秘密保管和派生上下文设计仍是关键边界。
Device Binding
设备绑定- 定义
- 把许可或运行秘密与目标设备环境特征关联。
- 常见变体
- 单标识绑定、多特征指纹、设备派生密钥。
- 概念示例
- 交付数据只能在匹配指纹的目标环境中得到有效秘密。
- 适用范围
- 限制离线产物直接复制到未授权设备。
- 局限
- 硬件变化、虚拟化和指纹伪造需要容错与续签设计。
Offline License
离线许可- 定义
- 在无持续网络连接时验证签发数据和设备约束。
- 常见变体
- 设备 token、有效期许可、离线续签包。
- 概念示例
- 运行端本地验证签发内容后再开放受保护能力。
- 适用范围
- 客户机房、边缘节点和隔离网络的软件交付。
- 局限
- 撤销和时间可信性比在线许可更难处理。
Anti-Debug
反调试检测- 定义
- 检查运行环境中与调试器附加相关的风险信号。
- 常见变体
- 进程状态、系统接口、父进程与时序异常检测。
- 概念示例
- Native 初始化阶段汇总多类环境信号并采取策略响应。
- 适用范围
- 提高常规动态跟踪和批量调试成本。
- 局限
- 平台差异明显,检测可被绕过,也可能产生误报。
Integrity Check
完整性检查- 定义
- 测量关键本地代码区域并与预期值比较。
- 常见变体
- 启动测量、周期测量、关键区段测量。
- 概念示例
- 运行前验证 Native 代码区域未偏离受控构建结果。
- 适用范围
- 检测静态补丁和部分运行时篡改。
- 局限
- 测量逻辑本身也处于攻击面,构建协议必须严格一致。
Anti-Dump
反转储限制- 定义
- 利用平台能力限制或干扰进程内存转储。
- 常见变体
- 进程属性限制、错误处理收敛、敏感窗口缩短。
- 概念示例
- 启动后设置 best-effort 进程策略,减少普通转储路径。
- 适用范围
- 提高直接抓取运行时明文和秘密的门槛。
- 局限
- 无法对抗拥有更高权限的观察者,且依赖操作系统支持。
Hardened Bootstrap
加固自举- 定义
- 在开放核心 Native 能力前串联环境、完整性与许可检查。
- 常见变体
- 失败即拒绝、受控降级、秘密破坏式响应。
- 概念示例
- 加载→环境检查→完整性→许可
- 适用范围
- 把多个运行时约束汇聚到统一信任入口。
- 局限
- 链路复杂且平台相关,需要独立构建和目标环境验收。
IMPLEMENTATION STATUS
本项目中的实现状态
这是本页唯一与当前产品实现直接关联的区域。数量只统计具有独立实现路径和明确名称的策略;参数组合不计入变体。
| 技术 | 独立变体 | 实现路径摘要 | 状态 |
|---|---|---|---|
| Identifier Renaming | 4 | 短混淆、视觉混淆、长随机、Unicode 相似 | Production |
| Synthetic Symbol | 复用 4 | 复用标识符命名策略 | Production |
| Opaque Predicate | 5 | 经典恒真与 4 类 MBA 结构 | Production |
| Control Flow Flattening | 1 + 11 | 基础状态机与 11 个独立增强器 | Production |
| Source Junk Code | 1 | 无副作用垃圾赋值族 | Production |
| Inline Calls | 1 | 安全调用点展开 | Production |
| MBA Constants | 3 | 线性、嵌套、多项式 | Production |
| Dataflow MBA | 2 | 恒零包裹、多项式包裹 | Production |
| Reflective Call | 1 | 运行时属性解析 | Production |
| String Protection | 2 | 自包含恢复、Native/MBA 恢复 | Production |
| L2 Junk Instructions | 5 | 5 类栈中性指令形态 | Conditional |
| Function Stub | 2 | 按调用恢复、进程内缓存 | Conditional |
| IR Decoy | 2 | 不可达块、常量诱饵 | Conditional |
| Opcode Remap | 1 | 按构建置换映射 | Conditional |
| Module Payload Protection | 2 | 模块与函数用途域 | Conditional |
| Register VM / Randomized ISA | 1 + 4 | 寄存器机与 4 类布局随机化维度 | Conditional |
| Per-Instruction Encryption | 2 | 位置相关、密钥链 | Research |
| Prompt Injection | 2 | 分片拼接、编码表达 | Production |
| Mechanism Attack | 6 | 警告、特殊文本、假漏洞、占位、编码、注释 | Production |
| Honeypot | 3 | 静态蜜罐、运行时藏值、运行时藏逻辑 | Conditional |
| Context Exhaustion | 2 | 辅助函数膨胀、位置填充 | Production |
| Crypto / License | 4 类用途域 | 载荷、函数、设备与许可边界 | Conditional |
| Anti-Debug / Integrity / Anti-Dump | 平台相关 | Native 环境探针、测量与 best-effort 限制 | Research |
| Hardened Bootstrap | 1 | 受控自举链 | Research |
Research 能力不代表当前普通构建可直接启用。研发中/受控验证能力,当前不作为正式 hardened wheel 交付。所有技术均用于提高分析与复制成本,不承诺消除所有逆向风险。
FROM CONCEPTS TO ENGINEERING
把技术原理映射到工程边界
了解概念后,可继续查看保护层级、兼容范围、失败策略与交付验证。