Javaクラスファイルの暗号化に関する問題

難読化に加えて、クラス ファイルの暗号化も簡単に考えられるコード保護の方法です。多くのスキームでは、エージェントを使用してクラス ファイルを暗号化し、クラスの読み込み中にそれらを復号化します。ただし、これらのスキームでは、JVM の組み込みアタッチメント メカニズムという重要な点が見落とされています。

JVMのアタッチメントメカニズム

プログラム動作の分析と監視を容易にするために、通常の JVM にはアタッチメントが付属しています。ユーザーは、jhsdb などのツールを使用して JVM プロセスに接続し、そのメモリ データを表示および分析できます。さらに、これらのメモリ データはソース ファイル内のデータ構造に従って適切に編成されており、これは JVM の組み込みバックドア メカニズムとしても理解できます。

次の記事では、JVM アタッチ メカニズムを使用して、メモリ内のクラス ファイル情報を読み取り、保存する方法を紹介します。

https://protector4j.com/articles/cracking-encrypted-java-applications-jhsdb/

JDK が提供する jhsdb ツールを使用するほかに、Alibaba の Arthas を使用して実行中の Java プロセスを分析することもできます。

一部の保護メソッドは、リフレクションを通じてクラス情報を動的にロードします。このアプローチは、DLL インジェクションを通じてロードされたリアルタイムのクラス情報を取得するためにも使用できます。詳細については、以下の 2 つのプロジェクトを参照してください。

https://github.com/ViRb3/jvm-dump-proxy

https://github.com/zorftw/JVM-Native-Classdumping

結論

JVM 接続メカニズムまたはバイナリ HOOK メカニズムの存在により、通常の JVM 操作から分離されていないすべてのいわゆる暗号化コードは、接続ツールを使用して簡単に読み取ったり、DLL インジェクションを通じてフックしたりできます。したがって、これは最も効果のない保護ソリューションです。