仮想化保護ソリューションの問題点
難読化は静的分析の難易度を上げることができますが、動的分析を効果的に防ぐことはできません。コード仮想化の目的は、動的分析の難易度を上げることです。
Javaコード仮想化は、カスタム仮想化エンジンを構築することで実現され、直接実行できるバイトコードをこれらの仮想化エンジンを通じて実行させます。カスタム仮想化エンジンであるため、外部からその実行方法、命令形式などの情報に直接アクセスすることはできません。さらに、コードが大幅に膨張するため、元のセマンティック情報を含むコードのリバースエンジニアリングが困難になります。
仮想化がパフォーマンスに与える影響
仮想化保護は極めて強力なコード保護ソリューションですが、仮想化保護の最大の問題はパフォーマンスです。カスタム仮想化エンジンはJVMのような多数のパフォーマンス最適化策を採用することが難しく、JITなどのパフォーマンス最適化技術を適用できません。前述のJVMエンジンを使用して通常のJVMと同じコードを実行してパフォーマンスを比較すると、100倍以上のパフォーマンス差が生じる可能性があります。
結論
仮想化保護は最も安全なコード保護方法ですが、パフォーマンスへの影響が大きいため、プログラム内のすべてのコードに適用することはできません。重要なコードのみを保護することができ、その他のコードは依然として露出のリスクがあります。他の部分のコードを対象にすることで、仮想化されたコード部分の機能情報を取得できます。