Как проверить Android-устройство на вшивость с помощью Duck Detector
Представьте ситуацию: вы выпускаете банковское приложение или игру с жесткой системой античита. И тут начинаются проблемы. Пользователи жалуются на баги, которые невозможно воспроизвести на эмуляторе, или, что еще хуже, вы обнаруживаете массовые накрутки. В 90% случаев это означает, что приложение запустили в «грязной» среде: с Root-правами, под надзором Xposed или вообще внутри виртуальной машины.
Проект Duck-Detector-Refactoring — это попытка собрать в одном месте все способы понять, живет ли ваше приложение на «чистом» смартфоне или в цифровом аквариуме хакера.
Зачем нам еще один детектор рута?
Казалось бы, библиотек для проверки Root полно. Есть классический RootBeer, есть проверки от Google. Но проблема в том, что инструменты скрытия (Hide My Root, Magisk, LSPosed) развиваются быстрее. Сегодня просто проверить наличие файла su в системе недостаточно — Magisk умеет его прятать так, что система считает себя девственно чистой.
Duck Detector не ограничивается поиском одного бинарника. Он копает глубже: смотрит на состояние загрузчика, статус SELinux и ищет следы популярных фреймворков для хукинга. Исходный код переписан на Kotlin, что делает его интеграцию в современные Android-проекты максимально бесшовной.
На что именно смотрит «Утка»
Инструмент проверяет сразу несколько уровней системы. Это помогает отсечь не только школьников с установленным SuperSU, но и более продвинутых ребят.
Рут и кастомные прошивки
Библиотека сканирует стандартные пути, ищет специфические пакеты управления правами и проверяет доступ на запись в системные разделы. Если magisk или supersu оставили хоть какой-то след в виде установленного APK или измененных прав доступа — детектор это заметит.
Hook-фреймворки и инъекции
Инструменты вроде LSPosed или EdXposed позволяют менять поведение приложения на лету. Duck Detector ищет их «выхлоп» в памяти и проверяет стек вызовов. Если в системе запущены процессы, которые могут перехватывать методы вашего приложения, детектор выдаст предупреждение.
Виртуализация и эмуляторы
Часто фрод или реверс-инжиниринг происходит в виртуальных средах. Проект проверяет специфические файлы устройств, значения системных свойств (build properties) и наличие файлов, характерных для эмуляторов вроде Genymotion, Nox или систем виртуализации приложений.
Целостность среды (Attestation)
Один из самых надежных способов — проверка сигналов аттестации. Это когда мы спрашиваем у «железа» или доверенной среды, не разблокирован ли загрузчик и не подменено ли ядро системы.
Как это выглядит в коде
Интеграция довольно прямолинейная. Весь процесс сводится к вызову проверок и обработке результата. Вот пример того, как можно быстро опросить систему:
// Пример инициализации и запуска базовых проверок
val detector = DuckDetector(context)
val results = detector.detectAll()
results.forEach { result ->
if (result.isFound) {
println("Обнаружена угроза: ${result.name} - ${result.details}")
}
}
Библиотека возвращает список сигналов. Каждый сигнал содержит информацию о том, что именно подозрительного было найдено. Это удобно, если вы не хотите сразу блокировать пользователя, а планируете, например, отправить аналитику в Firebase для оценки масштабов бедствия.
Архитектурные особенности
Проект прошел через серьезный рефакторинг. Если раньше подобные утилиты были нагромождением статических методов и бесконечных if-else, то здесь проверки разбиты на логические модули. Это позволяет легко отключать ненужные тесты. Например, если вам не критичен разблокированный загрузчик, но жизненно важно отсутствие Xposed, вы просто настраиваете конфигурацию под себя.
Использование Kotlin добавило лаконичности, а Apache License 2.0 позволяет использовать наработки в коммерческих проектах без головной боли с юристами.
Кому стоит попробовать этот инструмент
В первую очередь — разработчикам финтех-проектов и приложений, работающих с чувствительными данными. Если ваше приложение оперирует деньгами или персональной информацией, знать о состоянии системы критически важно.
Также проект будет полезен тем, кто занимается защитой мобильных игр от читеров. Конечно, Duck Detector — это не серебряная пуля. Опытный реверс-инженер сможет обойти и его, но наличие такой проверки значительно поднимает «стоимость» взлома вашего приложения.
Стоит учитывать, что README у проекта довольно лаконичный. Вам придется немного покопаться в исходниках, чтобы понять, какой именно метод проверки лучше подходит для ваших задач. Но сам код написан чисто, так что проблем с чтением возникнуть не должно.
Начинать внедрение лучше с мягких проверок, чтобы не отсечь пользователей с кастомными прошивками, которые не несут угрозы вашему сервису. Ведь иногда «рут» — это просто выбор пользователя, а не попытка вас взломать.
