Реалізація механізмів захисту від піратства у VR додатках

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

Від імерсивних застосунків до ігрових світів і 3D-сцен

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

Відвідати персоналізований сайт
Показано 1 з 1Усі 242 послуг
Реалізація механізмів захисту від піратства у VR додатках
Середній
~3-5 днів
Часті запитання

Наші компетенції

Які етапи розробки гри?

Останні роботи

  • image_games_mortal_motors_495_0.webp
    Розробка гри для компанії Mortal Motors
    696
  • image_games_a_turnbased_strategy_game_set_in_a_fantasy_setting_with_fire_and_sword_603_0.webp
    Покрокова стратегія у фентезі сеттингу With Fire And Sword
    879
  • image_games_second_team_604_0.webp
    Розробка ігри для компанії Second term
    504
  • image_games_phoenix_ii_606_0.webp
    3D-анімація – тизер для гри phoenix 2.
    543

id: 231 slug: vr-app-anti-piracy-mechanism-implementation title_ua: "Реалізація механізмів захисту від піратства у 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) + апаратний fingerprint
  • Ключ верифікується на сервері при першому запуску та періодично (раз на 24–72 години)
  • Сервер зберігає список активованих пристроїв з ліміту активацій на ключ
  • При відзиві ліцензії (звільнення працівника, закінчився контракт) наступна перевірка дає блокування

Уразливість офлайн-режиму: якщо програма працює без інтернету (автономний тренажер), потрібен grace period — скажімо, 7 днів без перевірки сервера. Довше — ризик роботи з відкликаною ліцензією.

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

Критично важливо: не зберігайте секрети в клієнтському коді. Ліцензійний сервер має бути авторитетом — клієнт не повинен містити логіку «якщо прапор X = true, вважати активованим». Будь-який такий прапор можна знайти через Memory Editor (GameGuardian) та перемкнути.

Додаткові заходи для корпоративного VR

Для тренажерів, де контент є конфіденційним:

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

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 тижнів

Вартість розраховується після аналізу вимог безпеки та типу розповсюдження програми.