Проблемы обфускации кода

Обфускация кода — это самое раннее решение, применяемое для защиты Java-кода, а также наиболее прямой подход.

Обфускация кода обычно включает следующие четыре метода:

  1. Преобразование имён пакетов, классов и переменных
  2. Изменение управляющих структур, например, выравнивание потока управления, добавление неизменяемых предикатов и т.д.
  3. Обфускация или шифрование строк
  4. Добавление бесполезного кода

Обфускация кода может значительно снизить читаемость декомпилированного кода и увеличить сложность статического анализа, однако независимо от того, как выполняется обфускация, логика выполнения программы не изменяется.

Байт-код JVM — это очень чёткий и явный семантический промежуточный код с высокой читаемостью. Для обфусцированных файлов классов, даже если их невозможно восстановить до читаемого исходного кода Java, они всё ещё могут быть проанализированы на уровне байт-кода. Благодаря высокой семантичности байт-кода Java этот процесс фактически относительно прост.

Мы разработали движок выполнения байт-кода JVM с использованием языков Java и Kotlin. Пользователи могут использовать этот проект для динамической отладки Java-программ на уровне байт-кода в IntelliJ IDEA. Для получения дополнительной информации обратитесь к статье ниже.

https://protector4j.com/ru/articles/jvm-bytecode-engine-written-with-java-and-kotlin/

И мы использовали этот движок для попытки взлома известного обфусцированного кода. Подробный процесс описан в следующей статье:

http://protector4j.com/ru/articles/deobfuscate-with-vlx-vmengine/

Заключение

Из приведённого анализа видно, что благодаря высокой семантичности байт-кода JVM его очень легко анализировать и читать. Логику выполнения можно легко проанализировать с помощью динамической отладки. Написание инструментов динамической отладки не является очень сложной задачей, поэтому обфускация не является надёжным решением для защиты.