Protector4Jの仕組み
Protector4J は、jar ファイルをプライベートに暗号化された jarx ファイルに変換することで Java ソースコードを保護します。JVM とバイナリ レベルの両方からアプリケーションのセキュリティを確保するために複数のアプローチを採用し、強力なアプリケーション保護を提供します。
コード難読化の問題
JVMバイトコードは高度なセマンティクスを持つため、解析と読み取りが非常に容易です。動的デバッグを使用すれば、実行中のロジックを容易に解析できます。動的デバッグツールの作成はそれほど複雑な作業ではありません。そのため、難読化は信頼できる保護ソリューションとは言えません。
クラス暗号化の問題点
JVMアタッチメントメカニズムの存在により、通常のJVM動作から切り離されていないいわゆる暗号化コードは、アタッチメントツールによって容易に読み取ることができます。したがって、これは最も効果のない保護ソリューションです。
VM保護の問題点
仮想化保護は最も安全なコード保護手法ですが、パフォーマンスへの影響が大きいため、プログラム内のすべてのコードに適用することはできません。重要なコードのみを保護できますが、他のコードは依然として露出のリスクを伴います。コードの他の部分をターゲットにすることで、仮想化された部分に関する機能情報を取得できます。
AOTコンパイルの問題点
AOTコンパイルは設定とコンパイルが難しく、失敗する確率も高い。たとえコンパイルに成功したとしても、コードロジックはバイトコード表現からマシンコード表現に変化するだけであり、特別な保護措置を講じることなく、固有の動作ロジックは依然として存在する。そのため、コンパイルと実行のメカニズムを理解できれば、可読なコードをリバースエンジニアリングすることが可能だ。
vlx-vmengine による難読化解除
JVM バイトコード実行エンジン vlx-vmengine を使用して Java コードの難読化を解除します。
Java/Kotlin で書かれた JVM バイトコード実行エンジン
従来のJavaの動的デバッグはソースコードに基づいてのみ実行可能であり、ソースコードや難読化されたJavaクラスファイルがなければ動的デバッグは不可能です。Javaプログラムの実行はJVM上で行われ、JVMはバイトコードを実行基盤として利用します。私たちはKotlinを用いてJVMバイトコード実行エンジンを構築しました。このエンジンはIDEAなどの最新のIDEと組み合わせて使用することで、Javaプログラムをバイトコードレベルでデバッグし、プログラムの実行挙動を観察することができます。
GraalVM NativeImage リバースエンジニアリング
バイナリコンパイル時代を迎えたJavaプログラムは、バイトコード時代と同様に簡単に逆コンパイルできるのでしょうか? NativeImageでコンパイルされたバイナリファイルの特徴は何でしょうか? バイナリコンパイルの強度は重要なコードを保護するのに十分でしょうか? 上記の問題を探るため、最近、ある程度の逆コンパイルを実現したNativeImage解析ツールを作成しました。
jhsdb (HotSpot Debugger) を使用した暗号化された Java アプリケーションへのハッキング
Javaコードを保護する一つの解決策は、クラスファイルを暗号化することです。このようなソリューションでは、暗号化されたクラスファイルまたはjarファイルをカスタムクラスローダーを介して読み込みますが、JVMのアタッチメカニズムの存在により、この方法は効果的ではなく、JDKに含まれるツールで簡単に解読される可能性があります。
AOT コンパイルされたバイナリから Java クラス情報を抽出する
AOTはJavaコード保護のソリューションとしても考えられていますが、残念ながら、現在多くのJavaプログラムはフレームワークから分離できていません。フレームワークの複雑さのため、AOTでコンパイルされたプログラムであっても、最終的に生成されるバイナリファイルにクラス情報を含める必要があり、実際にはクラスファイルはバイナリファイルのリソース領域に整然と配置されています。
JARXファイルとは
JARX ファイルは当社独自のアーカイブ ファイル形式で、Zip と同じ Deflate 圧縮アルゴリズムと AES 暗号化アルゴリズムを使用してデータを暗号化します。
難読化を超えた最高のJavaコード保護ソリューション
コードを暗号化することで、知的財産が保護され、アプリケーションのセキュリティが大幅に強化されます。知的財産の盗難、コードの改ざん、セキュリティ上の脆弱性の発見は、非常に複雑で費用もかかるため、無料のJavaデコンパイラを装備した素人が行うような単純な方法では不可能です。
エクセルシオールJET代替案
Protector4Jは単なるExcelsior JETの代替品ではありません