Как разработчики Android могут защитить свои приложения от хакеров IAP



Попробуйте наш инструмент устранения неполадок

Это руководство предназначено для разработчиков приложений для Android, которые получают доход от покупок через приложения и хотят защитить себя от хакеров и мошеннических покупок с помощью средств взлома. Существует несколько хорошо известных инструментов взлома IAP, которые я не буду здесь перечислять, но в основном эти инструменты отправляют ложные квитанции о покупке в ваше приложение, чтобы позволить пользователю пользоваться бесплатными IAP. Это может быть что угодно, от ежемесячной подписки до внутриигровых жетонов.





Несмотря на то, что постоянно выпускаются новые версии этих средств взлома, и очень важно постоянно следить за их последними обновлениями и методами, есть несколько вещей, которые вы можете сделать, чтобы защитить свои приложения IAP от кражи. В частности, вам необходимо включить несколько методов проверки IAP на стороне сервера, о которых я подробно расскажу ниже.



Это руководство предназначено не для новичков, а для опытных разработчиков приложений, которые поймут различные термины в этом руководстве.

Использование подключаемого модуля Git Repo Специально для этой цели:

Пиратство

Добавьте репозиторий в свой проект build.gradle :



репозитории {

maven {

URL «https://jitpack.io»

}

}

И добавляем библиотеку в свой модуль build.gradle :

dependencies {

скомпилировать 'com.github.javiersantos: PiracyChecker: 1.1'

}

Рекомендации

  • Всегда включайте ProGuard в производственных выпусках.
  • PiracyChecker следует включить в ваш метод onCreate, чтобы как можно скорее проверить наличие действующей лицензии.
  • Если лицензия недействительна, рекомендуется показывать новое действие вместо диалогового окна. Таким образом, вы убедитесь, что основная деятельность приложения завершена. Видеть ' Отображение результатов в диалоге или новом действии '.

Подтвердите лицензию Google Play (LVL)

Google Play предлагает службу лицензирования, которая позволяет вам применять политики лицензирования для приложений, которые вы публикуете в Google Play. С помощью лицензирования Google Play ваше приложение может запрашивать Google Play для получения статуса лицензирования для текущего пользователя.

Любое приложение, которое вы публикуете через Google Play, может использовать службу лицензирования Google Play. Никакой специальной учетной записи или регистрации не требуется.

новый PiracyChecker (это)

.enableGooglePlayLicensing («BASE_64_LICENSE_KEY»)

...

.Начало();

Чтобы получить лицензионный ключ BASE64, ваше приложение должно быть загружено в Консоль разработчика Google Play . Затем зайдите в свое приложение -> Сервисы и API.

При использовании лицензирования Google Play вы должны вызвать .destroy () в методе onDestroy () вашей Activity, чтобы избежать запуска нескольких экземпляров службы.

Проверьте сертификат подписи вашего приложения (подпись)

Разработчики всегда должны подписывать приложения своим закрытым ключом / сертификатом (содержащимся в файле .keystore) перед установкой приложения на пользовательские устройства. Сертификат подписи должен оставаться неизменным на протяжении всего срока службы приложения и обычно имеет срок действия 25 лет.

Подпись приложения будет нарушена, если .apk каким-либо образом изменить - неподписанные приложения обычно не могут быть установлены. Мы можем представить себе, как злоумышленник удаляет код проверки лицензии, например, чтобы включить все функции приложения без оплаты. Более опасным примером может быть изменение .apk для включения вредоносного ПО в законное приложение для сбора конфиденциальных данных пользователей. Для установки измененного .apk злоумышленник должен отказаться от него.

новый PiracyChecker (это)

.enableSigningCertificate («478yYkKAQF + KST8y4ATKvHkYibo =») // Исходная подпись APK для ПРОИЗВОДСТВЕННОЙ версии

...

.Начало();

БЫТЬ ОСТОРОЖЕН!! Подпись вашего приложения может быть получена с помощью метода PiracyCheckerUtils. Убедитесь, что вы подписали свой APK, используя хранилище ключей PRODUCTION (не используя DEBUG), и установили версию, которую планируете распространять. Затем скопируйте подпись, возвращаемую этим методом, в консоль и вставьте в .enableSigningCertificate («YOUR_APK_SIGNATURE»)

// Этот метод напечатает подпись вашего приложения в консоли

Log.e («ПОДПИСЬ», PiracyCheckerUtils.getAPKSignature (это));

Проверить установщик

Если вы планируете распространять приложение только в определенном магазине, этот метод заблокирует установку приложения в любом другом магазине.

Поддерживаемые магазины: Google Play, Amazon App Store и Samsung Galaxy Apps.

новый PiracyChecker (это)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.Начало();

БЫТЬ ОСТОРОЖЕН!! Это действительно ограничительный метод, поскольку он заблокирует установку вашего приложения с помощью другого магазина или прямую установку .apk на устройство. В большинстве случаев это не рекомендуется.

Проверьте использование пиратских приложений

Если вы хотите проверить, установлены ли у пользователя пиратские приложения, вы можете использовать этот код.

Он будет проверять: Lucky Patcher, Uret Patcher, Freedom и CreeHack.

новый PiracyChecker (это)

.enableUnauthorizedAppsCheck ()

...

.Начало();

Вы можете заблокировать приложение, даже если это пиратское приложение было удалено. Это предотвращает установку исправлений для приложения с последующим удалением пиратского приложения, чтобы продолжить его использование. Библиотека сохранит значение SharedPreference, чтобы знать, когда было обнаружено пиратское приложение.

Есть два способа сделать это:

Определите SharedPreferences и имя предпочтения, в котором вы хотите сохранить результат.

новый PiracyChecker (это)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (настройки, «app_unauthorized») // Измените «app_unauthorized» на свое собственное значение

...

.Начало();

Определите имя SharedPreferences и имя предпочтения, в котором вы хотите сохранить результат.

новый PiracyChecker (это)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled («license_preferences», «app_unauthorized») // Измените «license_preferences» и «app_unauthorized» на свое собственное значение

...

.Начало();

Убедитесь, что вы используете сторонние приложения из магазина

Если вы хотите проверить, установлены ли у пользователя сторонние приложения из магазина, вы можете использовать этот код.

Он проверит: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe и ACMarket.

новый PiracyChecker (это)

.enableStoresCheck ()

...

.Начало();

Убедитесь, что приложение является отладочной сборкой

Если ваше приложение работает на эмуляторе вне процесса разработки, это указывает на то, что кто-то другой, кроме вас, пытается проанализировать приложение.

новый PiracyChecker (это)

.enableDebugCheck ()

...

.Начало();

Убедитесь, что приложение запускается в эмуляторе

Вне разработки маловероятно, что ваше приложение должно работать на эмуляторе, и выпускать приложения с включенной отладкой не рекомендуется, поскольку это позволяет подключенным компьютерам получать доступ и отлаживать приложение через Android Debug Bridge.

логическое значение deep = false;

новый PiracyChecker (это)

.enableEmulatorCheck (глубокий)

...

.Начало();

Заметка: глубокое логическое значение с заставкой библиотеки делать дополнительные проверки, чтобы определить, является ли устройство эмулятором или нет. Это может привести к странным сбоям, поэтому будьте осторожны при его использовании.

Сохраните результат проверки лицензии в SharedPreferences

Сохранение результата проверки лицензии полезно для проверки статуса лицензии без многократного вызова .start ().

Есть два способа сделать это:

Определите SharedPreferences и имя предпочтения, в котором вы хотите сохранить результат.

новый PiracyChecker (это)

.saveResultToSharedPreferences (предпочтения, «valid_license») // Замените «valid_license» своим собственным значением

...

.Начало();

Определите имя SharedPreferences и имя предпочтения, в котором вы хотите сохранить результат.

новый PiracyChecker (это)

.saveResultToSharedPreferences («license_preferences», «valid_license») // Измените «license_preferences» и «valid_license» на свое собственное значение

...

.Начало();

Настройки

Отображение результатов в диалоге или новом действии

Если лицензия недействительна, рекомендуется показывать новое действие вместо диалогового окна. Таким образом, вы убедитесь, что основная деятельность приложения завершена.

По умолчанию отображается диалоговое окно, которое нельзя отменить.

новый PiracyChecker (это)

.display (Display.ACTIVITY)

...

.Начало();

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

.withActivityColors (R.color.colorPrimary, R.color.colorPrimaryDark, withLightStatusBar)

Вы также можете определить собственный XML-макет для содержимого этого действия, используя:

.withActivityLayout (R.layout.my_custom_layout)

Использование пользовательских обратных вызовов

Добавление обратного вызова в конструктор позволяет вам настраивать, что произойдет, когда лицензия будет проверена, и управлять ошибками проверки лицензии, если пользователю не разрешено использовать приложение. Имейте в виду, что при использовании этого метода вы должны помнить о блокировке приложения от неавторизованных пользователей .

По умолчанию библиотека будет отображать неотменяемый диалог, если пользователю не разрешено использовать приложение, иначе ничего не произойдет.

Используйте конструктор и добавьте следующее:

.callback (new PiracyCheckerCallback () {

@Override

public void allow () {

// Что-то делать, когда пользователю разрешено использовать приложение

}

@Override

public void dontAllow (ошибка @NonNull PiracyCheckerError, приложение @Nullable PirateApp) {

// Вы можете сделать что-то конкретное, когда пользователю не разрешено использовать приложение

// Или управляйте ошибкой самостоятельно, используя параметр «error» (проверьте ошибки на странице {@link PiracyCheckerError}).

// Кроме того, если вы включили проверку пиратских приложений и / или сторонних магазинов, параметр ‘app’

// - это приложение, обнаруженное на устройстве. Приложение может иметь значение NULL, а значение NULL означает, что пиратское приложение или магазин не найдены.

// или вы отключили проверку этих приложений.

// Это позволяет сообщить пользователям о возможных причинах недействительности лицензии.

}

@Override

public void onError (ошибка @NonNull PiracyCheckerError) {

// Этот метод не требуется реализовывать / переопределять, но ...

// Вы можете сделать что-то конкретное, если при проверке лицензии возникает ошибка,

// Или управляйте ошибкой самостоятельно, используя параметр «error» (проверьте ошибки на странице {@link PiracyCheckerError}).

}

})

6 минут на чтение