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 輸出

使用產生的 run.shrun.commandrun.bat 啟動應用程式。發佈時必須同時攜帶產生的 vlxjre。不要將它替換為系統 JRE,也不要使用其他任務的執行環境。

至少驗證:

  • 應用程式可正常啟動和停止;
  • 核心業務功能正常;
  • 反射、序列化、ORM、Spring 代理和資源載入正常;
  • 已在每個目標作業系統上實際執行。

第五步:整體切換

驗證通過後,整體切換至 v6 輸出目錄。後續更新也應從原始 JAR/WAR 重新產生完整套件,不再沿用 v5 的 KeySeed + onlyEncryptJarFiles 局部更新方式。

六、升級建議

AI 輔助逆向正在快速降低程式碼分析的門檻,因此繼續使用 v5 會提高程式碼洩露風險。出於安全考量,我們建議儘快從 v5 升級至 v6。

建議採用並行遷移:保留 v5 以便回復,使用 v6 相容模式產生新套件,驗證完成後再切換生產環境。

相關文件: