Protector4J v5 升级到 v6 指南
⚠️ 为了代码安全,建议尽快升级到 v6
AI 辅助逆向正在快速降低代码分析的门槛,v5 的保护强度已经不足以应对当前的安全形势,继续使用会面临更高的代码泄露风险。我们强烈建议尽快把受保护的应用迁移到 Protector4J v6。
一、为什么要升级到 v6
在 AI 工具的加持下,代码分析和逆向工程正在变得更加容易。传统的字节码混淆和简单加密已经难以应对新的安全挑战。
为了进一步提高 Java 代码的保护强度,我们重新设计了 Protector4J v6。v6 采用全新的 P4JX 保护架构,围绕代码加密、类加载、运行时校验和反调试等环节,引入了一百多项安全措施。即使借助先进的 AI 分析工具,逆向受保护的代码仍然是一件十分困难的事情。
因此,v6 与 v5 在保护架构、配置方式、命令行格式和输出结构上都有明显区别。
二、v5 与 v6 的主要区别
| 项目 | v5 | v6 |
|---|---|---|
| 保护架构 | 使用 v5 加密格式和运行时 | 使用全新 P4JX 架构和定制 VLX JRE |
| 安全强度 | 面向传统逆向工具 | 引入一百多项安全措施,重点应对 AI 辅助逆向 |
| 配置方式 | 参数较少,以任务文件为主 | 参数更丰富,同时提供兼容模式降低使用门槛 |
| 命令行 | p4j -t <type> -f <task.yml> | p4j <command> <input> <output> [options] |
| 配置文件 | 使用 v5 YAML 任务文件 | v5 配置文件不再可用;v6 可纯命令行运行 |
| 发布方式 | 可通过 KeySeed 和 onlyEncryptJarFiles 局部更新 | 建议每次重新生成并整体发布完整输出目录 |
最重要的变化是:v5 的加密文件、运行时和 YAML 任务文件都不能直接交给 v6 继续使用。
三、使用兼容模式完成简易配置
由于保护强度大幅提升,v6 增加了保护范围、运行时、布局、兼容性和目标平台等配置参数。为了避免用户必须一次理解所有参数,v6 引入了兼容模式。
在 GUI 中,只需使用 Simple(推荐) 模式:
- 选择应用类型;
- 选择原始 JAR 或 WAR;
- 选择 Java 版本和目标平台;
- 让 Protector4J 扫描应用并自动选择保守的兼容参数;
- 确认输出目录后开始保护。
如果需要精确控制保护范围、Spring Boot 布局、JVM 参数或 JavaFX 等选项,再进入 Advanced 模式调整。
命令行中可以使用 --compat-apply。它会扫描应用、自动采用保守的兼容建议,然后继续生成保护包:
p4j javaapp app.jar dist --compat-apply
兼容模式能够简化配置,但不能替代实际运行测试。生成后仍应验证应用的启动、主要功能、反射、序列化、数据库和第三方框架功能。
四、命令行格式已经彻底改变
v5 命令行依赖 YAML 配置文件:
p4j -t java -f java-task.yml
v6 支持完全脱离配置文件,直接使用命令行参数:
# 普通 Java 应用
p4j javaapp app.jar dist --compat-apply
# Spring Boot 应用
p4j springboot app.jar dist --compat-apply
# Tomcat WAR
p4j tomcat app.war dist --compat-apply --context /app
# Java 类库
p4j encode library.jar library.p4jx
应用类型的对应关系如下:
| v5 类型 | v6 命令 |
|---|---|
java | javaapp |
spring-boot | springboot |
tomcat | tomcat |
java-lib | encode |
注意:v6 encode 会保护类库中的所有 class,并且需要 VLX JRE 加载;它不是 v5“选择方法转为 native、仍使用标准 JRE”的完全等价替代。
v6 仍然支持任务文件,但必须使用 v6 GUI 重新导出的 p4j-task.yml:
p4j --task-file p4j-task.yml
不要修改 v5 YAML 字段后继续尝试。v5 任务文件与 v6 格式不兼容,应当通过 GUI 重新配置,或根据最新 CLI 文档重写命令。
完整命令和参数请查看 v6 CLI 参考。
五、从 v5 迁移到 v6
整个迁移过程只需要沿着下面这条主线进行:
保留 v5 备份 → 找到原始 JAR/WAR → 使用 v6 兼容模式重新生成 → 测试 → 切换
第一步:保留 v5 环境
保留当前可运行的 v5 输出目录和启动方式,用于迁移失败时回滚。不要直接在 v5 目录中覆盖文件。
第二步:准备原始输入
找到未经 v5 加密的原始 JAR、Spring Boot JAR 或 WAR。v5 生成的 vlxlib、加密 JAR 和 vlxjre 都不能作为 v6 的输入。
第三步:用 v6 重新生成
普通用户优先使用 GUI 的 Simple 模式。自动化流程使用纯命令行参数和 --compat-apply。输出到一个新目录,不要与 v5 文件混合。
第四步:验证 v6 输出
使用 v6 包内的 run.sh、run.command 或 run.bat 启动。应用必须与生成的 vlxjre 一起发布,不要替换成系统 JRE,也不要混用其他任务的运行时。
至少验证:
- 应用能够正常启动和停止;
- 核心业务功能正常;
- 反射、序列化、ORM、Spring 代理和资源读取正常;
- 所有目标操作系统都完成一次实际运行。
第五步:整体切换
验证通过后,整体切换到 v6 输出目录。后续更新也应从原始 JAR/WAR 重新生成完整包,不再沿用 v5 的 KeySeed + onlyEncryptJarFiles 局部更新方式。
六、升级建议
由于 AI 辅助逆向正在快速降低代码分析门槛,继续使用 v5 会面临更高的代码泄露风险。出于安全考虑,我们建议尽快完成从 v5 到 v6 的升级。
建议采用并行迁移方式:保留 v5 作为回滚版本,使用 v6 兼容模式生成新包,完成验证后再切换生产环境。
相关文档: