Сповіщення

You can now request help from the Help page in your Play Console account.  If you don't have access to Play Console, ask your account admin for an invite.

Як налаштувати захист від втручання

Примітка. Ця функція доступна лише для деяких партнерів Google Play.

У цій статті описано, як налаштувати захист Google Play від втручання для додатків і ігор. Щоб використовувати налаштування, описані на цій сторінці, у Play Console має бути ввімкнено автоматичний захист із захистом від втручання.

Про захист окремих методів від втручання

Ви можете налаштувати захист від втручання, визначивши в додатку конкретні методи Java й Kotlin, які потребують надійнішого захисту. Коли ви завантажуєте випуск у Google Play, система застосовує покращений захист насамперед до цих методів.

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

Як налаштувати захист від втручання

Щоб захистити окремі методи від втручання в коді додатка, виконайте наведені нижче дії.

Крок 1. Додайте інтерфейс автоматичного захисту в код додатка

Спершу додайте інтерфейс захисту в додаток або гру.

Для методів Kotlin:

package com.google.android.play.protections.annotations

/**
* Указує на те, що метод може потребувати покращеного захисту.
*
* <p>Цю анотацію буде автоматично вилучено з dex-коду вашого
* набору, коли Google Play додасть до нього захист. Використовуйте її лише як
* анотацію на рівні методу. Інші способи її використання (наприклад, для рефлексивного доступу до класу
* під час виконання) не підтримуються.
*/
@Retention(AnnotationRetention.RUNTIME)
@Target(AnnotationTarget.FUNCTION)
public annotation class PlayAutomaticIntegrityProtection() {}

Для методів Java:

package com.google.android.play.protections.annotations;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
* Указує на те, що метод може потребувати покращеного захисту.
*
* <p>Цю анотацію буде автоматично вилучено з dex-коду вашого
* набору, коли Google Play додасть до нього захист. Використовуйте її лише як
* анотацію на рівні методу. Інші способи її використання (наприклад, для рефлексивного доступу до класу
* під час виконання) не підтримуються.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface PlayAutomaticIntegrityProtection {}

Важливо. Якщо ви використовуєте додаткові інструменти для оптимізації додатка (наприклад, ProGuard або R8), налаштуйте їх так, щоб анотація не втрачалася під час такої оптимізації. Для ProGuard додайте у файл конфігурації наведений нижче атрибут.

# Не вилучати клас анотації і його елементи.
-keep class com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection* { *; }

# За умовчанням ProGuard розглядає атрибути анотацій як необов’язкові й вилучає
# їх на етапі обфускації. Це правило гарантуватиме, що їх не буде вилучено.
-keepattributes RuntimeVisibleAnnotations, AnnotationDefault

# Не вилучати методи й анотацію, але виконати їх обфускацію.
-keepclassmembers,allowobfuscation class * {
    @com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection *;
}

Крок 2. Додайте анотації до методів, які потребують покращеного захисту

Коли інтерфейс буде включено у ваш додаток, ви зможете застосувати захист до конкретних методів, додавши для них відповідні анотації.
Для методів Kotlin:

import com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection

@PlayAutomaticIntegrityProtection()
fun myMethod() {
  // Тіло методу…
}

 

Для методів Java:

import com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection;

@PlayAutomaticIntegrityProtection()
public void myMethod() {
  // Тіло методу…
}

Крок 3 (необов’язково). Захистіть секретні дані клієнта

Покращений захист методів виконує обфускацію (шифрує) код безпосередньо в тілі анотованого методу. За допомогою цього інструмента можна захистити конфіденційні ключі API.

Примітка. Рядок ключа API потрібно вбудувати в захищене тіло методу (а не виносити в окреме поле), оскільки обфускація застосовуватиметься лише безпосередньо до тіла методу.

Для методів Kotlin:

import com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection

@PlayAutomaticIntegrityProtection()
fun callApi() {
  api.connect("YOUR_API_KEY")
}

 

Для методів Java:

import com.google.android.play.protections.annotations.PlayAutomaticIntegrityProtection;

@PlayAutomaticIntegrityProtection()
public static void callApi() {
  api.connect("YOUR_API_KEY");
}

Крок 4 (необов’язково). Оптимізуйте вплив захисту на продуктивність

За умовчанням виклик захищеного методу витрачає кілька додаткових мілісекунд роботи додатка. Тому захищені методи не можна викликати в чутливих до продуктивності сценаріях або основному потоці.

Якщо вам потрібно захистити метод, який має виконуватися швидко, можна вибрати простіший режим захисту. Ви можете використати в анотації атрибут для швидшого доступу (із завантаженням під час запуску), однак цей режим захисту менш надійний.

Для методів Kotlin:

@PlayAutomaticIntegrityProtection(loadAtStartup = true)
fun callApi() {
  api.connect("YOUR_API_KEY")
}

 

Для методів Java:

@PlayAutomaticIntegrityProtection(loadAtStartup = true)
public static void callApi() {
  api.connect("YOUR_API_KEY");
}

Щоб використовувати цей атрибут інтерфейсу, додайте його в тіло оригінального визначення анотації з кроку 1:

// Оновлене визначення анотації для методу Kotlin
public annotation class PlayAutomaticIntegrityProtection(
  /**
  * Якщо вибрати значення true, анотований метод завантажуватиметься під час запуску. Якщо вибрати значення false,
  * метод завантажуватиметься за запитом.
  *
  * <p>Якщо завантажувати метод за запитом, його виклик призведе до зниження
  * продуктивності. Якщо завантажувати метод під час запуску додатка, він залишатиметься в пам’яті в деобфускованому вигляді
  * протягом усього часу роботи додатка.
  */
  val loadAtStartup: Boolean = false
) {}

Крок 5. Перевірте додаток

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

Практичні поради щодо вибору методів

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

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

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

Як вилучити покращений захист окремих методів

Якщо вам більше не потрібен покращений захист для окремого методу, просто вилучіть анотацію @PlayAutomaticIntegrityProtection().

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

 

Ця сторінка може містити контент, перекладений за допомогою ШІ. У таких перекладах можуть бути помилки.

Чи корисна ця інформація?

Як можна її покращити?

Потрібна додаткова допомога?

Спробуйте дії нижче.

Пошук
Очистити пошук
Закрити пошук
Додатки Google
Головне меню
6354563486115476080
true
Пошук у довідковому центрі
false
true
true
true
true
true
92637
false
false
false
false
false