Protector4J 上級モードの設定

上級モードでは、保護範囲や互換性オプション、アプリケーションタイプ専用のパラメータを手動で決定します。新しいアプリケーションを初めて処理する際は、まず簡易モードを使用するか、上級パラメータページで一度「互換性スキャン」を実行し、その結果に基づいて調整することを推奨します。

こちらの文章は、GUI利用ガイドに記載されている上級モードの詳細な説明です。どのクラスを暗号化しない状態に保持すべきかを判断する際は、互換性と保護範囲と併せてご覧ください。自動化コマンドを作成する場合は、CLIパラメータの参考情報を参照してください。

1. 上級モードに入る

  1. アプリケーションタイプを選択し、JAR/WARを入力する。
  2. 同梱されているJavaバージョンと、少なくとも1つのターゲットプラットフォームを選択する。
  3. Modeの中からAdvanced — customise the options yourselfを選択する。
  4. Nextをクリックして、上級パラメータページに進む。

もし既に出力確認ページにいる場合は、**Customize…**をクリックして高度なパラメータページに戻ることができます。変更が完了したら再び出力ページに戻り、サマリーに新しい設定が反映されているか確認してください。

Javaのバージョンやターゲットプラットフォームは高度なパラメータページで変更できません。調整が必要な場合は入力ページに戻ってください。マルチプラットフォームタスクでは各プラットフォームごとに独立した出力が生成され、その中のvlxjreは互換性がありません。

2. 一般オプション

4種類のアプリケーションタイプは共通して高度なパラメータエリアを使用しますが、一部の設定はタイプに応じて適用されます。Library Encryptionは起動スクリプトを生成しないため、JVMの起動パラメータは使用されません。また、そのアーカイブのサフィックス設定は、出力ファイル名の提案および同期に使用されます。

GUI設定デフォルト値機能推奨事項
Archive suffixp4jxアプリケーションのアーカイブ名を.p4jxまたは.jarに設定する.p4jxのままにする。サードパーティのコンポーネントが.jarというファイル名をハードコーディングしている場合のみ、jarに変更する
Disable JIT for protected methodsオフにする保護処理をインタプリタ内でのみ実行するようにするセキュリティ上重要で、パフォーマンステストも完了している場合に有効にする
Append scanner ZIP overlayオフにするZIP構造スキャンツールが読み取れる互換性ビューを追加する互換性スキャンの推奨や、アプリケーションが実際に物理的なZIP構造を読み取る場合のみ有効にする
JVM startup options生成された起動スクリプトにJVMパラメータを書き込む1行に1つの完全なパラメータを入力する
Compatibility scan…自動的に実行しない入力をスキャンし、慎重なアドバイスを出す新しいアプリケーションやフレームワークのアップグレード、または保護範囲に変更があった後に再実行する

各アプリケーションタイプで実際に使用される専用設定は以下の通りです:

アプリケーションタイプ専用設定初期状態CLI対応項目
Java ApplicationMain class、Classes to exclude、JavaFX/WebViewメインクラスはManifestから取得;クラスを除外せず、JavaFXもパッケージ化しない--main--exclude--javafx--javafx-webview / --no-javafx-webview
Spring BootMain class、Layout、Protect dependency JARs、Classes to exclude、JavaFX/WebViewメインクラスはStart-Classp4jx-fatから取得;依存関係を「保護」せず、クラスを除外せず、JavaFXもパッケージ化しない--main--layout--protect-lib--exclude、JavaFX関連のオプション
TomcatTomcat version、Context path、Classes to excludeバージョンが選択されていない;/app;クラスを除外しない--tomcat-version--context--exclude

“このカテゴリは除外されません。”は、このアプリケーションタイプのすべてのアプリケーションクラスをデフォルトで「保護」することを意味し、サードパーティ製の依存関係まで一緒に「保護」するわけではありません。Spring Boot用のBOOT-INF/libおよびTomcat用のWEB-INF/libは、デフォルトで通常の状態のままです。

アーカイブのサフィックス

jarを選択するとファイル名のみが変更され、ファイル内容は引き続きP4JX形式のままであり、通常のZIP/JARツールでは修正できず、通常のJREでも読み込むことはできません。Library Encryptionの場合、この設定により選択された出力ファイルの.p4jx/.jarサフィックスが切り替わります。ユーザーが別のカスタムサフィックスを指定した場合は、完全なファイル名がそのまま保持されます。

対応するCLI:

--archive-suffix p4jx
--archive-suffix jar

「保護」処理のJITを禁止する

Disable JIT for protected methodsを有効にすると、「保護」処理はJITコンパイラに渡されず、コンパイル後のマシンコードが露呈する可能性を低減できますが、計算集約度の高いコードでは処理速度が大幅に低下することがあります。この設定は「保護」処理のみに影響を与え、JVM全体を純粋なインタプリテーションモードに切り替えるわけではありません。

対応するCLI:

--no-jit

スキャナーのZIPオーバーレイ

overlayは、公開されているリソースやディレクトリ、および保護用のメタデータのみを露出し、実際のメソッド本体は含みません。これはZIPファイルの中央ディレクトリを直接読み取るツールとの互換性を確保するために使用されますが、Spring Bootのfatレイアウトに置き換わるものではなく、メモリストリームからZipInputStream/JarInputStreamを使用してアーカイブを解析する場面の問題も解決しません。

対応するCLI:

--zip-overlay scanner

JVM起動パラメータ

1行に1つの完全なパラメータを入力してください。例:

-Xms512m
-Xmx2g
-Dfile.encoding=UTF-8

1行ずつがパラメータの境界であり、複数のパラメータを同じ行に書かないでください。パラメータはmacOS/LinuxおよびWindowsの起動スクリプトに記録され、Tomcatのパラメータもその起動パスに含まれます。Library Encryptionは起動スクリプトを生成しないため、入力ボックスは利用できません。より完全なプラットフォームの例についてはJVM起動パラメータの設定を参照してください。

対応するCLIではオプションを繰り返し使用する必要があります:

--jvm-option -Xms512m --jvm-option -Xmx2g

3. 互換性スキャンとアプリケーションに関する提案

4種類のアプリケーションタイプすべてで、**Compatibility scan…**をクリックして現在入力されている内容をスキャンできます。結果を受け入れると、ツールはそのアプリケーションタイプに適した提案を現在の設定に統合します。主な内容は以下の通りです:

  • 暗号化しないまま保持する必要のあるクラスを追加する;
  • スキャナーのZIP overlayを有効にする;
  • アーカイブのサフィックスを調整する;
  • Java ApplicationまたはSpring Boot用にJavaFX/WebViewを有効にする;
  • Spring Boot用のレイアウトを選択する;
  • Tomcat用に9または10.1を選択する。

Library Encryptionは、スキャナーのZIP overlayやアーカイブサフィックスの推奨事項のみを自動的に適用する。設計上、入力されたJAR内のすべてのクラスを「保護」し、クラスの除外はサポートされていない。スキャンの結果、JNIやネイティブクラスなど、暗号化しないまま保持する必要があるコンテンツが見つかった場合、それらを通常のJARに分けるか、選択的な「保護」をサポートするアプリケーションパッケージングモードを使用するよう明確に指示される。

推奨事項を受け入れても引き続き編集が可能。スキャンでは既存の除外規則は保持され、JavaFXが検出されなかったからといってユーザーが有効にしたJavaFXが自動的に無効になることはない。ダイアログをキャンセルすると、推奨事項は適用されない。

スキャンレポートに記載されているAgent、JNI、カスタムクラスローダー、実行時のバイトコード変更といったコードレベルのリスクは、単なるスイッチの切り替えだけでは解決できないことが多い。互換性と保護範囲を使用してコードの境界を調整し、実際にテストを行う必要がある。

4. Javaアプリケーションの設定

通常のJavaアプリケーションの高度なパラメータ

Main class

空のままにすると、入力されたJAR Manifestを読み込むMain-Classが使用される。メインクラスが欠落している場合や、デフォルトの起動クラスを上書きする必要がある場合のみ、com.example.Mainのように完全なクラス名を指定する。

対応するCLIは--main com.example.Mainである。

Classes to exclude

アプリケーションのクラスはデフォルトですべて保護される。このリストに記載されているクラスやパッケージは暗号化されず、DTO、エンティティ、設定クラス、JNIブリッジクラス、またはフレームワークによる強化や実際のバイトコードの読み取りが必要なクラスに適している。ルールの形式については“保護範囲と除外規則”を参照のこと。

JavaFX runtime

通常のJavaFXアプリケーションの場合はBundle JavaFX into the packaged runtimeにチェックを入れる。WebViewの場合は以下から選択可能:

  • Autojavafx.scene.webが検出された場合に含める。
  • Includefx-webkitの含めることを強制する。
  • Exclude:必ず含めないようにします。

WebViewにより約40 MBの容量が追加されます。GUIは対象となるJavaバージョンおよびプラットフォームに合わせて素材をダウンロードします。ローカルのオフラインJavaFXディレクトリを指定する場合はCLIを使用します。

対応するCLIは--javafx--javafx-webview--no-javafx-webviewです。AutoにはWebViewを必ず含めるオプションは追加されず、パッケージャーがアプリケーションの参照内容に基づいて判断します。

5. Spring Bootの設定

Spring Bootの高度なパラメータ

Main class

空のままにすると、ManifestからStart-Classを読み込みます。起動クラスを上書きする場合は、完全なクラス名を記入してください。

対応するCLIは--main com.example.Applicationです。

Layout

レイアウト適用されるシナリオ
p4jx-fatデフォルト。通常のSpring Bootサービスで、最も広範な保護範囲を実現。
fatClassGraphやReflectionsなど、物理的なSpring Boot JAR構造が必要な場合。
separateフラットなlib/*形式のクラスパスを使用する旧来の統合環境が必須。

互換性スキャンの結果、fatが推奨されている場合は、ZIP overlayのみを有効にしてp4jx-fatを強制的に使用しないでください。詳細はSpring Bootアプリケーションの「保護」を参照してください。

対応するCLIは--layout p4jx-fat--layout fat、または--layout separateです。

Protect dependency JARs…

BOOT-INF/libに含まれる依存関係はデフォルトで保護されません。自社が所有するクローズドソースの依存関係のみを選択し、Spring、Tomcat、ログ、データベースドライバなどのサードパーティフレームワークのパッケージは暗号化しないでください。署名されたJARは内容を変更すると署名が破損するため、選択できない状態になります。

ある依存関係を選択すると、その依存関係に含まれるすべてのクラスが保護されますが、Classes to excludeのルールにより、その依存関係から特定のクラスやパッケージを除外することも可能です。3種類のSpring Bootレイアウトすべてで依存関係の保護がサポートされています。

対応するCLIは--protect-lib 'company-core.jar,company-domain.jar'です。CLIでもglobがサポートされており、GUIでは選択したJARの正確なファイル名が保存されます。

JavaFXと共に除外するクラス

使用方法はJava Applicationと同じです。除外規則は、アプリケーションクラスおよび保護を選択した依存JARの両方に適用されます。Spring Boot + JavaFXデスクトップアプリケーションの場合も、JavaFX runtimeタブでJavaFX/WebViewをパッケージ化できます。

6. Tomcatの設定

Tomcatの高度なパラメータ

Tomcat version

  • javax.servlet.*を使用するWARの場合は、Tomcat 9 · javaxを選択してください。
  • jakarta.servlet.*を使用するWARの場合は、Tomcat 10.1 · jakartaを選択してください。

Tomcat 10.1を使用するにはJava 11が必要です。不明な場合は互換性スキャンを実行してください。アプリケーションでjavaxjakartaの両方を混在させている場合は、無理にバージョンを選択せず、まず依存関係の衝突を修正してください。

アドバンスモードには事前に選択されたバージョンはなく、スキャン結果の提案を受け入れるか手動で選択してから次のステップに進む必要があります。対応するCLIは--tomcat-version 9または--tomcat-version 10で、CLIではautoも使用可能です。

Context path

/で始まるデプロイ先パスを入力してください。例えば/appなどです。空のままにすると/appが使用されます。既存のTomcatの出力ディレクトリにアプリケーションを追加する場合、context pathは既存のアプリケーションと重複してはなりません。

対応するCLI:--context /app

Classes to exclude

デフォルトではWEB-INF/classesに含まれるアプリケーションクラスが「保護」されますが、WEB-INF/libはデフォルトで「保護」されません。通常、Servlet、Filter、Listener、DTO、設定ファイル、エンティティ、JNIブリッジクラス、およびコンテナで強化が必要なクラスは除外すべきです。

7. 「保護範囲」と除外規則

高度なモードのGUIでは、デフォルトですべてのアプリケーションクラスが「保護」され、Classes to excludeによってフレームワークの境界が設定されます。3種類のルールに対応しています。

com.example.SecretService   このクラスのみにマッチします
com.example.service.*       現在のパッケージにマッチし、サブパッケージは含みません
com.example.service.**      現在のパッケージおよびすべてのサブパッケージにマッチします

**Choose…**を使用してクラスツリーから選択する方法のほか、**Add…**を使って手動で追加することも可能です。パッケージの選択では、デフォルトで現在のパッケージとそのサブパッケージが対象になりますが、現在のパッケージのみを除外したい場合は.*を使用します。Spring Bootのクラスツリーには、保護が選択されている依存関係のJARも表示されます。

推奨される構成は“公開境界/フレームワークのエントリポイント → 通常のファサードまたはインターフェース → 保護されたアプリケーション”です。「保護範囲」を広げるために、すべてのサードパーティ製の依存関係やフレームワークのエントリポイントを暗号化するべきではありません。

8. エクスポート、再利用、最終確認

**Export parameters…**をクリックするとエクスポートが可能です。

  • p4j-encrypt-run.sh
  • p4j-encrypt-run.bat

エクスポートされるスクリプトには、現在解析されているオプションが保存されますが、アカウントのメールアドレスやパスワードは含まれません。その後、上部にあるLoad Task Fileを使ってタスクを復元できます。

出力ページに進んだら、少なくとも以下の項目を確認してください。

  • ファイル、アプリケーションの種類、Javaのバージョン、およびすべてのターゲットプラットフォームを入力してください。
  • アーカイブ用のサフィックス、JIT、scanner overlay、およびJVMパラメータ;
  • JavaFX/WebView、Spring Bootのレイアウト、またはTomcatのバージョン/context;
  • 保護対象となる依存JARファイルおよびすべての除外規則;
  • 出力ディレクトリ、および新しいp4jx-xxxxサブディレクトリを作成するかどうか。

生成後は、各ターゲットプラットフォームにおいてパッケージ内の起動スクリプトを使用して起動の確認、フレームワークスキャン、シリアライゼーション、リフレクション、リソースの読み込み、およびコアビジネスパスの検証を行う必要があります。高度なパラメータページの設定が正しいからといって、タスクのパラメータが適切に設定されていることの証明にはなりませんし、最終的な製品の検証には代わりません。