Protector4J v5 升级到 v6 指南

⚠️ 为了代码安全,建议尽快升级到 v6

AI 辅助逆向正在快速降低代码分析的门槛,v5 的保护强度已经不足以应对当前的安全形势,继续使用会面临更高的代码泄露风险。我们强烈建议尽快把受保护的应用迁移到 Protector4J v6。

一、为什么要升级到 v6

在 AI 工具的加持下,代码分析和逆向工程正在变得更加容易。传统的字节码混淆和简单加密已经难以应对新的安全挑战。

为了进一步提高 Java 代码的保护强度,我们重新设计了 Protector4J v6。v6 采用全新的 P4JX 保护架构,围绕代码加密、类加载、运行时校验和反调试等环节,引入了一百多项安全措施。即使借助先进的 AI 分析工具,逆向受保护的代码仍然是一件十分困难的事情。

因此,v6 与 v5 在保护架构、配置方式、命令行格式和输出结构上都有明显区别。

二、v5 与 v6 的主要区别

项目v5v6
保护架构使用 v5 加密格式和运行时使用全新 P4JX 架构和定制 VLX JRE
安全强度面向传统逆向工具引入一百多项安全措施,重点应对 AI 辅助逆向
配置方式参数较少,以任务文件为主参数更丰富,同时提供兼容模式降低使用门槛
命令行p4j -t <type> -f <task.yml>p4j <command> <input> <output> [options]
配置文件使用 v5 YAML 任务文件v5 配置文件不再可用;v6 可纯命令行运行
发布方式可通过 KeySeedonlyEncryptJarFiles 局部更新建议每次重新生成并整体发布完整输出目录

最重要的变化是:v5 的加密文件、运行时和 YAML 任务文件都不能直接交给 v6 继续使用。

三、使用兼容模式完成简易配置

由于保护强度大幅提升,v6 增加了保护范围、运行时、布局、兼容性和目标平台等配置参数。为了避免用户必须一次理解所有参数,v6 引入了兼容模式。

在 GUI 中,只需使用 Simple(推荐) 模式:

  1. 选择应用类型;
  2. 选择原始 JAR 或 WAR;
  3. 选择 Java 版本和目标平台;
  4. 让 Protector4J 扫描应用并自动选择保守的兼容参数;
  5. 确认输出目录后开始保护。

如果需要精确控制保护范围、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 命令
javajavaapp
spring-bootspringboot
tomcattomcat
java-libencode

注意: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.shrun.commandrun.bat 启动。应用必须与生成的 vlxjre 一起发布,不要替换成系统 JRE,也不要混用其他任务的运行时。

至少验证:

  • 应用能够正常启动和停止;
  • 核心业务功能正常;
  • 反射、序列化、ORM、Spring 代理和资源读取正常;
  • 所有目标操作系统都完成一次实际运行。

第五步:整体切换

验证通过后,整体切换到 v6 输出目录。后续更新也应从原始 JAR/WAR 重新生成完整包,不再沿用 v5 的 KeySeed + onlyEncryptJarFiles 局部更新方式。

六、升级建议

由于 AI 辅助逆向正在快速降低代码分析门槛,继续使用 v5 会面临更高的代码泄露风险。出于安全考虑,我们建议尽快完成从 v5 到 v6 的升级。

建议采用并行迁移方式:保留 v5 作为回滚版本,使用 v6 兼容模式生成新包,完成验证后再切换生产环境。

相关文档: