jvmp 保护指南 ← 返回落地页

接入之前先读:怎么正确地评估客户端保护的强度,怎么组织代码把保护价值写满。 内测期间我们发现,多数讨论还停留在传统视角——只用"纯算法能否破译"一把尺子来量 jvmp。 这一章把口径对齐:它是什么、不是什么、在你的防御体系里站在哪、你的代码该怎么写。

一、三个常见误读 内测实录

误读 ①「jvmp 不就是把 code 部分抽离,变成 C++ 执行?」

不是"抽 code",是整类消失。jvmp 是整类虚拟化:方法体、类与成员的符号元数据 (class / method / field proto)一并编译进每次构建形态都不同的私有 VM 指令—— 产物里没有标准字节码,语义上不再是完整的 Java 类文件。逆向者面对的不是"被搬走的代码", 而是一套需要整套重建的解释器。

"抽方法体进 native"是另一个物种:市面 Android 加固宣传的"vmp",本质是 hook 宿主 ART、 把方法体搬进自家 runtime——类/方法/字段体系还原封不动留在 dex 里,概念上只是 "双执行器",不是 VMP。jvmp 的 native 后端(高配形态)也不是"翻译成 C++ 源码": 它是把 guest VM 的实现从 Java 字节码换成 native 二进制,与宿主 JVM 的交互完全走 JNI 标准规范——概念层是真正的双 VM,类体系照旧消失。

误读 ②「纯算法终会被破译,所以这产品没价值」

AI 时代,自包含纯算法对足够强的对手终会被恢复——这是代价问题,不是某个产品的失败。 大厂的核心算法同样在被破:白箱密码三十年(Chow 2002 → 方案逐个结构性攻破 → WhibOx 竞赛全灭 → 产业全部转向组合防线)走完的就是这条路;Denuvo 每作必破,但首发窗口的 保护本身就是商业模式。

jvmp 的承诺因此从不是"不可破译",而是攻击成本定价权:

  • 抬价——把单次攻击成本抬到不经济的档位(数十轮公开红队对抗实测,最强商业 模型档的完全破译成本在小时级墙钟、数千万 token 量级,且唯一通路被逼至最贵路径);
  • 重置——per-build 随机化:指令编码 / 解释器形态逐构建变化,同一 jar 两次 保护产物互不相同。攻击者的工具链不可跨产物复用——你每发一次版,敌方前期的 攻击资产就清零一次,攻击成本从"一次性"变成"订阅式"。

误读 ③「用了 jvmp,我的业务就安全了」

jvmp 是一堵墙,不是一座城。客户端 SDK 只工作在防线局部,不能纯依托它确认 完全的安全:

  • 它的价值是隐藏大量业务逻辑规则,让破解者只能看到一个局部算法, 无法获得全局视野;
  • 检测与处置(查杀分离)、复杂业务风控规则、跨端关联的全局判断——这些在你的 服务端。就算局部算法被复原,对有纵深防御的业务实施作弊仍然非常难;
  • 反过来,核心资产(密钥/种子)也不该指望客户端藏住——组合防线见第三节。

二、AI 时代的安全观:定价,不是封路

为什么客户端方案只能"定价"

三段论:jar 必须本地可跑(产品前提,不可谈判)⟹ 攻击者可无限制观测执行 (trace / 差分对拍 / 内存补丁是平台特性,无法禁止)⟹ 确定性语义必然可恢复。 这不是 jvmp 的工程失败,是白箱威胁模型的结构性质:混淆在表示层作战, 观测在语义层作战,表示层的一切变换终将被语义层观测穿透。任何客户端方案—— 包括一切 native 壳——都在同一条定理下(DexProtector 亦被公开批量脱壳)。 安全是经济学:观测无法被封死,只能被定价。

但定理反过来同样成立:局部被破 ≠ 业务被破

攻击者恢复的只是"计算档":对任意输入算出输出——黑盒调用本来就能做到的事。 业务真正的护城河在"编辑档"与全局视野:风控规则的来历(哪个阈值是运营调的、 哪条分支是合规要求)、查杀分离的处置策略、服务端的关联判断——这些 trace 恢复不回来。 恢复 ≠ 理解 ≠ 可维护重写:语义骨架可以被拟合,工程上下文(命名 / 模块边界 / 演进史)在整类虚拟化里是物理消失的。

三、jvmp 在防御体系中的位置:一堵墙,站在组合防线里

层谁负责说明
客户端代码隐藏jvmp一堵墙:藏规则库、剥夺攻击者的全局视野——他只能看到局部算法
核心资产(密钥/种子/模型参数)外置 / 服务端化客户端没有密钥可提(白箱不可能性);jvmp 护的是外围逻辑
校验与风控服务端查杀分离、复杂业务规则、全局关联——攻击者看不见的那一半
完整性与溯源授权机制 / 完整性校验 / 水印对抗盗版分发与滥用

两个"卖错药"警告(对号入座)

  • 盗版分发根本不需要破译——受保护 jar 本身就能跑,直接分发即可。对抗盗版 分发靠完整性校验 / 授权 / 水印溯源,不是 jvmp;
  • 单点授权绕过只需局部理解——jvmp 只能抬价。授权判定建议服务端化, jvmp 保护外围业务逻辑。

三类真实威胁,jvmp 对号入座

  • 竞对学习后重实现——需要全局理解 + 可维护重写,jvmp 最强项 (理解密度 × 代码规模 × 演进频率全项乘上);
  • 绕过授权校验——单点理解即够:jvmp 抬价,配合陷阱 / 完整性校验 / 服务端校验;
  • 批量自动化窃取(抄整个 SDK / 规则库)——成本随规模线性放大,且 per-build 分化使自动化流水线无法复用前期工作。

四、jvmp 范式:怎么写代码,把保护价值写满 保护工程指南

4.1 选择性保护——价值高、频度低的先进来

  • 必保:核心算法、license / 计费逻辑、协议编解码、风控规则——业务价值高、 执行频度低;
  • 可保:业务编排层——调用图不可见本身就有价值;
  • 不保:DTO / 实体类(keep-real)、热点循环(用 benchmark 定位后调出)—— 虚拟化是解释执行,纯算术开销最重、编排层轻得多,保护面按价值圈定;
  • 用覆盖率报告(.report.txt)审计每个方法的去向。

4.2 切分点放进保护内部

签名 / 校验与业务参数组装写进同一个被保护类:攻击者即使拿到"计算档"产物也 无法拆分——得不到对业务组装流程的编辑能力。切分点暴露在保护之外,等于给攻击者 留了一个只攻一点的薄靶。

4.3 藏的是规则库,不是单个函数

防护价值 ∝ 理解密度 × 代码规模 × 演进频率。自包含算法理解密度最低 (恢复即失守,只剩窗口期价值——诚实预期);业务系统理解密度最高 (恢复 ≪ 理解 ≪ 可维护重写)——这是 jvmp 的主场。

写法上的含义:把规则、阈值、分支结构作为一个体系放进被保护代码,让它们与 业务缠在一起——而不是抽一个 checkLicense() 出来单独保护。规则越成体系、 与业务缠得越紧,拟合出来的语义骨架离"能安全改写"就越远。

4.4 演进是武器——与发版节奏同盟

per-build 随机化使敌方的每一次破解成果都锚定在特定构建上:你发版越勤, 他抄走的快照贬值越快,攻击成本随每个 build 重置。把保护强度与发版频率放进同一张 安全预算表里。

4.5 工程清单(快速对表)

  • 反射访问 / DTO / 接口 → keepReal(其代码不得直接调用 virtual 类——经 skeleton 编排层转发);
  • 入口 / 编排层 → skeleton 档(类形态保留、方法体进 VM, 可安全调用 virtual 类);
  • 容器影写(默认开):被保护代码里的 HashMap / HashSet 运行时实为影写容器, 攻击者 hook JDK 容器的 put/get 观察不到任何操作;
  • 与混淆叠加:与 ProGuard / R8 先后皆可叠加(出包 keep 需求自动生成);
  • 递归预算:保护后递归深度约缩水 32×——入口层限长、深递归改迭代、 或按 32× 系数调大 -Xss;
  • 变体数:variants = 2~3(抗差分对拍);
  • 崩溃栈:保护时 emitMapping,用 mapping.txt + jvmp retrace 还原。

4.6 资产分层:你的资产在哪一格

资产类型恢复等价代码后jvmp 真实防御力建议
自包含算法(加密原语/编解码器)恢复即失守窗口期保护 诚实卖窗口期;能服务端化就服务端化
授权 / 反破解小时级可用窗口期 + 完整性/陷阱 授权判定服务端化,jvmp 护外围
业务逻辑系统(风控/定价/审批/策略)恢复 ≪ 理解 主场:理解密度 × 规模 × 演进成体系保护 + 高频发版 + 演进同盟
核心资产(密钥/种子/参数)在客户端即失守—— 外置 / 服务端化,jvmp 护外围逻辑

五、诚实边界:承诺什么,不承诺什么

  • 防:反编译器直接读取、dump / defineClass 类提取(明文字节码从不出现)、 通用 lifter(每构建编码互异 + 指令融合);
  • 抬价:单 build 定向攻击需专业逆向(天级起步);语义诱饵 / 多解释器 / 每构建随机化进一步干扰验证与复用;
  • 不防:无限预算的定向攻击——任何客户端方案都不防,包括 native;
  • 数学边界:客户端密钥不存在(白箱不可能性)——真正不可破的边界只有服务端化;
  • 口径:我们只说"单位恢复成本"与"复用衰减率",从不说"不可破译"—— 声称不可破译的产品会被一次 demo 击穿信誉,诚实边界反而是强度的一部分。

六、挑战题是什么刻度 上界 ≠ 市场价格

官网的纯函数挑战(keygen)是我们自设的最严苛考场:确定性、oracle 无限采样、 域封闭三前提在同一个靶标上全部满足——它测的是防御上限与机制回归,是上界刻度。 不要拿它给真实业务场景定价:真实保护对象是业务系统(理解密度高、代码量大、形态 business-shaped),不是自包含算法;市场攻击者的主流方法学还停在 dump / defineClass 时代,对自定义 ISA 连入场券都没有。kit 被破 ≠ 产品被破;每一份有效破译报告 都按吸收纪律当日回流引擎(见首页"安全更新")。

去挑战专区看上界刻度 接入文档(四端)