虚拟化保护方案的问题

混淆可以增加静态分析的难度,但无法有效防止动态分析。代码虚拟化的目的是增加动态分析的难度。

Java 代码虚拟化是通过构建自定义虚拟化引擎来实现的,让原本可以直接执行的字节码通过这些虚拟化引擎来执行。由于是自定义虚拟化引擎,外部无法直接获取其执行方法、指令格式等信息。此外,虚拟化会导致显著的代码膨胀,使得还原包含原始语义信息的代码变得困难。

虚拟化对性能的影响

虚拟化保护是一种极强的代码保护方案,但虚拟化保护最大的问题是性能。自定义虚拟化引擎难以采用 JVM 那样的众多性能优化措施,无法应用 JIT 等性能优化技术。您可以尝试使用我们之前提到的 JVM 引擎 来执行与普通 JVM 相同的代码并比较性能,可能会产生超过 100 倍的性能差异。

结论

虚拟化保护是最安全的代码保护方法,但由于其对性能的显著影响,无法应用于程序中的所有代码。它只能保护关键代码,而其他代码仍然面临暴露风险。通过以代码的其他部分为切入点,可以获得虚拟化代码部分的功能信息。