Проблемы решений виртуализационной защиты
Обфускация может повысить сложность статического анализа, но не способна эффективно предотвратить динамический анализ. Цель виртуализации кода — увеличение сложности динамического анализа.
Виртуализация Java-кода достигается путём создания пользовательских виртуальных движков, которые позволяют выполнять байт-код, который мог бы выполняться напрямую, через эти виртуальные движки. Поскольку это пользовательский виртуальный движок, внешний мир не может напрямую получить доступ к его методу выполнения, формату инструкций и другой информации. Кроме того, происходит значительное расширение кода, что затрудняет обратную разработку кода, содержащего оригинальную семантическую информацию.
Влияние виртуализации на производительность
Виртуализационная защита — это чрезвычайно сильное решение для защиты кода, но главная проблема виртуализационной защиты — производительность. Пользовательские виртуальные движки не могут использовать множество мер оптимизации производительности, как JVM, и не могут применять такие техники, как JIT. Вы можете попробовать использовать JVM-движок, о котором мы упоминали ранее, для выполнения того же кода, что и обычная JVM, и сравнить производительность — разница может превышать 100 раз.
Заключение
Виртуализационная защита — это наиболее надёжный метод защиты кода, но из-за значительного влияния на производительность она не может применяться ко всему коду программы. Она может защитить только критический код, а остальной код по-прежнему несёт риск раскрытия. Анализируя другие части кода, можно получить функциональную информацию о виртуализированной части кода.