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



Опитайте Нашия Инструмент За Премахване На Проблемите

Това ръководство е за разработчици на приложения за Android, които печелят доходи от IAP и искат да се предпазят от хакери и измамни покупки чрез хакерски инструменти. Има няколко добре познати IAP хакерски инструмента, които няма да изброявам тук, но основно тези инструменти изпращат фалшиви разписки за покупки до вашето приложение, за да позволят на потребителя да се наслаждава на безплатни IAP. Това може да бъде всичко - от месечни абонаменти до жетони в играта.





Въпреки че новите версии на тези инструменти за хакерство винаги се издават и усърдието да бъдете в течение с последните им актуализации и методи е много важно, има няколко неща, които можете да направите, за да защитите приложенията си от кражба. Най-забележителното е, че трябва да активирате няколко метода за проверка на IAP от страна на сървъра, които ще опиша подробно по-долу.



Това ръководство не е предназначено за начинаещи, но опитни разработчици на приложения, които ще разберат различните жаргони в това ръководство.

Използване на приставка Git Repo Конкретно за тази цел:

PiracyChecker

Добавете хранилището към вашия проект build.gradle :



хранилища {

maven {

url “https://jitpack.io”

}

}

И добавете библиотеката към вашия модул build.gradle :

зависимости {

компилиране ‘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”)

...

.start ();

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

Когато използвате Google Play Licensing, трябва да се обадите на .destroy () в метода onDestroy () на вашата активност, за да избегнете множество екземпляри на изпълняваната услуга.

Проверете сертификата за подписване на приложението (подпис)

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

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

нов PiracyChecker (това)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // Оригиналният APK подпис за версията на PRODUCTION

...

.start ();

БЪДИ ВНИМАТЕЛЕН!! Подписът на приложението ви може да бъде извлечен с помощта на метода PiracyCheckerUtils. Уверете се, че сте подписали вашия APK, като използвате хранилището на ключове за PRODUCTION (не използвате DEBUG) и сте инсталирали версията, която планирате да разпространявате. След това копирайте подписа, върнат от този метод, на конзолата и поставете .enableSigningCertificate (“YOUR_APK_SIGNATURE”)

// Този метод ще отпечата подписа на приложението ви в конзолата

Log.e (“SIGNATURE”, PiracyCheckerUtils.getAPKSignature (this));

Проверете инсталатора

Ако планирате да разпространявате приложението само в определен магазин, тази техника ще блокира инсталирането на приложението с помощта на друг магазин.

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

нов PiracyChecker (това)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.start ();

БЪДИ ВНИМАТЕЛЕН!! Това е наистина ограничителна техника, тъй като ще блокира приложението ви да бъде инсталирано с помощта на друг пазар или директно да инсталирате .apk на устройството. Не се препоръчва за повечето случаи.

Проверете използването на пиратски приложения

Ако искате да проверите дали потребителят има инсталирани пиратски приложения, можете да използвате този код.

Той ще проверява за: Lucky Patcher, Uret Patcher, Freedom и CreeHack.

нов PiracyChecker (това)

.enableUnauthorizedAppsCheck ()

...

.start ();

Можете да блокирате приложението, дори когато това пиратско приложение е деинсталирано. Това предотвратява закърпването на приложението и след това деинсталирайте пиратското приложение, за да продължите да използвате приложението си. Библиотеката ще запази стойност SharedPreference, за да знае кога е открито пиратско приложение.

Има два начина да направите това:

Дефинирайте SharedPreferences и името на предпочитанието, където искате да запишете резултата.

нов PiracyChecker (това)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (предпочитания, “app_unauthorized”) // Промяна на “app_unauthorized” със собствена стойност

...

.start ();

Дефинирайте името SharedPreferences и името на предпочитанието, където искате да запишете резултата.

нов PiracyChecker (това)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (“license_preferences”, “app_unauthorized”) // Промяна на “license_preferences” и “app_unauthorized” със собствена стойност

...

.start ();

Проверете използването на приложения на магазини на трети страни

Ако искате да проверите дали потребителят има инсталирани приложения на магазини на трети страни, можете да използвате този код.

Той ще проверява за: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe и ACMarket.

нов PiracyChecker (това)

.enableStoresCheck ()

...

.start ();

Проверете дали приложението е компилация за отстраняване на грешки

Ако приложението ви работи на емулатор извън процеса на разработка, това показва, че някой друг освен вас се опитва да анализира приложението.

нов PiracyChecker (това)

.enableDebugCheck ()

...

.start ();

Проверете дали приложението се изпълнява в емулатор

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

булева дълбочина = невярно;

нов PiracyChecker (това)

.enableEmulatorCheck (дълбоко)

...

.start ();

Забележка: дълбокият булев с make библиотеката прави допълнителни проверки, за да открие дали устройството е емулатор или не. Това може да доведе до някои странни сривове, така че бъдете мъдри, когато го използвате.

Запазете резултата от проверката на лиценза в SharedPreferences

Запазването на резултата от проверката на лиценза е полезно за проверка на състоянието на лиценза без многократно извикване на .start ().

Има два начина да направите това:

Дефинирайте SharedPreferences и името на предпочитанието, където искате да запишете резултата.

нов PiracyChecker (това)

.saveResultToSharedPreferences (предпочитания, “valid_license”) // Променете “valid_license” със собствената си стойност

...

.start ();

Дефинирайте името SharedPreferences и името на предпочитанието, където искате да запишете резултата.

нов PiracyChecker (това)

.saveResultToSharedPreferences (“license_preferences”, “valid_license”) // Промяна на “license_preferences” и “valid_license” със собствена стойност

...

.start ();

Персонализации

Показване на резултатите в диалогов прозорец или нова активност

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

По подразбиране ще се покаже неотменяем диалогов прозорец.

нов PiracyChecker (това)

.display (Display.ACTIVITY)

...

.start ();

По подразбиране показаната дейност ще използва цветовете на библиотеката. За да приложите персонализиран първичен и основен тъмен цвят и да определите дали активността трябва да показва нормална или светла лента на състоянието, използвайте:

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

Можете също така да определите персонализирано оформление xml за това съдържание, като използвате:

.withActivityLayout (R.layout.my_custom_layout)

Използване на персонализирани обратни обаждания

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

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

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

.callback (нов PiracyCheckerCallback () {

@Override

public void allow () {

// Направете нещо, когато на потребителя е разрешено да използва приложението

}

@Override

public void dontAllow (@NonNull PiracyCheckerError error, @Nullable PirateApp app) {

// Можете или да направите нещо конкретно, когато потребителят няма право да използва приложението

// Или управлявайте сами грешката, като използвате параметъра ‘error’ (Проверете грешките на {@link PiracyCheckerError}).

// Освен това, ако сте активирали проверката на пиратски приложения и / или магазини на трети страни, параметърът ‘app’

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

// или сте деактивирали проверката за тези приложения.

// Това ви позволява да уведомите потребителите за възможните причини, поради които лицензът е невалиден.

}

@Override

public void onError (@NonNull PiracyCheckerError error) {

// Този метод не се изисква да бъде приложен / заменен, но ...

// Можете или да направите нещо конкретно, когато възникне грешка при проверка на лиценза,

// Или управлявайте сами грешката, като използвате параметъра ‘error’ (Проверете грешките на {@link PiracyCheckerError}).

}

})

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