変更履歴
6.0.12 2026-08-02
JxBrowser 9 のサポートと、NullPointerException を送出する保護対象アプリケーションのクラッシュ修正
- 保護対象アプリケーションに JxBrowser 9 を組み込めるようになりました。
--native-compat jxbrowserは組み込みカタログの 9 バージョン(9.0.0〜9.3.1)から 1 つを選択し、Java 17、21、25 上の 7 プラットフォームに対応します。ランタイムは、選択したバージョンに対して SHA-256 が登録されている公式 IPC ライブラリにのみスレッド attach 権限を与え、実際にスレッドが attach する時点で呼び出しモジュールを再検証します。パス、ハッシュ、ライブラリ名をコマンドラインから受け取ることはありません。macOS 26 では JxBrowser 9.0.1 以降を使用してください。TeamDev は同バージョンで Engine 作成時の Chromium クラッシュを修正しており、9.0.0 は通常の JDK でも同様にクラッシュします。 - 保護対象アプリケーションが
NullPointerExceptionを送出した際にClassFormatErrorが発生する問題を修正しました。6.0.9 の修正は JVM の詳細 NPE メッセージをメソッド単位で抑止するものでしたが、不十分でした。この機能はメソッド本体を標準バイトコードとして解析するため、P4JX が変換した後では、解析が有効であることをメソッド単位のフラグで証明することはできません。ランタイムは詳細メッセージを無条件に無効化するようになりました。例外の型、スタックトレース、アプリケーションが指定したメッセージには影響しません。JDK 17、21、25 のランタイムは VLX 1.0.20 に再ビルドされます。JDK 11 はこの問題の影響を受けず VLX 1.0.18 のまま、JDK 8 は VLX 1.0.12 のままです。 java -versionが VLX ランタイムのビルドを表示するようになり、展開しなくても同梱ランタイムを識別できます。- Windows EXE の 2 つのバージョン項目を、パッケージ処理の途中で失敗させるのではなく、開始前に検証するようにしました。Windows は各要素を符号なし 16 ビット整数として保持するため、ドット区切りの 1〜4 個の数値はいずれも 0〜65535 の範囲である必要があります。項目を空のままにした場合は従来どおり 0.0.0.0 になります。
6.0.11 2026-07-27
保護されたアプリケーション向けのネイティブ Windows ランチャー
- Java App パッケージ、Spring Boot の 3 種類すべてのレイアウト、および Tomcat パッケージで、ネイティブ Windows EXE を任意に生成できるようになりました。Windows x64、x86、ARM64 向けにコンソール版と GUI 版を用意し、既存の起動スクリプトも各パッケージに引き続き含まれます。
- EXE のファイル名、モード、アイコン、Windows バージョンメタデータを指定する CLI および GUI 設定を追加しました。マルチプラットフォームタスクでは、選択した Windows ターゲットにだけ EXE を生成します。設定はバージョン 2 の
p4j-task.ymlに保持され、バージョン 1 のタスクファイルも引き続き読み込めます。 - 純粋な Win32 ランチャーである JExeKit を、同梱の
vlxjre、厳密なクラスパス、および JVM 引数と統合しました。Java を起動する前に、パッケージ外へ出るパス、再解析ポイントによる置換、安全でないエージェントまたはブートクラスパスのオプションを拒否します。 - JExeKit テンプレートは AES-GCM で暗号化した
.jxtリソースとしてのみ組み込まれ、生成時にメモリ上だけで復号されます。生成される各ランチャーのパラメータブロックには production 状態の Ed25519 署名が付き、アイコン、バージョン、マニフェスト、パラメータの変更は、ユーザーが最後に行うAuthenticode署名より前に完了します。
6.0.10 2026-07-27
WAR 構造を維持した高速な Tomcat 依存関係の読み込み
- クラスを読み込むたびに、保護された
WEB-INF/lib内のネスト JAR 全体を再読み込みしてハッシュを計算していたため、Tomcat の起動が著しく遅くなる問題を修正しました。VLX 1.0.17 では、密封された各ネスト JAR を一度だけ検証し、認証済みの生成元情報を VM 内にキャッシュしたうえで、要求された各クラスを暗号化クラスインデックスと照合し続けます。 - 一時的な
web-libsの展開およびマウントによる回避策を削除しました。WEB-INF/lib/*.jarは保護された.p4jxアーカイブ内に保持され、元の WAR 構造とアプリケーション分離を維持します。JDK 11、17、21、25 向けの VLX 1.0.17 ランタイムを、対応する 24 のプラットフォーム構成に公開しました。JDK 8 は従来の ZIP overlay 経路を維持し、VLX 1.0.11 のままです。 - アプリケーションの
module-info.classに対する互換性スキャンを修正しました。モジュール記述子にはメソッド本体がないため、自動的に暗号化対象から除外され、記述子ツールからは引き続き読み取れます。 - GUI が出力する CLI コマンドでは、
--java-version、--target-platform、--create-new-folderをパッケージャー引数の後ろに連続した接尾オプションとして配置できるようになりました。従来の接頭形式も引き続き使用できます。
6.0.9 2026-07-25
暗号化アプリが NullPointerException を出力する際のクラッシュ修正
- 保護されたメソッドが暗黙的な
NullPointerExceptionをスローし、アプリケーションがそのメッセージを読み取ったりスタックトレースを出力したりした際に発生し得た JVM クラッシュを修正しました。ランタイムの「役立つ NPE 詳細」機能が、メソッドの暗号化されたバイトコードから "because ... is null" というテキストを復元しようとして無効なメモリを参照し、VM をクラッシュさせていました(JavaFX FXML アプリケーションで確認)。保護されたメソッドでは詳細メッセージをスキップし、標準のNullPointerExceptionにフォールバックするようになりました。例外の型、スタックトレース、アプリケーションが指定したメッセージには影響しません。 - JDK 17、21、25 のランタイムを本修正とともに VLX 1.0.16 に再ビルドしました。「役立つ NPE 詳細」機能は JDK 14 より前には存在しないため JDK 11 は影響を受けず、VLX 1.0.15 のままです。JDK 8 は VLX 1.0.11 のままです。
6.0.8 2026-07-24
オンデマンドの Tomcat ランタイムと本番環境向けの安全な既定値
app.p4jx内の Tomcat クラスが物理的なクラスパス JAR として見えなくなったため、公開済みの自己保護エンコーダーで Tomcat WAR をパッケージ化できない問題を修正しました。Tomcat 9.0.107 と 10.1.53 は、Servlet 名前空間に応じて選択される不変かつバージョン付きの R2/COS アーティファクトになりました。初回使用時にダウンロードしてローカルにキャッシュし、正確な SHA-256 と JAR マニフェストを検証します。改ざんされたキャッシュは破棄して再ダウンロードします。- 公開される
WEB-INF/libJAR は、アプリケーションごとに分離され、ハッシュでバインドされた物理 Web リソースとして配置されるようになりました。これにより、Spring の起動時にクラスごとに入れ子のアーカイブを繰り返し読み取って検証する処理を回避します。 - 新しいビルドでは、本番ライセンスエンドポイント
https://protector4j.comが既定値になりました。内部エンドポイントhttp://10.10.10.16:16002は、P4JX_LICENSE_MODE=devまたは-PlicenseMode=devを明示的に選択した場合にのみ使用されます。
6.0.7 2026-07-24
Tomcat のネストされた依存関係と信頼済み動的クラス
- 保護された Tomcat WAR が
WEB-INF/lib/*.jarからクラスまたはサービスを読み込む際の失敗を修正しました。Protector4J はネストされた JAR とクラスの正確な SHA-256 メタデータをapp.p4jxに封印するようになり、未知、差し替え済み、または改ざん済みの依存関係は引き続き拒否されます。 - JDK 11 の
MethodHandles.Lookup#defineClassが JDK 11 固有のソースマーカーを使用することで発生していた Spring CGLIB と Hibernate Byte Buddy の失敗を修正しました。動的な信頼には引き続き VM が検証した呼び出し元クラスまたはローダーの由来が必要であり、マーカー文字列、クラス名、パス、パッケージ名、CodeSourceが信頼を付与することはありません。 - JDK 11、17、21、25 向けの VLX 1.0.15 ランタイムを、サポート対象の 24 プラットフォーム構成で公開しました。実際の FXML、Swing/AWT、Tomcat のネストされた依存関係の読み込み、由来と改ざんのネガティブケースを含む厳格な L1-L5 ゲートをすべて通過しています。JDK 8 は VLX 1.0.11 のままです。
6.0.6 2026-07-22
信頼されたクラス定義の由来伝播
- 保護された JavaFX FXML アプリケーションの起動失敗を修正しました。
MethodUtilは、VM が由来を検証済みのTrampolineヘルパーをdefineClass(byte[])で定義します。信頼は、クラス名、パス、パッケージ名、CodeSource文字列ではなく、VM が検証したクラスまたはローダーの由来からのみ伝播します。 fx:controller、プロパティ要素、Controller 注入、WebView 起動を含む実際の FXML カバレッジを追加し、信頼済み動的定義、2 段階伝播、未知の由来、未承認 JAR、protected class 名の置換に対する回帰テストも追加しました。- JDK 11、17、21、25 向けの VLX 1.0.14 ランタイムを公開しました。JDK 8 は VLX 1.0.11 のままです。
6.0.5 2026-07-21
JavaFX ネイティブランタイムの完全性
- パッケージ化された JavaFX DLL を
vlxjre/binに配置し、ランチャーのネイティブライブラリ検索を調整することで、Windows 上での JavaFX WebView の起動失敗(Graphics Device initialization failed/No toolkit found)を修正しました。 - 暗号化された
app.p4jxの許可リストに外部ネイティブライブラリを追加しました。JavaFX ネイティブファイルはパスに関係なく正確な SHA-256 値と一致する必要があり、Glass が実際に読み込まれたファイルを再検証します。認識されないファイルや改ざんされたファイルは拒否されます。 - JDK 11、17、21、25 向けに更新された Protector4J ランタイムを公開しました。サポート対象の JavaFX プラットフォーム構成は L5.1-L5.4 を通過し、WebView の起動に加えて、モジュール JAR、
jdk.jsobject、Glass ネイティブライブラリの改ざん拒否も検証しました。
6.0.4 2026-07-21
外部モジュールの完全性と JavaFX ランタイム互換性
- 外部モジュールに対するパスベースの信頼処理を廃止しました。すべての外部モジュール JAR は
app.p4jxに埋め込まれた正確な SHA-256 許可リストのエントリと一致する必要があり、場所に関係なく未認識または改ざんされたファイルは拒否されます。 - JavaFX
module-info.classからの依存関係閉包の自動検出と、javafx.mediaおよびjdk.jsobjectを含む固定済み JavaFX / JDK モジュールの制御された許可を追加しました。 - 新たにリリースした P4JX ランタイムにより、対応する JDK バージョンとプラットフォーム全体で JavaFX WebView の起動、およびブートレイヤー構築後の E818 /
ClassFormatErrorエラーを修正しました。
6.0.3 2026-07-20
JavaFX WebView モジュールの互換性
- 同じ JDK/VLX バージョンから再ビルドされた対応 P4JX ランタイムで、オプションの
jdk.jsobjectを解決できない問題を修正しました。完全なlib/modulesイメージのバイトが異なるという理由だけで、互換性のあるランタイムを拒否しなくなりました。 - JDK 系列とプラットフォーム別の成果物選択、モジュールの厳密な SHA-256 とモジュール名の検証、およびインストール後の依存関係閉包の再検証は維持されます。
6.0.2 2026-07-20
JavaFX WebView の互換性
javafx.mediaをjavafx.webと一緒にパッケージ化し、削減されたランタイムにモジュールが含まれない場合は P4JX に正確に一致するjdk.jsobjectを自動解決することで、JavaFX WebView の起動エラーを修正しました。- SHA-256 で固定され、バージョン、プラットフォーム、ランタイムに関連付けられたオプションモジュールを、地域別の公開ダウンロードサービスから取得できるようにしました。モジュールを既に含むランタイムはダウンロードをスキップします。
6.0.1 2026-07-20
JavaFX の互換性
- JavaFX ランタイムクラスを内包する fat JAR の起動エラーを修正しました。互換性ルールの自動適用により、内包された JavaFX API、実装、JNI ブリッジの名前空間は暗号化されず、同梱された JavaFX モジュールとのクラス所有権の重複を回避します。
- JavaFX ランタイムをシェーディングしたアプリケーション向けの互換性診断と多言語ガイダンスを改善しました。
6.0.0 2026-07-20
Protector4J 6.0 は、5.x シリーズの通常の追加更新ではなく、保護アーキテクチャを全面的に再設計したメジャーリリースです。
アーキテクチャと保護
- Protector4J の基盤アーキテクチャを再設計し、新しい P4JX 保護エンジンを導入しました。
- アーカイブ生成、クラスローディング、ランタイム実行、アンチデバッグ、成果物の整合性など、各層に約 100 の保護対策を追加しました。
- リバースエンジニアリングの障壁を大幅に高めました。高度な AI 支援分析ツールを使用した場合でも、短期間での解析を極めて困難にすることを目的とした新設計です。
- ライセンス要求、ランタイムのダウンロード、成果物の検証、クロスプラットフォームインストーラーのセキュリティを強化しました。
製品体験
- JDK 8、11、17、21、25 に対応し、Java、JavaFX、Spring Boot、Tomcat アプリケーション向けのグラフィカルなパッケージ化フローを提供します。
- 互換性スキャン、クラスの選択的暗号化、依存 JAR の保護、YAML タスクのインポート/エクスポート、複数ターゲットプラットフォームの一括ビルドを追加しました。
- デスクトップインターフェースを再設計し、11 言語と永続的な言語設定に対応しました。
移行について
Protector4J 6.0 は以前のバージョンと操作方法が大きく異なります。使用前に最新ドキュメントを改めて確認し、より強力な保護を利用できるよう、既存の暗号化済みアプリケーションをできるだけ早く 6.0 で再構築して移行してください。
以前のリリース
変更履歴
5.7.0 2026-03-07
- JDK25のサポートを追加
5.6.2 2026-01-03
- JREダウンロードの問題を修正
- pidkillerの問題を修正
5.6.1 2025-08-13
- 実行時の問題を修正
5.6.0 2025-08-09
- GraphQLリソースの問題を修正
5.5.1 2025-06-01
- リソースダウンロードの問題を修正
5.5.0 2025-04-19
- デコーダーに関する問題を修正
5.4.1 2025-04-17
- 最新のGoバージョンでpidcheckerをビルド
5.4.0 2025-04-08
- JDK17を17.0.14に更新
5.3.5 2025-03-26
- 実行ラッパーを更新
5.3.4 2025-03-08
- 一部のWindowsシステムで実行できない問題を修正
5.3.3 2025-02-20
- 一部のWindowsシステムで実行できない問題を修正
5.3.2 2025-02-04
- JAVAライブラリ暗号化によって導入された不正なMETA-INFの問題を修正
5.3.1 2025-01-28
- 旧バージョンのCPUで実行できない問題を修正
5.3.0 2025-01-25
- jdk.naming.dnsモジュールを追加
5.2.0 2025-01-19
- 新しいデコーダー
5.1.0 2025-01-12
- Windows環境でのデコーダーの誤検知問題を修正
5.0.0 2024-12-28
- 暗号化されたJavaライブラリ単体のサポートを追加(プレビュー)、通常のJREでアプリケーションを実行可能に
4.8.1 2024-12-08
- Tomcatタスク処理時にファイルタイプをチェックしない問題を修正
4.8.0 2024-11-30
- Windows 7で実行できない問題を修正
- jdk.netモジュールがインポートされない問題を修正
4.7.1 2024-09-19
- 生成されたLinuxアプリケーションが正しく実行されない問題を修正
4.7.0 2024-09-08
- 生成されたプログラムがmacOSで実行できない問題を修正
- セキュリティソフトの誤検知に関する問題を修正
4.6.2 2024-07-21
- Spring Bootアプリケーションのライブラリからapplication.propertiesファイルを削除するオプションを追加
- ウィンドウが小さすぎる場合に要素が完全に表示されない問題を解決するスクロールバーを追加
4.6.1 2024-05-25
- Macでvlxjre8が繰り返しダウンロードされる問題を修正
- TaskInfo読み込み時にJVMオプションが欠落する問題を修正
4.6.0 2024-04-30
- ログインモジュール欠落の問題を解決するためJDKを更新
- add-permission-script.shを更新
4.5.3 2024-03-16
- Tomcat 10.1.19を追加
4.5.2 2024-03-02
- Windows環境でのラッパーの問題を修正
4.5.1 2024-03-01
- Java 21の署名に関する問題を修正
4.5.0 2024-02-25
- 仮想スレッドが動作しない問題を修正
4.4.0 2024-02-24
- デコーダーに関する問題を修正
4.3.0 2024-02-06
- Tomcatを9.0.85に更新
4.2.2 2024-01-31
- 不要なwrapper.jsonファイルを削除
4.2.1 2024-01-25
- パーミッションスクリプトの問題を修正
4.2.0 2024-01-23
- パイプ切断によるアプリ終了の問題を修正
- /tmpフォルダの自動クリーンアップによるアプリ終了の問題を修正
- macOSでJava 8がlibfreetypeを見つけられない問題を修正
- 複数のapplication.propertiesが存在する場合の競合問題を修正
4.1.0 2023-10-30
- JDK8の問題を修正
- LinuxとmacOSでのパイプ切断の問題を修正
- 中国のユーザーはサーバーとして https://protector4j.cn を選択可能に
4.0.1 2023-10-24
- デコーダーをアップグレード
4.0.0 2023-10-17
- Java 21のサポートを追加
- より強力な保護のためのセキュリティ強化
3.3.0 2023-09-29
- Tomcatプロジェクトが正しく起動しない問題を修正
- プロジェクトに重複クラスが存在する場合の警告を追加
3.2.0 2023-08-24
- 多言語環境でのWindowsエンコーディングの問題を修正
3.1.1 2023-08-02
- 英語以外のパスでの文字化けを修正
3.1.0 2023-07-22
- ZipInputStream関連の問題を修正
- ZipFileSystem関連の問題を修正
- その他の問題を修正
3.0.2 2023-05-29
- Windowsでのデコード問題を修正
3.0.1 2023-05-25
- mac-aarch64バージョンの起動問題を修正
3.0.0 2023-05-20
- 新しいアプリケーション起動システム
- 新しいデコードシステム
- Java 8で-jarコマンドでのプログラム実行が可能に
2.12.5 2023-05-12
- macOSでJDK8がfreetypeを見つけられない問題を修正
2.12.4 2023-02-28
- バックエンドを更新