Один из базовых приемов для повышения уровня безопасности вашего Flutter-приложения — это обфускация кода. Сегодня разберем, что это, как использовать и какие есть нюансы.
Обфускация простыми словами — некоторое запутывание кода с помощью определенного набора символов. При обфускации код сборки становится нечитаемым для человека. Названия всех методов и классов подменяются другими символами.
Какую проблему решает? Обфускация сильно затрудняет процесс понимания кода, полученного в процессе реверс-инжиниринга. Посмотрим, как это работает.
Возьмем простое приложение, тот шаблон, который генерируется автоматически при создании Flutter-проекта. Соберем две сборки, одну с обфускацией, другую — без. Затем проведем процесс реверс-инжиниринга обеих сборок с помощью инструмента Blutter.
Результат — на карточке👆
Вывод — код сборки с обфускацией прочитать почти невозможно.
Обфусцировать код Flutter-приложения очень просто – достаточно запустить команду сборки следующим образом:
flutter build <build-target> \
--obfuscate \
--split-debug-info=/<symbols-directory>
Здесь очень важно использовать опцию --split-debug-info, она по указанному пути выгрузит символы обфускации, с помощью которых можно будет в дальнейшем расшифровывать важные логи, например, стектрейсы ошибок. ❕При обфускации нельзя в коде использовать сравнение строковых представлений runtime-типов.
Попробуйте для примера сделать подобную реализацию в сборке с обфускацией и без.
class User {}
Text(user.runtimeType.toString());
Text ("${user.runtimeType.toString() == "User"");
Без обфускации на экране появятся значения
User и true. С обфускацией в первом виджете будет набор рандомных символов, во втором — false. 🔥 — если используете обфускацию в своих проектах.

