虚拟化保护解决方案的问题
混淆可以增加静态分析的难度,但不能有效阻止动态分析。代码虚拟化的目的是增加动态分析的难度。
Java代码虚拟化是通过构建自定义的虚拟化引擎来实现的,允许可以直接执行的字节码通过这些虚拟化引擎来执行。由于它是一个定制的虚拟化引擎,外界无法直接访问它的执行方法、指令格式等信息。此外,它会导致显着的代码扩展,使得对包含其原始语义信息的代码进行逆向工程变得困难。
虚拟化对性能的影响。
虚拟化保护是一种非常强大的代码保护解决方案,但虚拟化保护的最大问题是表现。定制的虚拟化引擎很难像JVM一样采用众多的性能优化措施,也无法应用JIT等性能优化技术。您可以尝试使用JVM引擎 之前我们提到,与普通JVM执行相同的代码并比较性能,这可能会导致性能差异超过100倍。
结论
虚拟化保护是最安全的代码保护方法,但由于其对性能影响较大,因此无法应用于程序中的所有代码。它只能保护关键代码,而其他代码仍然存在暴露的风险。通过瞄准代码的其他部分,可以获得有关代码的虚拟化部分的功能信息。