Java ライブラリの保護

ライブラリ暗号化は、低レベルの encode コマンドに対応します。保護済みアーカイブだけを生成し、ランタイムのコピーも起動スクリプトの生成も行いません。

1. GUI での操作

  1. アプリケーションの種類のページでライブラリ暗号化を選びます。そのまま起動できる配布パッケージが必要な場合は、Java アプリケーションSpring BootTomcat WAR のいずれかを選んでください。

    ライブラリ暗号化を選ぶ

  2. 入力 JAR、実際に読み込まれる環境に合った Java バージョン、ターゲットプラットフォームを選び、シンプルモードか詳細設定モードかを選びます。ライブラリの出力に vlxjre は含まれませんが、これらの選択はアーカイブに結び付くランタイムの識別情報を決めます。成果物の数を減らす目的で、異なるプラットフォームの出力を混在させないでください。

    ライブラリ JAR、Java バージョン、ターゲットプラットフォーム、モードを選ぶ

  3. シンプルモードは入力 JAR をスキャンし、ライブラリ暗号化が対応するスキャナ ZIP オーバーレイとアーカイブサフィックスの推奨を適用します。入力 JAR 内のすべての .class エントリは変わらず暗号化され、その他のリソースはそのまま残ります。

  4. 詳細設定モードでは次を設定できます。

    • 保護されたメソッドで JIT を無効化:保護対象メソッドをインタプリタのみで実行します。
    • スキャナ ZIP オーバーレイ:ZIP の中央ディレクトリを直接解析するツールに、公開リソースとメタデータスタブを提供します。
    • 互換性スキャン...:ZIP アクセス、サフィックスの前提、JNI やネイティブクラスの使用、実行時のバイトコード読み取りといったリスクを調べます。
  5. 出力ページで、出力ファイル名をフルネームで入力します。通常は .p4jx サフィックスを使い、連携先が .jar を必須としている場合にのみ .jar にします。詳細ページのアーカイブサフィックスの設定、またはスキャンの推奨によって、選択中のファイル名が .p4jx.jar の間で切り替わります。Java バージョン、ターゲットプラットフォーム、JIT 設定、スキャナオーバーレイを確認し、保護を実行をクリックします。

    単一プラットフォームのタスクでは、選んだファイルパスにそのまま書き込まれます。複数のターゲットプラットフォームを選んだ場合、GUI はそのファイルがあるディレクトリの下にプラットフォームごとのサブディレクトリを作り、対応するアーカイブをそれぞれ書き込みます。

2. 使いどころ

  • 自分が管理する別の P4JX アプリケーションの一部となる、自社の JAR を保護する場合
  • 既存のランチャーから P4JX アーカイブを読み込む場合
  • 配布ディレクトリ全体を自分で管理する高度な組み込み

そのまま実行できる通常のアプリケーション、Spring Boot アプリケーション、Tomcat の配備パッケージを作る場合は、対応するパッケージングコマンドを使ってください。

3. 基本のコマンド

p4j encode library.jar library.p4jx

短い書き方もできます。

p4j library.jar library.p4jx

encode は指定した出力ファイル名をそのまま使うため、次の 2 つはどちらも P4JX アーカイブを生成します。

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

4. ZIP オーバーレイ

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

オーバーレイに含まれるのは公開リソース、ディレクトリ、メタデータスタブだけです。ZIP の中央ディレクトリを直接読むツールを動かし続けるためのもので、実際の保護対象メソッドを露出させることも、P4JX アーカイブを通常の JAR に変えることもありません。

5. ランタイムの要件

低レベルの encodevlxjre を生成しないため、エンコード時の識別情報に一致する VLX ランタイムを自分で用意する必要があります。次のことは避けてください。

  • 通常の OpenJDK や Oracle JDK でアーカイブを読み込む
  • 別バージョンの出力パッケージから lib/modules やネイティブライブラリをコピーする
  • 異なるターゲットプラットフォーム、異なる JDK トレイン、異なるエンコードタスクのランタイムとアーカイブを組み合わせる

通常の配布プロジェクトでは、これらの対応関係を自動的に維持してくれる上位のパッケージングコマンドを使うほうが安全です。

6. ライセンス

アーカイブの生成には、サーバーが発行するライセンスの取得と埋め込みが必要です。正式アカウントと試用モードは、同じアーカイブ検証の流れを通ります。自動化された環境では、エクスポートしたタスクスクリプトにパスワードをハードコードしないでください。