Kako programeri Androida mogu zaštititi svoje aplikacije od IAP hakera



Isprobajte Naš Instrument Za Uklanjanje Problema

Ovaj je vodič namijenjen programerima aplikacija za Android koji zarađuju od IAP-a i žele se zaštititi od hakera i lažnih kupnji pomoću hakerskih alata. Postoji nekoliko dobro poznatih alata za hakiranje IAP-a koje ovdje neću nabrajati, ali u osnovi ti alati šalju lažne račune za kupnju u vašu aplikaciju kako bi korisniku omogućili uživanje u besplatnim IAP-ovima. To može biti sve, od mjesečnih pretplata do žetona u igri.





Iako se nove verzije ovih alata za hakiranje uvijek objavljuju, a marljivost u praćenju njihovih najnovijih ažuriranja i metoda vrlo je važna, postoji nekoliko stvari koje možete učiniti kako biste zaštitili IAP-ove svojih aplikacija od krađe. Najvažnije je da trebate omogućiti nekoliko metoda provjere IAP-a na poslužitelju, što ću detaljno objasniti u nastavku.



Ovaj vodič nije namijenjen početnicima, već iskusnim programerima aplikacija koji će razumjeti različite jezične izraze u ovom vodiču.

Upotreba dodatka Git Repo, posebno u tu svrhu:

PiracyChecker

Dodajte spremište u svoj projekt graditi.gradle :



spremišta {

maven {

url 'https://jitpack.io'

}

}

I dodajte knjižnicu u svoj modul graditi.gradle :

ovisnosti {

sastaviti ‘com.github.javiersantos: PiracyChecker: 1.1’

}

Preporuke

  • Uvijek omogućite ProGuard u svojim produkcijskim izdanjima.
  • PiracyChecker bi trebao biti uključen u vašu metodu onCreate kako biste što prije provjerili valjanu licencu.
  • Preporučuje se prikazivanje nove aktivnosti umjesto dijaloškog okvira kada licenca nije važeća. Na ovaj način osiguravate da je glavna aktivnost aplikacije završena. Pogledajte “ Prikaz rezultata u dijaloškom okviru ili novoj aktivnosti '.

Potvrdite licenciranje Google Playa (LVL)

Google Play nudi uslugu licenciranja koja vam omogućuje provođenje pravila licenciranja za aplikacije koje objavite na Google Playu. Pomoću licenciranja za Google Play vaša aplikacija može zatražiti Google Play da bi dobio status licenciranja za trenutnog korisnika.

Bilo koja aplikacija koju objavite putem Google Playa može koristiti uslugu licenciranja Google Play. Nije potreban poseban račun ili registracija.

novi PiracyChecker (ovo)

.enableGooglePlayLicensing (“BASE_64_LICENSE_KEY”)

...

.početak();

Da biste dohvatili svoj BASE64 licenčni ključ, vaša aplikacija mora se prenijeti na Konzola za razvojne programere Google Playa . Zatim pristupite svojoj aplikaciji -> Usluge i API-ji.

Kada koristite licenciranje Google Playa, trebate nazvati .destroy () u metodi onDestroy () svoje aktivnosti kako biste izbjegli višestruku instalaciju usluge.

Potvrdite potvrdu o potpisivanju aplikacije (potpis)

Programeri moraju uvijek potpisati programe svojim privatnim ključem / certifikatom (koji se nalaze u .keystore datoteci) prije nego što se aplikacija može instalirati na korisničke uređaje. Potvrda o potpisivanju mora ostati dosljedna tijekom cijelog vijeka trajanja aplikacije i obično ima datum isteka od 25 godina.

Potpis aplikacije slomit će se ako je .apk promijenjen na bilo koji način - nepotpisane aplikacije obično se ne mogu instalirati. Možemo zamisliti napadača kako uklanja kôd za provjeru licence kako bi omogućio cjelovite značajke aplikacije, na primjer bez plaćanja. Opasniji primjer bila bi promjena .apk-a tako da u legitimnu aplikaciju uključi malware za prikupljanje osjetljivih korisničkih podataka. Da bi se promijenjeni .apk mogao instalirati, napadač mora dati ostavku.

novi PiracyChecker (ovo)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // Izvorni APK potpis za verziju PRODUKCIJE

...

.početak();

BUDI OPREZAN!! Potpis vaše aplikacije može se dohvatiti metodom PiracyCheckerUtils. Provjerite jeste li potpisali svoj APK pomoću svoje PRODUKCIJSKE pohrane ključeva (ne koristeći onu DEBUG) i instalirali verziju koju planirate distribuirati. Zatim kopirajte potpis vraćen ovom metodom na konzolu i zalijepite u .enableSigningCertificate (“YOUR_APK_SIGNATURE”)

// Ova metoda ispisat će potpis aplikacije u konzoli

Log.e („POTPIS“, PiracyCheckerUtils.getAPKSignature (ovaj));

Provjerite instalacijski program

Ako aplikaciju namjeravate distribuirati samo u određenoj trgovini, ova će tehnika spriječiti instaliranje aplikacije putem bilo koje druge trgovine.

Podržane trgovine: Google Play, Amazon App Store i Samsung Galaxy Apps.

novi PiracyChecker (ovo)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.početak();

BUDI OPREZAN!! Ovo je stvarno restriktivna tehnika jer će blokirati instaliranje vaše aplikacije pomoću drugog tržišta ili izravno instaliranje .apk na uređaj. Ne preporučuje se za većinu slučajeva.

Potvrdite upotrebu piratskih aplikacija

Ako želite provjeriti ima li na korisniku instalirane piratske aplikacije, možete upotrijebiti ovaj kod.

Provjerit će: Lucky Patcher, Uret Patcher, Freedom i CreeHack.

novi PiracyChecker (ovo)

.enableUnauthorizedAppsCheck ()

...

.početak();

Aplikaciju možete blokirati čak i kad je ova piratska aplikacija deinstalirana. To sprječava zakrpanje aplikacije, a zatim deinstaliranje piratske aplikacije kako biste nastavili koristiti vašu aplikaciju. Knjižnica će spremiti vrijednost SharedPreference kako bi znala kada je otkrivena piratska aplikacija.

Postoje dva načina za to:

Definirajte SharedPreferences i naziv preferencije na koju želite spremiti rezultat.

novi PiracyChecker (ovo)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (postavke, “app_unauthorized”) // Promijenite “app_unauthorized” s vlastitom vrijednošću

...

.početak();

Definirajte naziv SharedPreferences i naziv preferencije u koju želite spremiti rezultat.

novi PiracyChecker (ovo)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (“licence_preferences”, “app_unauthorized”) // Promijenite “license_preferences” i “app_unauthorized” s vlastitom vrijednošću

...

.početak();

Potvrdite upotrebu aplikacija nezavisnih trgovina

Ako želite provjeriti ima li instalirane aplikacije trgovine nezavisnih proizvođača, možete upotrijebiti ovaj kôd.

Provjerit će: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe i ACMarket.

novi PiracyChecker (ovo)

.enableStoresCheck ()

...

.početak();

Provjerite je li aplikacija izrada za uklanjanje pogrešaka

Ako se vaša aplikacija izvodi na emulatoru izvan procesa razvoja, to pokazuje da netko drugi osim vas pokušava analizirati aplikaciju.

novi PiracyChecker (ovo)

.enableDebugCheck ()

...

.početak();

Provjerite pokreće li se aplikacija u emulatoru

Izvan razvoja, malo je vjerojatno da bi se vaša aplikacija trebala izvoditi na emulatoru, a puštanje aplikacija s omogućenom otklanjanjem pogrešaka ne preporučuje se jer omogućuje povezanim računalima pristup i otklanjanje pogrešaka u aplikaciji putem Android Debug Bridgea.

boolean deep = false;

novi PiracyChecker (ovo)

.enableEmulatorCheck (duboko)

...

.početak();

Bilješka: deep boolean s make knjižnica vrši dodatne provjere da bi otkrio je li uređaj emulator ili nije. To bi moglo dovesti do nekih čudnih padova, pa budite mudri kada ga koristite.

Spremite rezultat provjere licence u SharedPreferences

Spremanje rezultata provjere licence korisno je za provjeru statusa licence bez višestrukog poziva .start ().

Postoje dva načina za to:

Definirajte SharedPreferences i naziv preferencije na koju želite spremiti rezultat.

novi PiracyChecker (ovo)

.saveResultToSharedPreferences (preference, “valid_license”) // Promijenite “valid_license” s vlastitom vrijednošću

...

.početak();

Definirajte naziv SharedPreferences i naziv preferencije u koju želite spremiti rezultat.

novi PiracyChecker (ovo)

.saveResultToSharedPreferences (“licence_preferences”, “valid_license”) // Promijenite “license_preferences” i “valid_license” s vlastitom vrijednošću

...

.početak();

Prilagođavanja

Prikaz rezultata u dijaloškom okviru ili novoj aktivnosti

Preporučuje se prikazivanje nove aktivnosti umjesto dijaloškog okvira kada licenca nije važeća. Na ovaj način osiguravate da je glavna aktivnost aplikacije završena.

Prema zadanim postavkama prikazat će se dijaloški okvir koji se ne može otkazati.

novi PiracyChecker (ovo)

.display (Display.ACTIVITY)

...

.početak();

Prema zadanim postavkama, prikazana Aktivnost upotrebljavat će boje knjižnice. Da biste primijenili prilagođenu primarnu i primarnu tamnu boju i definirali treba li aktivnost prikazivati ​​normalnu ili svijetlu traku statusa, upotrijebite:

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

Također možete definirati prilagođeni izgled xml za ovaj sadržaj aktivnosti, koristeći:

.withActivityLayout (R.layout.my_custom_layout)

Korištenje prilagođenih povratnih poziva

Dodavanje povratnog poziva u graditelj omogućuje vam prilagodbu onoga što će se dogoditi kada je licenca provjerena i upravljanje pogreškama provjere licence ako korisnik ne smije koristiti aplikaciju. Imajte na umu da kada koristite ovu metodu morate biti svjesni blokiranja aplikacije od neovlaštenih korisnika .

Prema zadanim postavkama, knjižnica će prikazati dijaloški okvir koji se ne može otkazati ako korisnik ne smije koristiti aplikaciju, inače se ništa neće dogoditi.

Upotrijebite graditelj i dodajte sljedeće:

.callback (novi PiracyCheckerCallback () {

@Preuzmi

javna praznina allow () {

// Učinite nešto kad korisnik može koristiti aplikaciju

}

@Preuzmi

javna praznina dontAllow (pogreška @NonNull PiracyCheckerError, aplikacija @Nullable PirateApp) {

// Možete učiniti nešto određeno kada korisnik ne smije koristiti aplikaciju

// Ili sami upravljajte pogreškom, koristeći parametar 'error' (Provjerite pogreške na {@link PiracyCheckerError}).

// Osim toga, ako ste omogućili provjeru piratskih aplikacija i / ili trgovina nezavisnih proizvođača, parametar 'app'

// je aplikacija koja je otkrivena na uređaju. Aplikacija može biti null, a kada je null, znači da nije pronađena nijedna piratska aplikacija ili trgovina,

// ili ste onemogućili provjeru za te aplikacije.

// To vam omogućuje da korisnike obavijestite o mogućim razlozima zbog kojih je licenca nevaljana.

}

@Preuzmi

javna praznina onError (pogreška @NonNull PiracyCheckerError) {

// Ova metoda nije potrebna za primjenu / poništavanje, ali ...

// Možete učiniti nešto određeno kada se dogodi pogreška tijekom provjere licence,

// Ili sami upravljajte pogreškom, koristeći parametar 'error' (Provjerite pogreške na {@link PiracyCheckerError}).

}

})

6 minuta čitanja