HAPP·Research

Как проверить VPN-приложение перед установкой: практическое руководство

Пошаговая методика проверки для Android и iOS — издатель, пакет, сайт, подпись, разрешения, история обновлений. С живыми примерами из расследования Happ.

Эта методика — то, что мы применяем в собственном расследовании. Её можно повторить для любого сетевого приложения за 10–15 минут. Порядок шагов — от самых результативных к вспомогательным.

Шаг 1. Идентифицируйте оригинал до похода в магазин

Найдите официальный сайт проекта вне магазинов: поиск «<название> github», ссылки из проверенных агрегаторов (например, наш каталог), упоминания в независимых источниках. Запишите:

  • домен сайта и репозиторий исходного кода;
  • имя издателя, под которым проект публикуется в магазине;
  • имя пакета (Android) или bundle id (iOS).

Пример из расследования. Официальный Happ: сайт happ.su / happ.info, репозитории GitHub-организации Happ-proxy, издатель iOS Flyfrog LLC, пакет Android com.happproxy. Всё, что не совпадает с этими идентификаторами, — кандидат на проверку. Например, com.happ.vpnproxy от «STL Cinema, inc» носит то же название «Happ - Proxy Utility», но не имеет к оригиналу отношения — классический name-squatting.

Шаг 2. Сверьте издателя на странице магазина

На странице Google Play имя разработчика — ссылка: нажмите её и посмотрите весь список приложений издателя. Красные флаги:

  • портфель из десятков однотипных VPN/чистильщиков/фонариков — конвейер шаблонных приложений;
  • издатель-«физлицо» у сервиса, обрабатывающего трафик (не приговор, но минус к отчётности);
  • название компании из чужой отрасли (издатель «кинематографической» компании, публикующий сетевой софт).

В App Store откройте страницу разработчика под названием приложения и проверьте сайт продавца. Пример: продавец «Happ Plus VPN: Тест скорости» указывает сайт gethapp.site — домен, созвучный официальному happ.su, но ему не принадлежащий.

Шаг 3. Проверьте имя пакета и совпадение с официальным

Android: страница приложения в браузере → URL содержит id=... (например, id=com.happ.plushap). Сверьте с официальным com.happproxy. Совпадение названия при несовпадении пакета — главный маркер подделки: название в магазине свободный текст, имя пакета — техническая идентичность.

iOS: прямой просмотр bundle id на странице невозможен, но iTunes API (itunes.apple.com/lookup?id=<id>) возвращает bundleId, продавца, дату релиза и историю версий.

Шаг 4. Оцените возраст и динамику

Свяжите дату релиза с числом оценок и функциональностью. Тысячи оценок за первые недели при релизе месяц назад — аномалия (накрутка или перелив аудитории с закрытого приложения). Десять лет истории с регулярными обновлениями — плюс.

Шаг 5. Прочитайте заявку о данных и разрешения

Google Play: раздел «Безопасность данных» (что заявлено о сборе) и «Разрешения». Для прокси-клиента ожидаемы: VPN, сеть, уведомления. Требования к контактам, камере, файлам, точному местоположению — обоснованный отказ.

Сверьте заявление с поведением: утилита с «нет данных, не собирается ничего» и рекламным SDK в дистрибутиве лжёт как минимум наполовину.

Шаг 6. Найдите код и аудиты

  • Открытый репозиторий? Смотрите коммиты, релизы, обсуждения issues.
  • Аудит: формулировки «audited by <название фирмы>, отчёт по ссылке» с реальным PDF — редкость, но для Tor, WireGuard, Outline — реальность.
  • Закрытый код — не приговор, но повышенные требования к репутации и годам наблюдения.

Шаг 7. Для продвинутых: подпись и хэш APK

Если ставите APK вне магазина (как случилось с Happ после исчезновения из Google Play):

# Хэш скачанного файла против опубликованного разработчиком
shasum -a 256 Happ.apk

# Сертификат подписи (apksigner из Android SDK)
apksigner verify --print-certs Happ.apk

Сверьте SHA-256 сертификата с указанным в официальном репозитории. Один и тот же разработчик подписывает все версии одним ключом — смена ключа без объяснений это повод остановиться.

Чек-лист (короткая версия)

  • Официальный сайт/репозиторий найдены вне магазина
  • Издатель в магазине совпадает с заявленным проектом
  • Имя пакета / bundle id совпадает с официальным
  • Портфель издателя не выглядит конвейером шаблонов
  • Возраст и динамика оценок правдоподобны
  • Разрешения соответствуют функции
  • Заявление о данных не противоречит поведению
  • Есть код, аудит или длинная незапятнанная история

Отрицательный ответ на первые три пункта — отказ от установки. Остальные — повод копать глубже.