Приложение не обфусцировано
![]() |
Критичность: НИЗКИЙ |
| Способ обнаружения: SAST, APK |
Описание
Исходный код приложения не обфусцирован или обфусцирован с недостаточным покрытием.
Плохая обфускация приложения или её отсутствие приводит к более легкому изучению кода после декомпиляции, что позволяет злоумышленнику без труда анализировать код приложения для поиска уязвимостей или способов обхода защиты.
Рекомендации
Перед публикацией приложения необходимо убедиться, что в релизной версии приложения включены правила сжатия и обфускации кода и они корректно настроены.
Начиная с Android Gradle Plugin 3.4.0 (2019 год) штатным механизмом сжатия (shrinking), оптимизации и обфускации кода является R8. Он включён по умолчанию и пришёл на смену устаревшему компилятору ProGuard. При этом R8 совместим с форматом конфигурационных файлов ProGuard: те же файлы proguard-rules.pro и правила (директивы -keep, -dontwarn и т. п.) продолжают использоваться — поэтому в обиходе их по-прежнему называют «правилами ProGuard». Включается R8 тем же флагом minifyEnabled true для нужного типа сборки.
Важно: ProGuard как отдельный компилятор считается legacy и не поставляется с современным AGP. Самостоятельно подключать ProGuard к проекту не требуется — нужно лишь корректно настроить правила, которые применит R8.
Пример правил (формат ProGuard, применяется R8):
optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontskipnonpubliclibraryclassmembers
-dontpreverify
-verbose
-dump class_files.txt
-printseeds seeds.txt
-printusage unused.txt
-printmapping mapping.txt
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-allowaccessmodification
-keepattributes *Annotation*
-renamesourcefileattribute SourceFile
-keepattributes SourceFile,LineNumberTable
-repackageclasses ''
Включение сжатия и обфускации (R8) для релизной сборки приложения:
buildTypes {
...
release {
// minifyEnabled включает R8: сжатие, оптимизацию и обфускацию кода
minifyEnabled true
// shrinkResources true // дополнительно удаляет неиспользуемые ресурсы
// proguard-android-optimize.txt — базовый набор правил с включёнными оптимизациями
// (предпочтительнее, чем proguard-android.txt)
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
Также хорошей практикой может служить обфускация используемых в проекте библиотек с открытым исходным кодом. Всё больше библиотек распространяются уже с готовыми конфигурационными файлами для обфускации. R8 (как и ProGuard ранее) умеет заглядывать внутрь AAR/JAR-архива, находить упакованные в нём правила (consumer-rules.pro / proguard.txt) и автоматически применять их вместе с остальными опциями. Проверьте каждую используемую библиотеку на наличие такого файла.
Если авторы библиотеки не упаковывают конфиг в архив, возможно они позаботились и написали правила на своем сайте, страничке репозитория или в README файле. Попробуйте самостоятельно найти конфиг для той версии библиотеки, которую вы используете.
