| .github/workflows | ||
| .idea | ||
| app | ||
| gradle | ||
| .gitignore | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| ocr_methodika_vpn_proxy.md | ||
| README.md | ||
| settings.gradle.kts | ||
RKNHardering
Android-приложение для обнаружения VPN и прокси на устройстве. Реализует методику РКН по выявлению средств обхода блокировок.
Минимальная версия Android: 8.0 (API 26).
Что проверяется
Приложение запускает четыре независимых проверки и выносит итоговый вердикт.
GeoIP
Запрашивает внешний API (ip-api.com) и анализирует публичный IP устройства:
- страна IP (не Россия — подозрительно)
- принадлежность к хостинг-провайдеру
- наличие IP в базах известных прокси/VPN
Прямые признаки
Проверяет системные признаки VPN без сетевых запросов:
- флаг
TRANSPORT_VPNвNetworkCapabilities - флаги
IS_VPN,VpnTransportInfoв системных capabilities - системные переменные
http.proxyHost,socksProxyHost - известные прокси-порты (1080, 8080, 3128, 9050 и др.)
Косвенные признаки
Анализирует сетевую конфигурацию устройства:
- отсутствие capability
NOT_VPN - наличие интерфейсов
tun*,tap*,wg*,ppp*,ipsec* - аномальный MTU (< 1500) на нестандартных интерфейсах
- маршрут по умолчанию через нестандартный интерфейс
- DNS-серверы на localhost или в частных подсетях
Bypass-проверка
Сканирует локальные порты на наличие открытых прокси и Xray/V2Ray API:
- HTTP/SOCKS прокси на известных портах
- gRPC API Xray-core на стандартных портах
Вердикт
| GeoIP | Прямые | Косвенные | Bypass | Вердикт |
|---|---|---|---|---|
| - | any | - | - | Не обнаружен |
| + | - | - | - | Требует проверки |
| - | + | + | - | Требует проверки |
| + | +или+ | — | - | Обнаружен |
| any | any | any | + | Обнаружен |
Сборка
Требования: JDK 17+, Android SDK с Build Tools для API 36.
./gradlew assembleDebug
APK будет в app/build/outputs/apk/debug/app-debug.apk.
Релиз
Release APK собирается и публикуется автоматически через GitHub Actions:
- при пуше тега вида
v1.0,v1.2.3 - вручную через вкладку Actions → Release → Run workflow
Подписанный APK прикладывается к GitHub Release.
Настройка подписи (один раз)
-
Сгенерировать keystore:
keytool -genkey -v -keystore release.jks -alias release -keyalg RSA -keysize 2048 -validity 10000 -
Добавить в GitHub → Settings → Secrets and variables → Actions:
Secret Значение KEYSTORE_BASE64base64 -w0 release.jksKEYSTORE_PASSWORDпароль keystore KEY_ALIASreleaseKEY_PASSWORDпароль ключа -
После этого любой пуш тега создаёт подписанный релиз автоматически.