Protector4J v5 から v6 へのアップグレードガイド

⚠️ コードの安全のため、できるだけ早く v6 へのアップグレードをおすすめします

AI を利用したリバースエンジニアリングにより、コード解析のハードルは急速に下がっています。v5 の保護強度は現在の脅威に対して十分とは言えず、使い続けるとコード流出のリスクが高まります。保護済みのアプリケーションを、できるだけ早く Protector4J v6 へ移行してください。

1. v6 にアップグレードする理由

AI ツールの進歩により、コード解析やリバースエンジニアリングは容易になりつつあります。従来のバイトコード難読化や単純な暗号化だけでは、最新のセキュリティ上の脅威に十分対応できません。

Java コードをさらに強固に保護するため、Protector4J v6 を全面的に再設計しました。新しい P4JX アーキテクチャでは、コード暗号化、クラスロード、実行時検証、アンチデバッグなどの各層に 100 を超えるセキュリティ対策を導入しています。高度な AI 解析ツールを使用しても、保護されたコードのリバースエンジニアリングは非常に困難です。

そのため、v6 は保護アーキテクチャ、設定方法、コマンドライン形式、出力構造のすべてで v5 と大きく異なります。

2. v5 と v6 の主な違い

項目v5v6
保護アーキテクチャv5 の暗号化形式とランタイムを使用新しい P4JX アーキテクチャとカスタマイズされた VLX JRE を使用
保護強度従来のリバースエンジニアリングツールを想定100 を超えるセキュリティ対策を導入し、AI 支援による解析にも重点的に対応
設定方法オプションが少なく、主にタスクファイルを使用オプションが増え、簡単に設定できる互換性モードも提供
コマンドラインp4j -t <type> -f <task.yml>p4j <command> <input> <output> [options]
設定ファイルv5 の YAML タスクファイルを使用v5 の設定ファイルは使用不可。v6 はコマンドライン引数だけでも実行可能
リリースと更新KeySeedonlyEncryptJarFiles で一部を更新可能毎回完全な出力を生成し、出力ディレクトリ全体をまとめて配布

最も重要な変更点は、v5 の暗号化済みファイル、ランタイム、YAML タスクファイルを v6 で直接再利用できないことです。

3. 互換性モードで簡単に設定する

保護強度の向上に伴い、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

互換性モードは設定を簡単にしますが、実際の動作テストの代わりにはなりません。生成後は、起動、主要機能、リフレクション、シリアライズ、データベースアクセス、サードパーティフレームワークの動作を確認してください。

4. コマンドライン形式の全面的な変更

v5 の CLI は 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 が必要です。選択したメソッドだけを native コードに変換し、標準 JRE を引き続き使用する v5 の方式とは完全に同等ではありません。

v6 でもタスクファイルを使用できますが、v6 GUI から新しくエクスポートした p4j-task.yml が必要です。

p4j --task-file p4j-task.yml

v5 の YAML ファイルを編集して再利用しないでください。v5 と v6 のタスク形式には互換性がありません。GUI で設定し直すか、最新の CLI ドキュメントに従ってコマンドを書き直してください。

すべてのコマンドとオプションについては、v6 CLI パラメーターリファレンスを参照してください。

5. v5 から v6 への移行

次の一連の流れに沿って移行します。

v5 のバックアップを保持 → 元の JAR/WAR を用意 → v6 互換性モードで再生成 → テスト → 切り替え

手順 1:v5 環境を保持する

必要に応じてロールバックできるよう、正常に動作している v5 の出力ディレクトリと起動手順を保持します。v5 のディレクトリを上書きしないでください。

手順 2:元の入力を用意する

v5 で暗号化されていない元の JAR、Spring Boot JAR、または WAR を用意します。v5 が生成した vlxlib、暗号化済み JAR、vlxjre は v6 の入力として使用できません。

手順 3:v6 で再生成する

対話形式で使用する場合は、GUI の Simple モードから始めます。自動化では、直接のコマンドライン引数と --compat-apply を使用します。新しいディレクトリに出力し、v5 のファイルと混在させないでください。

手順 4:v6 の出力を検証する

生成された run.shrun.command、または run.bat で起動します。アプリケーションと一緒に、生成された vlxjre も配布してください。システム JRE や別のタスクのランタイムに置き換えないでください。

最低限、次の項目を確認します。

  • アプリケーションが正常に起動および停止すること。
  • 主要な業務機能が正常に動作すること。
  • リフレクション、シリアライズ、ORM、Spring プロキシ、リソース読み込みが正常に動作すること。
  • すべての対象 OS で実際にパッケージを起動していること。

手順 5:パッケージ全体を切り替える

検証後、v6 の出力ディレクトリ全体へ切り替えます。以降の更新も元の JAR または WAR から完全なパッケージを再生成し、v5 の KeySeed + onlyEncryptJarFiles による部分更新は使用しません。

6. アップグレードの推奨

AI 支援によるリバースエンジニアリングはコード解析のハードルを急速に下げています。v5 を使い続けるとコード漏えいのリスクが高まるため、セキュリティ上の理由から、できるだけ早く v6 へアップグレードすることを推奨します。

移行は並行して行ってください。ロールバック用に v5 を残し、v6 の互換性モードで新しいパッケージを生成して検証し、その後で本番環境を切り替えます。

関連ドキュメント: