Добавить в корзинуПозвонить
Найти в Дзене

Незаметная защита от ботов в мобильных приложениях: архитектура, методы, реализация

Боты всё чаще используют автоматизацию для регистрации фейковых аккаунтов в мобильных приложениях. Особенно это актуально для приложений, предоставляющих бонусы при регистрации, freemium-модели или сервисы с ограниченным ресурсом (скидки, купоны и т.д.). В этой статье мы рассмотрим: Цель: Обеспечить сбор информации о поведении пользователя и устройстве до/во время регистрации, не раскрывая её назначения через видимый API. Подход: Вместо прямого запроса вида POST /check_bot, используйте: POST /api/v2/app_config Payload: {
"app_version": "2.1.3",
"device_id": "fda910a3c9",
"locale": "ru-RU",
"meta": "<зашифрованная строка>"
} 🛠️ Инструмент для сборки таких данных: Собираем поведение при вводе данных в поля регистрации: ПараметрЗачем нуженСкорость набораУ бота всегда одинаковая или моментальнаяCopy/pasteБоты часто вставляют из буфераТайминг между полямиБот кликает сразу — нет естественных паузСенсорыЭмуляторы часто не дают значений с гироскопаTouch eventsНереально сымитировать же
Оглавление

Введение

Боты всё чаще используют автоматизацию для регистрации фейковых аккаунтов в мобильных приложениях. Особенно это актуально для приложений, предоставляющих бонусы при регистрации, freemium-модели или сервисы с ограниченным ресурсом (скидки, купоны и т.д.).

В этой статье мы рассмотрим:

  • как маскировать антибот-механизмы;
  • как собирать поведенческие и технические данные незаметно;
  • как работать в условиях MITM-атак и сниффинга;
  • и как организовать отложенную реакцию на бот-аккаунты.

🧱 Архитектура защиты

Цель: Обеспечить сбор информации о поведении пользователя и устройстве до/во время регистрации, не раскрывая её назначения через видимый API.

Подход:

  1. Маскировка антибот-запросов – делаем запрос "невинным", например, GET /app_config.
  2. Сбор поведенческих метрик – на клиенте, нативно, без UI и без уведомлений.
  3. Кастомная подпись запроса – защита от подмены.
  4. SSL-pinning и защита от MITM.
  5. Анализ на сервере + карантин для подозрительных аккаунтов.

📦 1. Маскировка антибот-запроса

Вместо прямого запроса вида POST /check_bot, используйте:

POST /api/v2/app_config

Payload:

{
"app_version": "2.1.3",
"device_id": "fda910a3c9",
"locale": "ru-RU",
"meta": "<зашифрованная строка>"
}

Что внутри meta:

  • тайминги между полями (время между касаниями);
  • данные акселерометра и гироскопа;
  • clipboard-флаги;
  • информация об accessibility-сервисах;
  • попытки paste;
  • фоновые скроллы и касания.

🛠️ Инструмент для сборки таких данных:

🧠 2. Сбор поведенческих данных

Собираем поведение при вводе данных в поля регистрации:

ПараметрЗачем нуженСкорость набораУ бота всегда одинаковая или моментальнаяCopy/pasteБоты часто вставляют из буфераТайминг между полямиБот кликает сразу — нет естественных паузСенсорыЭмуляторы часто не дают значений с гироскопаTouch eventsНереально сымитировать жесты «рукой»

📚 Инструменты:

  • Android: TextWatcher, InputConnection, SensorEventListener
  • iOS: UITextFieldDelegate, MotionManager, touchesBegan

Шифруйте данные на устройстве перед отправкой:

  • Tink от Google (Android/iOS)
  • или стандартный AES в Native-слое (JNI / Swift)

🧾 3. Подпись запроса и защита от реверса

Запрос должен быть подписан. Используйте:

  • HMAC-SHA256, ключ хранится в obfuscated native lib;
  • salt = device ID + случайный runtime seed.

🔐 Как скрыть алгоритм:

  • На Android — внедрите через C++ (NDK) и обфусцируйте Obfuscator-LLVM;
  • На iOS — аналогично: библиотека на Swift + кастомный фреймворк без открытых символов.

🔒 4. SSL-pinning и защита от MITM

Снифферы (прокси вроде Charles, Burp) ломают HTTPS через подмену сертификата. Это можно обнаружить:

✔️ SSL-pinning:

Важно: делайте пинning на SHA256 public key, а не на сам сертификат.

✔️ Проверка цепочки вручную:

// Android: X509TrustManager проверка
public void checkServerTrusted(X509Certificate[] chain, String authType) {
// сравнение публ. ключа с зашитым хэшем
}

🧨 Если найден кастомный CA — просто не даём регистрации пройти, но внешне это никак не сигнализируем.

⏱️ 5. Отложенная реакция

Не блокируйте аккаунт сразу. Поведение должно быть «мягким»:

  • регистрация проходит успешно;
  • но позже push/email не отправляются;
  • баланс = 0, при попытке действий — “ошибка сервера”;
  • можно метить такие аккаунты как suspect=true.

Почему это эффективно?

Боты не понимают, прошли они проверку или нет. Становится сложно валидировать схему регистрации.

📍 Пример полной реализации запроса

POST /api/v2/app_config HTTP/1.1
Content-Type: application/json
X-App-Version: 2.1.3
X-Device-ID: b72ff129f8
X-Request-Signature: 29ac35...

{
"locale": "ru-RU",
"meta": "U2FsdGVkX1+ba29..." // AES зашифрованный JSON с поведением
}

Пример зашифрованных данных (до шифра):

{
"typing_delay": [120, 400, 270],
"clipboard_used": false,
"gyro": [0.01, -0.02, 0.005],
"accessibility_services": false
}

📚 Полезные ссылки

Сбор поведения:

Шифрование:

SSL Pinning:

Обфускация:

🧩 Заключение

Эффективная антибот-система в мобильном приложении — это не CAPTCHA. Это комбинация незаметного поведения, криптографии и delayed response-механизмов, встроенных на уровне бизнес-логики. Главная задача — не дать ботам понять, что они проверяются.