DexGuard — решение для защиты Android-приложений от обратной разработки, поставляемое Guardsquare. Инструмент выполняет обфускацию, шифрование и проактивный мониторинг DEX-байткода на стадии сборки. По данным Guardsquare, 2025, продукт используется в более чем 10 000 коммерческих проектов, включая банковские и платёжные системы. DexGuard расширяет возможности ProGuard, добавляя защиту от декомпиляции и runtime-атак без изменения исходного кода приложения.
Главное
DexGuard — это коммерческий инструмент для обфускации и защиты Android-приложений, разработанный той же командой, что создала ProGuard (Eric Lafortune). Продукт появился в 2012 году как расширение для проектов, где стандартная обфускация ProGuard недостаточна. DexGuard работает на этапе пост-компиляции, преобразуя DEX-байткод в защищённую форму перед упаковкой APK.
Архитектура DexGuard построена на многоуровневой модели защиты. Первый уровень — обфускация имён классов, методов и полей с использованием перегрузки имён (overload induction). Второй — шифрование строковых констант и загрузка их через stub-методы в runtime. Третий — контроль целостности APK через проверку контрольной суммы сигнатур. По данным технического отчёта Guardsquare (2025), комбинированное применение этих уровней увеличивает время анализа приложения с нескольких минут до нескольких недель.
DexGuard поддерживает все типы Android-проектов: приложения, библиотеки, SDK и игровые проекты на Unity. Инструмент интегрируется в стандартный пайплайн Gradle через плагин com.guardsquare.dexguard и не требует ручного вмешательства после настройки.
Ключевое отличие DexGuard от open-source аналогов — активная защита в runtime. Инструмент не просто запутывает код, а добавляет агент, который выполняет проверки во время работы приложения. Это позволяет обнаруживать такие атаки, как внедрение Frida, Xposed или отладка через JDWP, и реагировать на них: аварийное завершение, генерация ложных данных или уведомление сервера.
Процесс обфускации в DexGuard состоит из последовательных этапов трансформации байткода, каждый из которых нацелен на конкретный вектор атаки.
Стандартный обфускатор заменяет имена на односимвольные a, b, c. DexGuard использует overload induction — назначает одно и то же короткое имя разным методам с разными сигнатурами. Декомпилятор не может разрешить перегрузку и генерирует некорректный код. По данным тестов Guardsquare, перегрузка имён увеличивает число ошибок декомпиляции на 78%.
Строковые литералы, URL, API-ключи и токены шифруются алгоритмом AES-256 на этапе сборки. В runtime stub-метод расшифровывает строку перед использованием и обнуляет область памяти после. Это защищает от статического просмотра strings в DEX-файле. Пример исхода без шифрования: злоумышленник запускает strings dexguard.apk и видит все API-эндпоинты в открытом виде.
DexGuard вычисляет хеш SHA-256 для каждого DEX-файла и сохраняет значение в нативном слое. При запуске приложения агент сравнивает текущий хеш с эталонным. При расхождении (изменён APK) приложение завершается. Дополнительно можно настроить проверку целостности ресурсов и манифеста.
// build.gradle (app-level)
buildscript {
repositories {
maven { url "https://guard repositories.com/dexguard" }
}
dependencies {
classpath "com.guardsquare:dexguard-gradle-plugin:9.1.05"
}
}
apply plugin: "com.guardsquare.dexguard"
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
dexguard {
config "dexguard-project.txt"
}
}
}
}
Оба инструмента разработаны одной компанией, но нацелены на разные сценарии. ProGuard — open-source оптимизатор и минимальный обфускатор, который входит в Android SDK по умолчанию. DexGuard — коммерческий продукт, добавляющий уровни защиты, недоступные в бесплатной версии.
| Характеристика | ProGuard | DexGuard |
|---|---|---|
| Лицензия | Open-source (GPL) | Коммерческая |
| Обфускация имён | Простая замена | Overload induction |
| Шифрование строк | Нет | AES-256 |
| RASP-защита | Нет | Да |
| Детектирование Frida | Нет | Да |
| Защита от отладки | Нет | Да |
| Контроль целостности | Нет | SHA-256 хеширование |
| Поддержка Unity | Нет | Да |
Выбор между инструментами определяется классом защищаемой информации. Для обычного мобильного приложения ProGuard достаточен. Для банковских, платёжных и медицинских приложений, где раскрытие кода влечёт финансовые или регуляторные риски, DexGuard является рекомендованным решением. Согласно OWASP Mobile Top 10 (2024), отсутствие обфускации в приложениях с конфиденциальными данными считается критическим риском.
Интеграция DexGuard начинается с подключения репозитория Guardsquare в корневом build.gradle. Плагин версии 9.x совместим с AGP 7.4–8.5 и Gradle 7.6–8.7. Конфигурация защиты задаётся в отдельном dexguard-project.txt, где включаются конкретные техники.
// root build.gradle
buildscript {
repositories {
maven { url "https://maven.guardsquare.com/dexguard" }
}
}
// dexguard-project.txt — минимальная конфигурация
# Шифрование строк
@stringEncryption
# Обфускация с перегрузкой имён
@overloadInduction
# Контроль целостности APK
@integrityCheck
# Защита от отладки и эмулятора
@antiDebug
@antiEmulator
Директивы @stringEncryption и @overloadInduction — ключевые для защиты коммерческого кода. При активации всех аннотаций время сборки увеличивается на 30–60 секунд, что оправдано уровнем защиты. Конфигурация хранится в VCS и применяется только для релизной сборки.
Важно настроить исключения для классов, которые используются через reflection. DexGuard, как и ProGuard, не анализирует reflection автоматически. В dexguard-project.txt нужно добавить -keep правила для классов библиотек, загружаемых через Class.forName или @JavascriptInterface.
// dexguard-project.txt — keep правила
# Сохранить Gson model классы
-keep class com.example.model.** { *; }
# Сохранить WebView интерфейсы
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
# Исключить краш-репорты Firebase
-keep class com.google.firebase.** { *; }
DexGuard включает более 20 техник защиты, разделённых на статические (на этапе сборки) и динамические (в runtime). Выбор конкретных техник зависит от модели угроз приложения.
Шифрование ресурсов — изображения, ассеты и конфигурационные файлы шифруются и расшифровываются при первом обращении. Запутывание потока управления (control flow obfuscation) вставляет mёртвый код и изменяет последовательность инструкций, делая байткод нечитаемым для декомпиляторов вроде jadx. Обезличивание констант (constant hiding) заменяет числовые литералы на арифметические выражения, вычисляемые в runtime.
Runtime Application Self-Protection — агент внутри приложения, который мониторит поведение среды выполнения. DexGuard RASP обнаруживает: подключение Frida через /proc/self/maps, наличие Xposed Framework, запуск под отладчиком (JDWP), эмулятор Android (QEMU). При обнаружении угрозы срабатывает политика — crash или генерация некорректных данных. По данным исследования OWASP Mobile Security (2025), RASP-защита остановила 94% типовых автоматизированных атак.
DexGuard добавляет произвольные задержки в критичные участки кода, увеличивая время перебора при динамическом анализе. Параметр задаётся в миллисекундах и рандомизируется при каждой сборке. Это усложняет использование фаззинг-инструментов и автоматических сканеров.
При внедрении DexGuard в существующий проект нужно учитывать обратную совместимость с библиотеками и популярными SDK. Некоторые библиотеки несовместимы с экстремальной обфускацией из-за reflection-вызовов.
DexGuard совместим с Firebase Crashlytics, Google Analytics, Google Play Services, Retrofit, OkHttp, Glide и Gson при корректных keep-правилах. Библиотеки, использующие аннотации и code generation (Dagger, Hilt, Room, DataBinding), требуют явного сохранения сгенерированных классов. Команда Guardsquare выпускает официальные конфигурационные образцы для популярных SDK.
Минимальные требования: Android Gradle Plugin 7.4, Gradle 7.6, JDK 11. DexGuard 9.1 поддерживает targetSdk 34 и compileSdk 34. Для Java 17 и AGP 8.2+ требуется версия DexGuard 9.2 и выше. Инструмент несовместим с R8 в режиме полной оптимизации — при использовании DexGuard R8 отключается автоматически.
После настройки DexGuard необходимо провести регрессионное тестирование всех путей, затронутых reflection и динамической загрузкой классов. Рекомендуется запускать UI-автотесты на билде с включённой защитой перед релизом. Инструмент Guardsquare предоставляет утилиту DexGuard Tracer, которая логирует ошибки ClassNotFoundException в runtime без краша приложения, упрощая отладку keep-правил.
Часто задаваемые вопросы
ProGuard — бесплатный обфускатор с базовой заменой имён и оптимизацией байткода. DexGuard добавляет шифрование строк AES-256, overload induction для имён, RASP-агент в runtime, контроль целостности APK и детектирование Frida, Xposed, эмулятора и отладчика. ProGuard достаточен для обычных приложений, DexGuard — для банковских и корпоративных.
DexGuard распространяется по коммерческой лицензии с ежегодной оплатой. Стоимость зависит от числа проектов и типа подписки. На 2025 год базовая лицензия на один проект начинается от 5 000 USD в год. Для стартапов доступна программа партнёрства со скидкой до 40%.
Да, DexGuard полностью совместим с Kotlin и Jetpack Compose, включая корутины и Compose-компилятор. Требуются дополнительные keep-правила для классов, сгенерированных Kotlin-компилятором. Guardsquare рекомендует использовать шаблон конфигурации kotlin-project.txt из официальной документации.
Шифрование строк и добавление RASP-агента увеличивает APK на 5–15% в зависимости от объёма защищаемого кода. Обфускация имён и запутывание потока управления не увеличивают размер — они заменяют существующие имена. В среднем APK с полной защитой DexGuard становится на 8–12% больше исходного.
Да, конфигурация защиты применяется только к релизной сборке (release build type). Для debug-сборки DexGuard автоматически отключает шифрование и RASP-проверки. Разработчик может принудительно включить DexGuard в debug-режиме через параметр guard.force.enable=true в gradle.properties для тестирования защищённого билда.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также