Protector4J v5 から v6 へのアップグレードガイド
⚠️ コードの安全のため、できるだけ早く v6 へのアップグレードをおすすめします
AI を利用したリバースエンジニアリングにより、コード解析のハードルは急速に下がっています。v5 の保護強度は現在の脅威に対して十分とは言えず、使い続けるとコード流出のリスクが高まります。保護済みのアプリケーションを、できるだけ早く Protector4J v6 へ移行してください。
1. v6 にアップグレードする理由
AI ツールの進歩により、コード解析やリバースエンジニアリングは容易になりつつあります。従来のバイトコード難読化や単純な暗号化だけでは、最新のセキュリティ上の脅威に十分対応できません。
Java コードをさらに強固に保護するため、Protector4J v6 を全面的に再設計しました。新しい P4JX アーキテクチャでは、コード暗号化、クラスロード、実行時検証、アンチデバッグなどの各層に 100 を超えるセキュリティ対策を導入しています。高度な AI 解析ツールを使用しても、保護されたコードのリバースエンジニアリングは非常に困難です。
そのため、v6 は保護アーキテクチャ、設定方法、コマンドライン形式、出力構造のすべてで v5 と大きく異なります。
2. v5 と v6 の主な違い
| 項目 | v5 | v6 |
|---|---|---|
| 保護アーキテクチャ | v5 の暗号化形式とランタイムを使用 | 新しい P4JX アーキテクチャとカスタマイズされた VLX JRE を使用 |
| 保護強度 | 従来のリバースエンジニアリングツールを想定 | 100 を超えるセキュリティ対策を導入し、AI 支援による解析にも重点的に対応 |
| 設定方法 | オプションが少なく、主にタスクファイルを使用 | オプションが増え、簡単に設定できる互換性モードも提供 |
| コマンドライン | p4j -t <type> -f <task.yml> | p4j <command> <input> <output> [options] |
| 設定ファイル | v5 の YAML タスクファイルを使用 | v5 の設定ファイルは使用不可。v6 はコマンドライン引数だけでも実行可能 |
| リリースと更新 | KeySeed と onlyEncryptJarFiles で一部を更新可能 | 毎回完全な出力を生成し、出力ディレクトリ全体をまとめて配布 |
最も重要な変更点は、v5 の暗号化済みファイル、ランタイム、YAML タスクファイルを v6 で直接再利用できないことです。
3. 互換性モードで簡単に設定する
保護強度の向上に伴い、v6 では保護範囲、ランタイム、レイアウト、互換性、対象プラットフォームに関する設定が増えました。最初からすべての設定を理解しなくても利用できるように、v6 には互換性モードが用意されています。
GUI では Simple(推奨) モードを使用します。
- アプリケーションの種類を選択します。
- 元の JAR または WAR を選択します。
- Java バージョンと対象プラットフォームを選択します。
- Protector4J にアプリケーションをスキャンさせ、安全側の互換性設定を自動選択します。
- 出力ディレクトリを確認して保護を開始します。
保護範囲、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 コマンド |
|---|---|
java | javaapp |
spring-boot | springboot |
tomcat | tomcat |
java-lib | encode |
なお、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.sh、run.command、または run.bat で起動します。アプリケーションと一緒に、生成された vlxjre も配布してください。システム JRE や別のタスクのランタイムに置き換えないでください。
最低限、次の項目を確認します。
- アプリケーションが正常に起動および停止すること。
- 主要な業務機能が正常に動作すること。
- リフレクション、シリアライズ、ORM、Spring プロキシ、リソース読み込みが正常に動作すること。
- すべての対象 OS で実際にパッケージを起動していること。
手順 5:パッケージ全体を切り替える
検証後、v6 の出力ディレクトリ全体へ切り替えます。以降の更新も元の JAR または WAR から完全なパッケージを再生成し、v5 の KeySeed + onlyEncryptJarFiles による部分更新は使用しません。
6. アップグレードの推奨
AI 支援によるリバースエンジニアリングはコード解析のハードルを急速に下げています。v5 を使い続けるとコード漏えいのリスクが高まるため、セキュリティ上の理由から、できるだけ早く v6 へアップグレードすることを推奨します。
移行は並行して行ってください。ロールバック用に v5 を残し、v6 の互換性モードで新しいパッケージを生成して検証し、その後で本番環境を切り替えます。
関連ドキュメント: