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 тижнів |
Вартість розраховується після аналізу вимог безпеки та типу розповсюдження програми.





