Hur Android-utvecklare kan skydda sina appar från IAP-hackare
Den här guiden är för Android-apputvecklare som tjänar inkomster från IAP, och vill skydda sig från hackare och bedrägliga inköp via hackverktyg. Det finns flera kända IAP-hackverktyg där ute, som jag inte kommer att lista här, men i princip skickar dessa verktyg falska köpinkomster till din app för att tillåta användaren att njuta av gratis IAP-filer. Detta kan vara allt från månatliga prenumerationer till in-game tokens.
Medan nya versioner av dessa hackverktyg alltid släpps, och noggrannhet med att hålla sig med medvetna om de senaste uppdateringarna och metoderna är mycket viktigt, finns det några saker du kan göra för att skydda dina Apps-IAP-filer från att bli stulna. Mest viktigt måste du aktivera flera metoder för server-sida IAP-verifiering, som jag kommer att beskriva nedan.
Denna guide är inte avsedd för nybörjare, men erfarna apputvecklare som kommer att förstå olika lingo i den här guiden.
Använda en Git Repo-plugin Specifikt för detta ändamål:
PiracyChecker
Lägg till förvaret till ditt projekt build.gradle :
repositories {
maven {
url https://jitpack.io
}
}
Och lägg till biblioteket i din modul build.gradle :
beroenden {
kompilera "com.github.javiersantos: PiracyChecker: 1.1 '
}
rekommendationer
- Aktivera alltid ProGuard i dina produktionsutgåvor.
- PiracyChecker ska inkluderas i din onCreate-metod för att kontrollera om en giltig licens så snart som möjligt.
- Det rekommenderas att visa en ny aktivitet i stället för en dialog när licensen inte är giltig. På detta sätt ser du till att appens huvudaktivitet är klar. Se Visa resultat i en dialog eller en ny aktivitet.
Verifiera Google Play Licensing (LVL)
Google Play erbjuder en licensgivningstjänst som låter dig tillämpa licenspolicyer för program som du publicerar på Google Play. Med Google Play-licensiering kan din ansökan fråga Google Play för att få licensstatus för den nuvarande användaren.
Alla program som du publicerar via Google Play kan använda Google Play Licensing-tjänsten. Inget speciellt konto eller registrering behövs.
ny PiracyChecker (detta)
.enableGooglePlayLicensing (BASE_64_LICENSE_KEY)
.Start();
För att hämta din BASE64-licensnyckel måste din app laddas upp till utvecklarkonsolen i Google Play. Då får du tillgång till din app -> Tjänster och API: er.
När du använder Google Play Licensing bör du ringa .destroy () i metoden onDestroy () i din aktivitet för att undvika flera instanser av tjänsten som körs.
Verifiera appens signeringscertifikat (signatur)
Utvecklare måste alltid signera program med sin privata nyckel / certifikat (finns i en .keystore-fil) innan appen kan installeras på användarenheter. Signeringscertifikatet måste vara konsekvent under hela appens livslängd och har normalt ett utgångsdatum på 25 år.
App-signaturen kommer att brytas om .apk ändras på något sätt - unsigned apps kan inte typiskt installeras. Vi kan tänka oss att en angripare tar bort licenskontrollkoden för att aktivera fullständiga appfunktioner utan att exempelvis betala. Ett mer farligt exempel skulle vara att ändra .apk för att inkludera skadlig kod i en legitim app för att skörda känsliga användardata. För att den ändrade .apk ska installeras måste angriparen avgå det.
ny PiracyChecker (detta)
.enableSigningCertificate (478yYkKAQF + KST8y4ATKvHkYibo =) // Den ursprungliga APK-signaturen för PRODUKTIONS-versionen
.Start();
VAR FÖRSIKTIG!! Din appsignatur kan hämtas med en PiracyCheckerUtils-metod. Se till att du har skrivit in din APK med din PRODUKTION-nyckelbutik (använder inte DEBUG-en) och installerat den version du planerar att distribuera. Kopiera sedan signaturen som returneras med denna metod på konsolen och klistra in i .enableSigningCertificate (YOUR_APK_SIGNATURE)
// Den här metoden kommer att skriva ut din appsignatur i konsolen
Log.e (SIGNATURE, PiracyCheckerUtils.getAPKSignature (this));
Verifiera installationsprogrammet
Om du bara planerar att distribuera appen på en viss butik, kommer den här tekniken att blockera från att installera appen med någon annan butik.
Stödda butiker: Google Play, Amazon App Store och Samsung Galaxy Apps.
ny PiracyChecker (detta)
.enableInstallerId (InstallerID.GOOGLE_PLAY)
.enableInstallerId (InstallerID.AMAZON_APP_STORE)
PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka här.enableInstallerId (InstallerID.GALAXY_APPS)
.Start();
VAR FÖRSIKTIG!! Det här är en väldigt restriktiv teknik eftersom det kommer att blockera din app från att installeras med en annan marknad eller direkt installera .apk på enheten. Det rekommenderas inte för de flesta fall.
Verifiera användningen av piratprogram
Om du vill kontrollera om användaren har installerat piratprogram, kan du använda den här koden.
Det kommer att checka efter: Lucky Patcher, Uret Patcher, Freedom och CreeHack.
ny PiracyChecker (detta)
.enableUnauthorizedAppsCheck ()
.Start();
Du kan blockera appen även när den här piratappen har avinstallerats. Detta förhindrar appen att patchas och sedan avinstallera piratappen för att fortsätta använda din app. Biblioteket sparar ett SharedPreference-värde för att veta när en piratapp har upptäckts.
Det finns två sätt att göra detta:
Definiera SharedPreferences och namnet på inställningen där du vill spara resultatet.
ny PiracyChecker (detta)
.enableUnauthorizedAppsCheck ()
.blockIfUnauthorizedAppUninstalled (preferenser, app_unauthorized) // Ändra app_unauthorized med ditt eget värde
.Start();
Ange namnet SharedPreferences och namnet på inställningen där du vill spara resultatet.
ny PiracyChecker (detta)
.enableUnauthorizedAppsCheck ()
.blockIfUnauthorizedAppUninstalled (license_preferences, app_unauthorized) // Ändra licens_preferences och app_unauthorized med ditt eget värde
.Start();
Verifiera användningen av tredje parts butiksprogram
Om du vill kontrollera om användaren har butiksappar för tredje part installerad kan du använda den här koden.
Det kommer att kontrollera efter: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe och ACMarket.
ny PiracyChecker (detta)
.enableStoresCheck ()
.Start();
Verifiera om appen är en debug-byggnad
Om din app körs på en emulator utanför utvecklingsprocessen ger det en indikation på att någon annan än dig försöker analysera appen.
ny PiracyChecker (detta)
.enableDebugCheck ()
.Start();
Verifiera om app körs i en emulator
Utanför utveckling är det osannolikt att din app ska köras på en emulator och att släppa appar med debuggable enabled är avskräckt eftersom det tillåter anslutna datorer att komma åt och felsöka appen via Android Debug Bridge.
booleskt djup = false;
ny PiracyChecker (detta)
.enableEmulatorCheck (djup)
.Start();
Obs! Den djupa booleska gör biblioteket extra kontroller för att upptäcka om enheten är en emulator eller ej. Det kan leda till några konstiga kraschar, så var klok när du använder den.
Spara resultatet av licenskontrollen i SharedPreferences
Att spara resultatet av licenskontrollen är användbart för att kontrollera licensstatusen utan att anropa .start () flera gånger.
Det finns två sätt att göra detta:
Definiera SharedPreferences och namnet på inställningen där du vill spara resultatet.
ny PiracyChecker (detta)
.saveResultToSharedPreferences (preferences, valid_license) // Ändra valid_license med ditt eget värde
.Start();
Ange namnet SharedPreferences och namnet på inställningen där du vill spara resultatet.
ny PiracyChecker (detta)
.saveResultToSharedPreferences (license_preferences, valid_license) // Ändra licens_preferences och valid_license med ditt eget värde
.Start();
anpassningar
Visa resultat i en dialog eller en ny aktivitet
Det rekommenderas att visa en ny aktivitet i stället för en dialog när licensen inte är giltig. På detta sätt ser du till att appens huvudaktivitet är klar.
Som standard visas en icke-avbrytbar dialog.
ny PiracyChecker (detta)
.display (Display.ACTIVITY)
.Start();
Som standard använder den aktiva aktiviteten bibliotekets färger. Om du vill tillämpa en anpassad primär och primär mörk färg och för att definiera om aktiviteten ska visa normal eller ljus statusfält, använd:
.withActivityColors (R.color.colorPrimary, R.color.colorPrimaryDark, withLightStatusBar)
Du kan också definiera en anpassad layout xml för det här aktivitetsinnehållet med:
.withActivityLayout (R.layout.my_custom_layout)
Använda anpassade återuppringningar
Genom att lägga till en återuppringning till byggaren kan du anpassa vad som händer när licensen har kontrollerats och hantera licenskontrollfel om användaren inte får använda appen. Tänk på att när du använder den här metoden måste du vara medveten om att blockera appen från obehöriga användare .
Som standard visar biblioteket en icke-annullerbar dialog om användaren inte får använda appen, annars kommer ingenting att hända.
Använd byggaren och lägg till följande:
.Callback (ny PiracyCheckerCallback () {
@Åsidosätta
offentligt ogiltigt tillstånd () {
// Gör något när användaren får använda appen
}
@Åsidosätta
offentligt tomrum dontAllow (@NonNull PiracyCheckerError fel, @Nullable PirateApp app) {
// Du kan antingen göra något specifikt när användaren inte får använda appen
// Eller hantera felet med parametern "Fel" själv (Kontrollera fel vid {@link PiracyCheckerError}).
// Dessutom, om du aktiverade kontrollen av piratprogram och / eller tredjepartsaffärer, kommer app-parametern
// är appen som har upptäckts på enheten. Appen kan vara null, och när null betyder det ingen piratapp eller butik hittades,
// eller du inaktiverade kontrollen för dessa appar.
// Detta låter dig låta användarna få reda på de möjliga orsakerna till varför licens är ogiltig.
}
@Åsidosätta
offentligt ogiltigt onError (@NonNull PiracyCheckerError error) {
// Denna metod behöver inte implementeras / överskridas men
// Du kan antingen göra något specifikt när ett fel inträffar när du kontrollerar licensen,
// Eller hantera felet med parametern "Fel" själv (Kontrollera fel vid {@link PiracyCheckerError}).
}
})
PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka här