Javaライブラリの保護

Library Encryptionは下位レベルのencodeコマンドに対応し、保護されたアーカイブを1つのみ生成します。実行時環境はコピーされず、アプリケーションの起動スクリプトも作成されません。

1. GUI操作

  1. アプリケーションタイプページでLibrary Encryptionを選択します。直接起動可能なデリバリーパッケージが必要な場合は、Java ApplicationSpring Boot、またはTomcat WARを選択してください。

    Library Encryptionを選択します

  2. 入力JAR、実際のロード環境と一致するJavaバージョンおよびターゲットプラットフォームを選択し、シンプルモードまたはアドバンスドモードを選びます。ライブラリの出力にはvlxjreは含まれませんが、これらの設定は依然としてアーカイブに対応する実行時環境を決定するために使用されます。生成物の数を減らすために異なるプラットフォームの出力を混在させないでください。

    ライブラリのJARファイル、Javaのバージョン、ターゲットプラットフォーム、およびモードを選択します

  3. シンプルモードでは、入力JARがスキャンされ、Library EncryptionでサポートされているZIP overlayやアーカイブのサフィックスに関する推奨事項が自動的に適用されます。入力JAR内のすべての.classエントリは引き続き暗号化されますが、その他のリソースは暗号化されません。

  4. アドバンスドモードでは、必要に応じて設定を行うことができます。

    • Disable JIT for protected methods:保護されたメソッドをインタプリタ内でのみ実行する。
    • Append scanner ZIP overlay:ZIPの中央ディレクトリを直接解析するツール向けに、公開リソースおよびメタデータスタブを提供する;
    • Compatibility scan…:ZIPアクセス、サフィックスの仮定、JNI/ネイティブクラス、実行時のバイトコード読み取りなどの互換性リスクをスキャンする。
  5. 出力ページで完全な出力ファイル名を選択し、通常は.p4jxが使用される。インテグレーションプログラムが.jarというサフィックスの使用をハードコーディングしている場合のみ、.jarが使用される。詳細設定ページのArchive suffixでの選択やスキャンの推奨事項に基づき、選択したファイルに.p4jx/.jarというサフィックスが自動的に付与される。Javaバージョン、ターゲットプラットフォーム、JIT、scanner overlayを確認したら、Run protectionをクリックする。

    単一プラットフォームのタスクでは、選択した正確なファイルパスが使用される。複数のターゲットプラットフォームを選択した場合、GUIはそのファイルがあるディレクトリ内にプラットフォームごとのサブディレクトリを作成し、それぞれ対応するアーカイブを保存する。

2. 適用シナリオ

  • 他の管理対象のP4JXアプリケーションの構成要素として含まれる自身のJARを「保護」する;
  • 既存のスターターを使用してP4JXアーカイブを読み込みます。
  • 完全なデリバリーディレクトリを自分で管理する必要がある高度な統合機能です。

対象が直接実行可能な通常のアプリケーション、Spring Boot、またはTomcatの場合は、対応するパッケージングコマンドを使用してください。

3. 基本コマンド

p4j encode library.jar library.p4jx

略語を使用することもできます。

p4j library.jar library.p4jx

encodeはユーザーが指定した完全な出力ファイル名を書き込むため、以下の両方ともP4JX形式です。

p4j encode library.jar library.p4jx
p4j encode library.jar library.jar

4. ZIP overlay

p4j encode library.jar library.p4jx \
  --zip-overlay scanner

overlayには、ZIPの中央ディレクトリを直接解析するツールとの互換性を図るための、公開リソース、ディレクトリ、メタデータのみが含まれています。これにより実際の保護方法が露見したり、P4JXが通常のJARに変わったりすることはありません。

5. 実行時の要件

下位レイヤーのencodevlxjreを生成しないため、利用者はエンコード時の身分情報と一致するVLX実行環境を用意する必要があります。以下の行為は避けてください:

  • 通常のOpenJDK/Oracle JDKを使用して読み込むこと。
  • 別バージョンの出力パッケージからlib/modulesやネイティブライブラリをコピーすること。
  • 異なるターゲットプラットフォーム、JDKトレーニングライン、またはエンコードタスク用の実行環境をアーカイブと混在させて使用すること。

通常のデリバリープロジェクトの場合、これらの関係を自動的に管理するために上位レイヤーのパッケージングコマンドを優先的に使用してください。

6. ライセンス

アーカイブを生成する際には、サーバーが発行したライセンスを必ず正常に取得し、それを組み込む必要があります。正式アカウントと試用モードでは、同じアーカイブ検証プロセスが適用されます。自動化環境では、エクスポートされるタスクスクリプトにパスワードを硬コーディングしてはいけません。