Реализация механизмов защиты от пиратства в VR приложениях

Наша компания по разработке видеоигр ведет независимые проекты, совместно с клиентом создает игры и оказывает дополнительные операционные услуги. Опыт нашей команды позволяет нам охватить все игровые платформы и разработать потрясающий продукт, соответствующий видению клиента и предпочтениям игроков.

От иммерсивных приложений до игровых миров и 3D-сцен

Наша выделенная команда для VR/AR/MR-разработки, Unity-продакшна и 3D-моделирования и анимации с собственными кейсами и презентациями.

Посетить персонализированный сайт
Показано 1 из 1 услугВсе 242 услуг
Реализация механизмов защиты от пиратства в VR приложениях
Средняя
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции
Какие этапы разработки игры?
Последние работы
  • image_games_mortal_motors_495_0.webp
    Разработка игры для компании Mortal Motors
    683
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Пошаговая стратегия в фэнтези сеттинге With Fire And Sword
    860
  • image_games_second_team_604_0.webp
    Разработка игры для компании Second term
    490
  • image_games_phoenix_ii_606_0.webp
    3D-анимация — тизер для игры phoenix 2.
    533

id: 231 slug: vr-app-anti-piracy-mechanism-implementation title_ru: "Реализация механизмов защиты от пиратства в VR приложениях" tags: [vr-ar]

Реализация механизмов защиты от пиратства в VR приложениях

APK Quest-приложения извлекается с устройства за минуты: adb backup или прямое копирование из /sdcard/Android/obb/. После этого .apk загружается на форумы и устанавливается через sideload без каких-либо покупок. Для платных VR-приложений и корпоративных лицензированных тренажёров это прямые потери. Вопрос не в том, взломают или нет — вопрос в том, насколько дорого это обойдётся злоумышленнику.

Уровни защиты и где они реально работают

Проверка лицензии через платформенный API — первый и самый важный уровень. Для Oculus/Meta Store используется Entitlement Check через Oculus.Platform.Entitlements.IsUserEntitledToApplication(). Это асинхронный запрос к Meta-серверам при старте: если аккаунт не купил приложение — OnNotEntitled callback, приложение завершается. Работает надёжно для приложений из официального стора, но бесполезно для sideloaded APK.

Для SteamVR — ISteamApps.BkInitCallback() + SteamManager с проверкой SteamApps.BIsAppInstalled(AppID). Аналогично: работает только при наличии Steam-клиента и лицензии.

Для корпоративных приложений, распространяемых вне сторов, платформенный API недоступен — нужна собственная лицензионная система.

Собственная активация строится на нескольких принципах:

  • Лицензионный ключ привязывается к SystemInfo.deviceUniqueIdentifier (на Android — ANDROID_ID) + hardware fingerprint
  • Ключ верифицируется на сервере при первом запуске и периодически (раз в 24–72 часа)
  • Сервер хранит список активированных устройств с лимитом активаций на ключ
  • При отзыве лицензии (увольнение сотрудника, истёкший контракт) следующая проверка даёт блокировку

Уязвимость offline: если приложение работает без интернета (автономный тренажёр), нужна grace period — допустим, 7 дней без проверки сервера. Длиннее — риск работы с отозванной лицензией.

Обфускация кода через Unity обфускаторы (Obfuscar, BeeByte Obfuscator for Unity) переименовывает классы и методы в IL2CPP-сборке. Полноценная защита от реверса это не даёт — il2cppdumper восстанавливает структуру — но существенно усложняет патчинг конкретной проверки лицензии.

Критически важно: не хранить секреты в клиентском коде. Лицензионный сервер должен быть авторитетом — клиент не должен содержать логику «если флаг X = true, считать активированным». Любой такой флаг можно найти через Memory Editor (GameGuardian) и переключить.

Дополнительные меры для корпоративных VR

Для тренажёров, где контент является конфиденциальным:

Шифрование ассетов. AssetBundle с шифрованием AES-256: ключ не хранится в APK, запрашивается с сервера после успешной авторизации. Без ключа — зашифрованный blob бесполезен.

Integrity Check. При старте вычисляем hash критичных сборок (Application.dataPath) и сравниваем с эталоном на сервере. Модифицированный APK даст несовпадение. Реализуется через System.Security.Cryptography.SHA256.

Runtime Tamper Detection. Проверяем Debug.isDebugBuild, Application.isEditor, наличие root через Android JNI (/system/app/Superuser.apk). При обнаружении — завершение сессии или ограничение функциональности.

Из практики: в корпоративном VR-тренажёре для промышленного предприятия требовалось гарантировать, что контент не покинет устройства. Дополнительно к шифрованию ассетов реализовали запрет скриншотов через Android FLAG_SECURE (WindowManager.LayoutParams.FLAG_SECURE через JNI) — системный скриншот и запись экрана дают чёрный экран.

Этапы работы

Анализ угроз. Определяем, от чего реально нужно защититься: случайный sideload, целенаправленный взлом, утечка конфиденциального контента, несанкционированное использование лицензии.

Выбор уровней защиты. Под каждую угрозу — соответствующий механизм. Не делаем избыточную защиту там, где достаточно платформенного Entitlement Check.

Разработка. Лицензионный сервер (если нужен), клиентская интеграция, шифрование ассетов, integrity checks.

Тестирование. Проверяем все bypass-сценарии: отключение интернета, аккаунт без лицензии, попытка запустить на неактивированном устройстве.

Уровень защиты Ориентировочные сроки
Платформенный Entitlement Check (Meta/Steam) 2–4 дня
Собственная лицензионная система с сервером 2–4 недели
Шифрование ассетов + integrity + tamper detection 4–8 недель

Стоимость рассчитывается после анализа требований к безопасности и типа распространения приложения.