Kā Android izstrādātāji var aizsargāt savas lietotnes no IAP hakeriem



Izmēģiniet Mūsu Instrumentu Problēmu Novēršanai

Šī rokasgrāmata ir paredzēta Android lietotņu izstrādātājiem, kuri gūst ienākumus no IAP un vēlas sevi pasargāt no hakeriem un krāpnieciskiem pirkumiem, izmantojot uzlaušanas rīkus. Ir vairāki labi zināmi IAP uzlaušanas rīki, kurus es šeit neuzskaitīšu, taču būtībā šie rīki uz jūsu lietotni nosūta nepatiesas pirkumu kvītis, lai lietotājs varētu baudīt bezmaksas IAP. Tas var būt jebkas, sākot no ikmēneša abonementiem līdz spēles iekšējiem marķieriem.





Kaut arī šo uzlaušanas rīku jaunās versijas vienmēr tiek izlaistas, un ir ļoti svarīgi rūpīgi pārbaudīt to jaunākos atjauninājumus un metodes, ir dažas lietas, ko varat darīt, lai aizsargātu savu lietotņu IAP no nozagšanas. Īpaši jums ir jāiespējo vairākas servera puses IAP verifikācijas metodes, kuras es detalizēti aprakstīšu tālāk.



Šī rokasgrāmata nav paredzēta iesācējiem, bet gan pieredzējušiem lietotņu izstrādātājiem, kuri sapratīs dažādos šīs rokasgrāmatas lingo.

Šim nolūkam īpaši izmantojiet Git Repo spraudni:

PiracyChecker

Pievienojiet repozitoriju savam projektam būvēt.gradle :



krātuves {

maven {

URL “https://jitpack.io”

}

}

Un pievienojiet bibliotēku savam modulim būvēt.gradle :

atkarības {

sastādīt ‘com.github.javiersantos: PiracyChecker: 1.1’

}

Ieteikumi

  • Produkcijas laidienos vienmēr iespējojiet ProGuard.
  • PiracyChecker ir jāiekļauj jūsu onCreate metodē, lai pēc iespējas ātrāk pārbaudītu derīgu licenci.
  • Ja licence nav derīga, ieteicams dialoglodziņa vietā parādīt jaunu darbību. Tādā veidā pārliecinieties, ka lietotnes galvenā darbība ir pabeigta. Skatīt “ Parādīt rezultātus dialoglodziņā vai jaunā darbībā '.

Pārbaudiet Google Play licencēšanu (LVL)

Google Play piedāvā licencēšanas pakalpojumu, kas ļauj ieviest licencēšanas politikas lietojumprogrammām, kuras publicējat pakalpojumā Google Play. Izmantojot Google Play licencēšanu, jūsu lietojumprogramma var pieprasīt Google Play, lai iegūtu pašreizējā lietotāja licencēšanas statusu.

Jebkura lietojumprogramma, kuru publicējat pakalpojumā Google Play, var izmantot Google Play licencēšanas pakalpojumu. Īpašs konts vai reģistrācija nav nepieciešama.

jauns PiracyChecker (šis)

.enableGooglePlayLicensing (“BASE_64_LICENSE_KEY”)

...

.sākt();

Lai iegūtu BASE64 licences atslēgu, jūsu lietotne ir jāaugšupielādē Google Play izstrādātāja konsole . Pēc tam piekļūstiet savai lietotnei -> Pakalpojumi un API.

Izmantojot Google Play licencēšanu, jums ir jāizsauc .destroy () jūsu darbības metodē onDestroy (), lai izvairītos no vairākiem pakalpojuma gadījumiem.

Pārbaudiet savas lietotnes parakstīšanas sertifikātu (parakstu)

Pirms lietotni var instalēt lietotāja ierīcēs, izstrādātājiem vienmēr jāparaksta lietojumprogrammas ar savu privāto atslēgu / sertifikātu (kas atrodas .keystore failā). Parakstīšanas sertifikātam jābūt konsekventam visā lietotnes darbības laikā, un tā derīguma termiņš parasti ir 25 gadi.

Lietotnes paraksts tiks salauzts, ja .apk tiek kaut kā mainīts - neparakstītas lietotnes parasti nevar instalēt. Mēs varam iedomāties, ka uzbrucējs noņem, piemēram, licences pārbaudes kodu, lai iespējotu pilnas lietotnes funkcijas, nemaksājot. Bīstamāks piemērs būtu .apk mainīšana, lai likumīgā lietotnē iekļautu ļaunprātīgu programmatūru, lai iegūtu sensitīvus lietotāja datus. Lai mainītais .apk varētu instalēt, uzbrucējam tas ir jāatkāpjas.

jauns PiracyChecker (šis)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // Oriģinālais APK paraksts PRODUCTION versijai

...

.sākt();

ESI UZMANĪGS!! Jūsu lietotnes parakstu var iegūt, izmantojot metodi PiracyCheckerUtils. Pārliecinieties, vai esat parakstījis APK, izmantojot PRODUCTION atslēgu krātuvi (neizmantojot DEBUG) un instalējis versiju, kuru plānojat izplatīt. Pēc tam kopējiet ar šo metodi atgriezto parakstu konsolē un ielīmējiet .enableSigningCertificate (“YOUR_APK_SIGNATURE”)

// Šī metode konsolē izdrukās jūsu lietotnes parakstu

Log.e (“PARAKSTS”, PiracyCheckerUtils.getAPKSignature (šis));

Pārbaudiet instalētāju

Ja plānojat izplatīt lietotni tikai noteiktā veikalā, šī metode bloķēs lietotnes instalēšanu, izmantojot jebkuru citu veikalu.

Atbalstītie veikali: Google Play, Amazon App Store un Samsung Galaxy Apps.

jauns PiracyChecker (šis)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.sākt();

ESI UZMANĪGS!! Tas ir patiešām ierobežojošs paņēmiens, jo tas bloķēs jūsu lietotnes instalēšanu, izmantojot citu tirgu, vai tieši instalējot .apk ierīcē. Tas nav ieteicams vairumā gadījumu.

Pārbaudiet pirātu lietotņu izmantošanu

Ja vēlaties pārbaudīt, vai lietotājam ir instalētas pirātu lietotnes, varat izmantot šo kodu.

Tas pārbaudīs: Lucky Patcher, Uret Patcher, Freedom un CreeHack.

jauns PiracyChecker (šis)

.enableUnauthorizedAppsCheck ()

...

.sākt();

Jūs varat bloķēt lietotni pat tad, ja šīs pirātu lietotnes ir atinstalētas. Tas novērš lietotnes labošanu un pēc tam atinstalējiet pirātu lietotni, lai turpinātu lietot. Bibliotēka saglabās vērtību SharedPreference, lai uzzinātu, kad ir atrasta pirātu lietotne.

Ir divi veidi, kā to izdarīt:

Definējiet SharedPreferences un preferences nosaukumu, kur vēlaties saglabāt rezultātu.

jauns PiracyChecker (šis)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferences, “app_unauthorized”) // Mainiet “app_unauthorized” ar savu vērtību

...

.sākt();

Definējiet SharedPreferences nosaukumu un preferences nosaukumu, kurā vēlaties saglabāt rezultātu.

jauns PiracyChecker (šis)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (“license_preferences”, “app_unauthorized”) // Mainiet “license_preferences” un “app_unauthorized” ar savu vērtību

...

.sākt();

Pārbaudiet trešo pušu veikalu lietotņu izmantošanu

Ja vēlaties pārbaudīt, vai lietotājam ir instalētas trešo pušu veikalu lietotnes, varat izmantot šo kodu.

Tas pārbaudīs: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe un ACMarket.

jauns PiracyChecker (šis)

.enableStoresCheck ()

...

.sākt();

Pārbaudiet, vai lietotne ir atkļūdošanas versija

Ja jūsu lietotne darbojas emulatorā ārpus izstrādes procesa, tā norāda, ka lietotni mēģina analizēt kāds cits, nevis jūs.

jauns PiracyChecker (šis)

.enableDebugCheck ()

...

.sākt();

Pārbaudiet, vai lietotne tiek palaista emulatorā

Ārpus izstrādes ir maz ticams, ka jūsu lietotnei vajadzētu darboties emulatorā, un nav ieteicams izlaist lietotnes ar iespējotu atkļūdošanu, jo tas ļauj savienotajiem datoriem piekļūt lietotnei un atkļūdot to, izmantojot Android atkļūdošanas tiltu.

būla dziļums = nepatiesa;

jauns PiracyChecker (šis)

.enableEmulatorCheck (dziļi)

...

.sākt();

Piezīme: dziļais būla skaitlis liek bibliotēkai veikt papildu pārbaudes, lai noteiktu, vai ierīce ir emulators. Tas var izraisīt dīvainas avārijas, tāpēc esiet gudrs, to lietojot.

Saglabājiet licences pārbaudes rezultātu sadaļā SharedPreferences

Licences pārbaudes rezultāta saglabāšana ir noderīga, lai pārbaudītu licences statusu, vairākas reizes neizsaucot .start ().

Ir divi veidi, kā to izdarīt:

Definējiet SharedPreferences un preferences nosaukumu, kur vēlaties saglabāt rezultātu.

jauns PiracyChecker (šis)

.saveResultToSharedPreferences (preferences, “valid_license”) // Mainiet “valid_license” ar savu vērtību

...

.sākt();

Definējiet SharedPreferences nosaukumu un preferences nosaukumu, kurā vēlaties saglabāt rezultātu.

jauns PiracyChecker (šis)

.saveResultToSharedPreferences (“license_preferences”, “valid_license”) // Mainiet “licences_preferences” un “valid_license” ar savu vērtību

...

.sākt();

Pielāgojumi

Parādīt rezultātus dialoglodziņā vai jaunā darbībā

Ja licence nav derīga, ieteicams dialoglodziņa vietā parādīt jaunu darbību. Tādā veidā pārliecinieties, ka lietotnes galvenā darbība ir pabeigta.

Pēc noklusējuma tiks parādīts neatceļams dialoglodziņš.

jauns PiracyChecker (šis)

.display (Display.ACTIVITY)

...

.sākt();

Pēc noklusējuma parādītajā aktivitātē tiks izmantotas bibliotēkas krāsas. Lai lietotu pielāgotu primāro un primāro tumšo krāsu un noteiktu, vai darbībai ir jāparāda normāla vai gaiša statusa josla, izmantojiet:

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

Šim darbības saturam varat arī definēt pielāgotu izkārtojumu xml, izmantojot:

.withActivityLayout (R.layout.my_custom_layout)

Pielāgotu atzvanījumu izmantošana

Atzvana pievienošana veidotājam ļauj pielāgot to, kas notiks pēc licences pārbaudes, un pārvaldīt licences pārbaudes kļūdas, ja lietotājam nav atļauts lietot lietotni. Paturiet prātā, ka, izmantojot šo metodi jums jāapzinās lietotnes bloķēšana no nesankcionētiem lietotājiem .

Pēc noklusējuma bibliotēka parādīs neatceļamu dialogu, ja lietotājam nav atļauts lietot lietotni, pretējā gadījumā nekas nenotiks.

Izmantojiet veidotāju un pievienojiet:

.callback (jauns PiracyCheckerCallback () {

@ Pārvarēt

public void allow () {

// Dariet kaut ko, kad lietotājam ir atļauts izmantot lietotni

}

@ Pārvarēt

public void dontAllow (@NonNull PiracyCheckerError kļūda, @Nullable PirateApp lietotne) {

// Varat arī darīt kaut ko konkrētu, ja lietotājam nav atļauts lietot lietotni

// Vai arī pats pārvaldiet kļūdu, izmantojot parametru ‘error’ (pārbaudiet kļūdas vietnē {@link PiracyCheckerError}).

// Turklāt, ja esat iespējojis pirātu lietotņu un / vai trešo pušu veikalu pārbaudi, lietotnes parametrs

// ir ierīcē atrasta lietotne. Lietotne var būt nulle, un, ja tā ir nulle, tas nozīmē, ka netika atrasta neviena pirātu lietotne vai veikals,

// vai arī esat atspējojis šo lietotņu pārbaudi.

// Tas ļauj jums informēt lietotājus par iespējamiem iemesliem, kāpēc licence nav derīga.

}

@ Pārvarēt

public void onError (@NonNull PiracyCheckerError kļūda) {

// Šī metode nav jāievieš / jāpārņem, bet…

// Varat vai nu darīt kaut ko konkrētu, ja licences pārbaudes laikā rodas kļūda,

// Vai arī pats pārvaldiet kļūdu, izmantojot parametru ‘error’ (pārbaudiet kļūdas vietnē {@link PiracyCheckerError}).

}

})

Lasītas 6 minūtes