接入之前先读:怎么正确地评估客户端保护的强度,怎么组织代码把保护价值写满。 内测期间我们发现,多数讨论还停留在传统视角——只用"纯算法能否破译"一把尺子来量 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 的承诺因此从不是"不可破译",而是攻击成本定价权:
误读 ③「用了 jvmp,我的业务就安全了」
jvmp 是一堵墙,不是一座城。客户端 SDK 只工作在防线局部,不能纯依托它确认 完全的安全:
三段论:jar 必须本地可跑(产品前提,不可谈判)⟹ 攻击者可无限制观测执行 (trace / 差分对拍 / 内存补丁是平台特性,无法禁止)⟹ 确定性语义必然可恢复。 这不是 jvmp 的工程失败,是白箱威胁模型的结构性质:混淆在表示层作战, 观测在语义层作战,表示层的一切变换终将被语义层观测穿透。任何客户端方案—— 包括一切 native 壳——都在同一条定理下(DexProtector 亦被公开批量脱壳)。 安全是经济学:观测无法被封死,只能被定价。
攻击者恢复的只是"计算档":对任意输入算出输出——黑盒调用本来就能做到的事。 业务真正的护城河在"编辑档"与全局视野:风控规则的来历(哪个阈值是运营调的、 哪条分支是合规要求)、查杀分离的处置策略、服务端的关联判断——这些 trace 恢复不回来。 恢复 ≠ 理解 ≠ 可维护重写:语义骨架可以被拟合,工程上下文(命名 / 模块边界 / 演进史)在整类虚拟化里是物理消失的。
| 层 | 谁负责 | 说明 |
|---|---|---|
| 客户端代码隐藏 | jvmp | 一堵墙:藏规则库、剥夺攻击者的全局视野——他只能看到局部算法 |
| 核心资产(密钥/种子/模型参数) | 外置 / 服务端化 | 客户端没有密钥可提(白箱不可能性);jvmp 护的是外围逻辑 |
| 校验与风控 | 服务端 | 查杀分离、复杂业务规则、全局关联——攻击者看不见的那一半 |
| 完整性与溯源 | 授权机制 / 完整性校验 / 水印 | 对抗盗版分发与滥用 |
.report.txt)审计每个方法的去向。签名 / 校验与业务参数组装写进同一个被保护类:攻击者即使拿到"计算档"产物也 无法拆分——得不到对业务组装流程的编辑能力。切分点暴露在保护之外,等于给攻击者 留了一个只攻一点的薄靶。
防护价值 ∝ 理解密度 × 代码规模 × 演进频率。自包含算法理解密度最低 (恢复即失守,只剩窗口期价值——诚实预期);业务系统理解密度最高 (恢复 ≪ 理解 ≪ 可维护重写)——这是 jvmp 的主场。
写法上的含义:把规则、阈值、分支结构作为一个体系放进被保护代码,让它们与
业务缠在一起——而不是抽一个 checkLicense() 出来单独保护。规则越成体系、
与业务缠得越紧,拟合出来的语义骨架离"能安全改写"就越远。
per-build 随机化使敌方的每一次破解成果都锚定在特定构建上:你发版越勤, 他抄走的快照贬值越快,攻击成本随每个 build 重置。把保护强度与发版频率放进同一张 安全预算表里。
keepReal(其代码不得直接调用
virtual 类——经 skeleton 编排层转发);skeleton 档(类形态保留、方法体进 VM,
可安全调用 virtual 类);-Xss;variants = 2~3(抗差分对拍);emitMapping,用 mapping.txt +
jvmp retrace 还原。| 资产类型 | 恢复等价代码后 | jvmp 真实防御力 | 建议 |
|---|---|---|---|
| 自包含算法(加密原语/编解码器) | 恢复即失守 | 窗口期保护 | 诚实卖窗口期;能服务端化就服务端化 |
| 授权 / 反破解 | 小时级可用 | 窗口期 + 完整性/陷阱 | 授权判定服务端化,jvmp 护外围 |
| 业务逻辑系统(风控/定价/审批/策略) | 恢复 ≪ 理解 | 主场:理解密度 × 规模 × 演进 | 成体系保护 + 高频发版 + 演进同盟 |
| 核心资产(密钥/种子/参数) | 在客户端即失守 | —— | 外置 / 服务端化,jvmp 护外围逻辑 |
官网的纯函数挑战(keygen)是我们自设的最严苛考场:确定性、oracle 无限采样、 域封闭三前提在同一个靶标上全部满足——它测的是防御上限与机制回归,是上界刻度。 不要拿它给真实业务场景定价:真实保护对象是业务系统(理解密度高、代码量大、形态 business-shaped),不是自包含算法;市场攻击者的主流方法学还停在 dump / defineClass 时代,对自定义 ISA 连入场券都没有。kit 被破 ≠ 产品被破;每一份有效破译报告 都按吸收纪律当日回流引擎(见首页"安全更新")。
去挑战专区看上界刻度 接入文档(四端)