Hvordan Android-udviklere kan beskytte deres apps mod IAP-hackere



Prøv Vores Instrument Til At Fjerne Problemer

Denne vejledning er til Android-appudviklere, der tjener indtægter fra IAP'er og ønsker at beskytte sig mod hackere og falske køb via hackingsværktøjer. Der er flere kendte IAP-hackingsværktøjer derude, som jeg ikke vil nævne her, men dybest set sender disse værktøjer falske købskvitteringer til din app, så brugeren kan nyde gratis IAP'er. Dette kan være alt fra månedlige abonnementer til tokens i spillet.





Mens nye versioner af disse hackingsværktøjer altid frigives, og omhu i at være opmærksom på deres nyeste opdateringer og metoder er meget vigtig, er der et par ting, du kan gøre for at beskytte dine apps IAP'er mod at blive stjålet. Navnlig skal du aktivere flere metoder til IAP-verifikation på serversiden, som jeg vil redegøre for nedenfor.



Denne guide er ikke beregnet til nybegyndere, men erfarne appudviklere, der vil forstå de forskellige sprog i denne vejledning.

Brug af en Git Repo Plug-in specifikt til dette formål:

PiracyChecker

Føj lageret til dit projekt build.gradle :



opbevaringssteder {

maven {

url “https://jitpack.io”

}

}

Og tilføj biblioteket til dit modul build.gradle :

afhængigheder {

kompilér 'com.github.javiersantos: PiracyChecker: 1.1'

}

Anbefalinger

  • Aktivér altid ProGuard i dine produktionsudgivelser.
  • PiracyChecker bør medtages i din onCreate-metode for at kontrollere en gyldig licens så hurtigt som muligt.
  • Det anbefales at vise en ny aktivitet i stedet for en dialog, når licensen ikke er gyldig. På denne måde sørger du for, at appens hovedaktivitet er afsluttet. Se ' Vis resultater i en dialog eller en ny aktivitet '.

Bekræft Google Play Licensing (LVL)

Google Play tilbyder en licenseringstjeneste, der giver dig mulighed for at håndhæve licenspolitikker for applikationer, som du offentliggør på Google Play. Med Google Play Licensing kan din applikation forespørge på Google Play for at opnå licensstatus for den aktuelle bruger.

Enhver applikation, som du udgiver via Google Play, kan bruge Google Play Licensing-tjenesten. Ingen særlig konto eller registrering er nødvendig.

ny PiracyChecker (dette)

.enableGooglePlayLicensing (“BASE_64_LICENSE_KEY”)

...

.Start();

For at hente din BASE64 licensnøgle skal din app uploades til Google Play-udviklerkonsol . Derefter få adgang til din app -> Tjenester og API'er.

Når du bruger Google Play Licensing, skal du ringe til .destroy () i metoden onDestroy () for din aktivitet for at undgå flere forekomster af den kørende tjeneste.

Bekræft din apps underskriftscertifikat (signatur)

Udviklere skal altid underskrive applikationer med deres private nøgle / certifikat (indeholdt i en .keystore-fil), før appen kan installeres på brugerenheder. Signeringscertifikatet skal forblive ens i hele appens levetid og typisk have en udløbsdato på 25 år.

Appens signatur brydes, hvis .apk ændres på nogen måde - usignerede apps kan typisk ikke installeres. Vi kan forestille os, at en hacker fjerner licens-kontrolkode for at aktivere fulde appfunktioner uden at betale, for eksempel. Et mere farligt eksempel ville være at ændre .apk for at inkludere malware i en legitim app for at høste følsomme brugerdata. For at den ændrede .apk skal installeres, skal angriberen fratræde den.

ny PiracyChecker (dette)

.enableSigningCertificate (“478yYkKAQF + KST8y4ATKvHkYibo =”) // Den originale APK-signatur til PRODUCTION-versionen

...

.Start();

VÆR FORSIGTIG!! Din appsignatur kan hentes ved hjælp af en PiracyCheckerUtils-metode. Sørg for, at du har underskrevet din APK ved hjælp af din PRODUCTION-nøglelager (ikke bruger DEBUG-en) og installeret den version, du planlægger at distribuere. Kopier derefter signaturen, der returneres med denne metode, på konsollen, og indsæt i .enableSigningCertificate (“YOUR_APK_SIGNATURE”)

// Denne metode udskriver din apps signatur i konsollen

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

Bekræft installationsprogrammet

Hvis du kun planlægger at distribuere appen i en bestemt butik, blokerer denne teknik for at installere appen i en anden butik.

Understøttede butikker: Google Play, Amazon App Store og Samsung Galaxy Apps.

ny PiracyChecker (dette)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.Start();

VÆR FORSIGTIG!! Dette er en meget begrænsende teknik, da den blokerer din app for at blive installeret ved hjælp af et andet marked eller direkte installere .apk på enheden. Det anbefales ikke i de fleste tilfælde.

Bekræft brugen af ​​piratapps

Hvis du vil kontrollere, om brugeren har installeret piratapps, kan du bruge denne kode.

Det vil kontrollere for: Lucky Patcher, Uret Patcher, Freedom og CreeHack.

ny PiracyChecker (dette)

.enableUnauthorizedAppsCheck ()

...

.Start();

Du kan blokere appen, selv når denne piratapps er blevet afinstalleret. Dette forhindrer, at appen patches, og afinstaller derefter piratappen for at fortsætte med at bruge din app. Biblioteket gemmer en SharedPreference-værdi for at vide, hvornår en piratapp er blevet fundet.

Der er to måder at gøre dette på:

Definer de delte præferencer og navnet på den præference, hvor du vil gemme resultatet.

ny PiracyChecker (dette)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (præferencer, 'app_unauthorized') // Skift 'app_unauthorized' med din egen værdi

...

.Start();

Definer navnet SharedPreferences og navnet på den præference, hvor du vil gemme resultatet.

ny PiracyChecker (dette)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled ('licens_preferences', 'app_unauthorized') // Skift 'licens_preferences' og 'app_unauthorized' med din egen værdi

...

.Start();

Bekræft brugen af ​​tredjepartsbutik-apps

Hvis du vil kontrollere, om brugeren har installeret tredjepartsapps, kan du bruge denne kode.

Det kontrollerer for: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe og ACMarket.

ny PiracyChecker (dette)

.enableStoresCheck ()

...

.Start();

Kontroller, om appen er en debug-build

Hvis din app kører på en emulator uden for udviklingsprocessen, giver det en indikation af, at en anden end dig forsøger at analysere appen.

ny PiracyChecker (dette)

.enableDebugCheck ()

...

.Start();

Kontroller, om appen køres i en emulator

Uden for udvikling er det usandsynligt, at din app skal køre på en emulator, og det frarådes at frigive apps med debuggable aktiveret, da det giver tilsluttede computere adgang til og fejlretning af appen via Android Debug Bridge.

boolsk dyb = falsk;

ny PiracyChecker (dette)

.enableEmulatorCheck (dyb)

...

.Start();

Bemærk: den dybe booleske med får biblioteket til at foretage ekstra kontrol for at opdage, om enheden er en emulator eller ej. Det kan føre til nogle underlige nedbrud, så vær klog, når du bruger det.

Gem resultatet af licenskontrollen i SharedPreferences

At gemme resultatet af licenskontrollen er nyttigt til kontrol af licensstatus uden at ringe til .start () flere gange.

Der er to måder at gøre dette på:

Definer de delte præferencer og navnet på den præference, hvor du vil gemme resultatet.

ny PiracyChecker (dette)

.saveResultToSharedPreferences (præferencer, 'valid_license') // Skift 'valid_license' med din egen værdi

...

.Start();

Definer navnet SharedPreferences og navnet på den præference, hvor du vil gemme resultatet.

ny PiracyChecker (dette)

.saveResultToSharedPreferences (“licens_præferencer”, “valid_license”) // Skift “licens_preferences” og “valid_license” med din egen værdi

...

.Start();

Tilpasninger

Vis resultater i en dialog eller en ny aktivitet

Det anbefales at vise en ny aktivitet i stedet for en dialog, når licensen ikke er gyldig. På denne måde sørger du for, at appens hovedaktivitet er afsluttet.

Som standard vises en dialog, der ikke kan annulleres.

ny PiracyChecker (dette)

.display (Display.ACTIVITY)

...

.Start();

Som standard bruger den viste aktivitet biblioteksfarverne. For at anvende en brugerdefineret primær og primær mørk farve og til at definere, om aktiviteten skal vise normal eller lys statuslinje, skal du bruge:

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

Du kan også definere et brugerdefineret layout xml til dette aktivitetsindhold ved hjælp af:

.withActivityLayout (R.layout.my_custom_layout)

Brug af brugerdefinerede tilbagekald

Tilføjelse af et tilbagekald til bygherren giver dig mulighed for at tilpasse, hvad der vil ske, når licensen er blevet kontrolleret, og styre licenscheckfejlene, hvis brugeren ikke får lov til at bruge appen. Husk, at når du bruger denne metode du skal være opmærksom på at blokere appen fra uautoriserede brugere .

Som standard viser biblioteket en dialog, der ikke kan annulleres, hvis brugeren ikke har tilladelse til at bruge appen, ellers sker der intet.

Brug bygherren og tilføj følgende:

.callback (ny PiracyCheckerCallback () {

@Override

offentlig tomrum tillader () {

// Gør noget, når brugeren har tilladelse til at bruge appen

}

@Override

offentlig ugyldig dontAllow (@NonNull PiracyCheckerError-fejl, @Nullable PirateApp-app) {

// Du kan enten gøre noget specifikt, når brugeren ikke har tilladelse til at bruge appen

// Eller administrer fejlen ved hjælp af parameteren 'error' selv (Kontroller fejl på {@link PiracyCheckerError}).

// Hvis du derudover aktiverede kontrollen af ​​piratapps og / eller tredjepartsbutikker, er 'app' param

// er den app, der er fundet på enheden. Appen kan være nul, og når den er nul, betyder det, at der ikke blev fundet nogen piratapp eller butik,

// eller du deaktiverede checken for disse apps.

// Dette giver dig mulighed for at fortælle brugerne de mulige årsager til, at licensen er ugyldig.

}

@Override

offentlig ugyldighed onError (@NonNull PiracyCheckerError fejl) {

// Denne metode skal ikke implementeres / tilsidesættes, men ...

// Du kan enten gøre noget specifikt, når der opstår en fejl under kontrol af licensen,

// Eller administrer fejlen ved hjælp af parameteren 'error' selv (Kontroller fejl på {@link PiracyCheckerError}).

}

})

6 minutter læst