Обфускация кода Kotlin

Обфускация кода Kotlin

Is Your Kotlin Code Really Obfuscated? — статья, посвященная обфускации кода на языке Kotlin, а точнее тому, когда эта обфускация может не сработать.

Еще по теме: Как защитить нативную библиотеку

Автор приводит следующий пример кода:

Если скомпилировать этот код, а затем декомпилировать его в Java, мы получим следующую картину:

Обрати внимание, что появилась проверка параметров функций на null с помощью методов объекта Intrinsics. Это часть особенности Kotlin под названием null safety, которая гарантирует, что ты не сможешь обратиться к методам или полям null-объекта или случайно присвоить объекту значение null.

А теперь посмотри на тот же код, но после обфускации с помощью ProGuard (в новых версиях Android Studio его работу выполняет оптимизатор R8):

Снова обрати внимание на вызов функций Intrinsics, которые теперь имеют имя вроде b.b. Несмотря на то что в результате обфускации параметры функций получили имена var1 и var2, функция проверки на null все равно выдает их реальные имена (importantVar, importantList и так далее).

Побороть эту проблему можно, отключив саму функцию проверки на null в продакшен-коде. Это никак не повлияет на стабильность приложения, поскольку код проверки на null в рантайме нужен лишь в качестве средства отладки/диагностики, а не защиты от падения или обеспечения правильной работоспособности (фактически эти функции просто завершают приложение с исключением IllegalStateException).

Итак, открываем файл proguard-rules.pro приложения и добавляем в него следующие строки:

Полезные статьи по теме обфускации:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *