Hoe Android-ontwikkelaars hun apps kunnen beschermen tegen IAP-hackers

Deze handleiding is bedoeld voor ontwikkelaars van Android-apps die inkomsten uit IAP's verdienen en zichzelf willen beschermen tegen hackers en frauduleuze aankopen via hacktools. Er zijn verschillende bekende IAP-hacktools die ik hier niet zal vermelden, maar in feite verzenden deze tools valse aankoopbonnen naar uw app zodat de gebruiker kan genieten van gratis IAP's. Dit kan van alles zijn, van maandelijkse abonnementen tot in-game tokens.

Hoewel er altijd nieuwe versies van deze hacktools worden uitgebracht en het is erg belangrijk om op de hoogte te blijven van hun nieuwste updates en methoden, zijn er een paar dingen die u kunt doen om ervoor te zorgen dat uw apps niet worden gestolen. Het meest opvallende is dat je verschillende methoden voor IU-verificatie op de server moet inschakelen, die ik hieronder zal beschrijven.

Deze handleiding is niet bedoeld voor beginners, maar voor ervaren app-ontwikkelaars die de verschillende woorden in deze handleiding begrijpen.

Een Git Repo Plug-in gebruiken Specifiek voor dit doel:

PiracyChecker

Voeg de repository toe aan uw project build.gradle :

opslagplaatsen {

maven {

url https://jitpack.io

}

}

En voeg de bibliotheek toe aan je module build.gradle :

afhankelijkheden {

compileer 'com.github.javiersantos: PiracyChecker: 1.1'

}

aanbevelingen

  • Schakel ProGuard altijd in in uw productieversies.
  • PiracyChecker moet worden opgenomen in uw onCreate-methode om zo snel mogelijk te controleren op een geldige licentie.
  • Het wordt aanbevolen om een ​​nieuwe activiteit weer te geven in plaats van een dialoogvenster wanneer de licentie niet geldig is. Op deze manier zorgt u ervoor dat de hoofdactiviteit van de app is voltooid. Zie Resultaten weergeven in een dialoogvenster of een nieuwe activiteit.

Controleer Google Play Licensing (LVL)

Google Play biedt een licentieservice waarmee u het licentiebeleid voor apps die u publiceert op Google Play kunt afdwingen. Met Google Play-licentieverlening kan uw app Google Play opvragen om de licentiestatus voor de huidige gebruiker te verkrijgen.

Elke toepassing die u publiceert via Google Play, kan de Google Play Licensing-service gebruiken. Er is geen speciale account of registratie vereist.

nieuwe PiracyChecker (dit)

.enableGooglePlayLicensing (BASE_64_LICENSE_KEY)

.begin();

Om uw BASE64-licentiesleutel op te halen, moet uw app worden geüpload naar de Google Play-ontwikkelaarsconsole. Toegang tot uw app -> Services en API's.

Wanneer u Google Play-licenties gebruikt, moet u .destroy () aanroepen in de onDestroy () -methode van uw activiteit om te voorkomen dat meerdere exemplaren van de service worden uitgevoerd.

Controleer het handtekeningcertificaat van uw app (handtekening)

Ontwikkelaars moeten altijd toepassingen ondertekenen met hun persoonlijke sleutel / certificaat (opgenomen in een .keystore-bestand) voordat de app op gebruikersapparaten kan worden geïnstalleerd. Het ondertekeningscertificaat moet gedurende de hele levensduur van de app consistent blijven en heeft meestal een vervaldatum van 25 jaar.

De app-handtekening zal worden verbroken als de .apk op enigerlei wijze wordt gewijzigd - niet-ondertekende apps kunnen doorgaans niet worden geïnstalleerd. We kunnen ons voorstellen dat een aanvaller de code voor het controleren van licenties verwijdert om volledige app-functies in te schakelen zonder te betalen, bijvoorbeeld. Een gevaarlijker voorbeeld is het wijzigen van .apk om malware op te nemen in een legitieme app om gevoelige gebruikersgegevens te oogsten. Om de gewijzigde .apk te installeren, moet de aanvaller het ontslag nemen.

nieuwe PiracyChecker (dit)

.enableSigningCertificate (478yYkKAQF + KST8y4ATKvHkYibo =) // De oorspronkelijke APK-handtekening voor de PRODUCTIE-versie

.begin();

DOE VOORZICHTIG!! De handtekening van uw app kan worden opgehaald met behulp van een PiracyCheckerUtils-methode. Zorg ervoor dat u uw APK hebt ondertekend met uw PRODUCTIE-sleutelarchief (zonder de DEBUG-sleutel) en de versie die u wilt distribueren, hebt geïnstalleerd. Kopieer vervolgens de handtekening die door deze methode wordt geretourneerd op de console en plak deze in .enableSigningCertificate (YOUR_APK_SIGNATURE)

// Met deze methode wordt de handtekening van uw app in de console afgedrukt

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

Controleer het installatieprogramma

Als je alleen van plan bent om de app in een bepaalde winkel te distribueren, blokkeert deze techniek het installeren van de app met een andere winkel.

Ondersteunde winkels: Google Play, Amazon App Store en Samsung Galaxy Apps.

nieuwe PiracyChecker (dit)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

.enableInstallerId (InstallerID.GALAXY_APPS)

.begin();

DOE VOORZICHTIG!! Dit is een zeer beperkende techniek, omdat deze uw app zal blokkeren voor installatie op een andere markt of voor directe installatie van de .apk op het apparaat. Het wordt in de meeste gevallen niet aanbevolen.

Controleer het gebruik van piraten-apps

Als je wilt controleren of de gebruiker piraten-apps heeft geïnstalleerd, kun je deze code gebruiken.

Het controleert: Lucky Patcher, Uret Patcher, Freedom en CreeHack.

nieuwe PiracyChecker (dit)

.enableUnauthorizedAppsCheck ()

.begin();

Je kunt de app blokkeren, zelfs als deze illegale apps zijn verwijderd. Dit voorkomt dat de app wordt gepatcht en verwijdert vervolgens de piraten-app om uw app te blijven gebruiken. De bibliotheek zal een SharedPreference-waarde opslaan om te weten wanneer een piraten-app is gedetecteerd.

Er zijn twee manieren om dit te doen:

Definieer de SharedPreferences en de naam van de voorkeur waar u het resultaat wilt opslaan.

nieuwe PiracyChecker (dit)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferences, app_unauthorized) // Wijzig app_una geautoriseerd met uw eigen waarde

.begin();

Definieer de naam SharedPreferences en de naam van de voorkeur waar u het resultaat wilt opslaan.

nieuwe PiracyChecker (dit)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (license_preferences, app_unauthorized) // Change license_preferences en app_una geautoriseerd met uw eigen waarde

.begin();

Controleer het gebruik van winkel-apps van derden

Als u wilt controleren of de gebruiker winkels van derden heeft geïnstalleerd, kunt u deze code gebruiken.

Het zal controleren op: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe en ACMarket.

nieuwe PiracyChecker (dit)

.enableStoresCheck ()

.begin();

Controleer of app een debug-build is

Als uw app buiten het ontwikkelingsproces op een emulator wordt uitgevoerd, geeft dit een indicatie dat iemand anders dan u de app probeert te analyseren.

nieuwe PiracyChecker (dit)

.enableDebugCheck ()

.begin();

Controleer of de app wordt uitgevoerd in een emulator

Buiten de ontwikkeling is het onwaarschijnlijk dat uw app op een emulator draait en het vrijgeven van apps waarvoor debuggable is ingeschakeld, is ontmoedigd omdat hiermee verbonden computers toegang hebben tot de app en debuggen via de Android Debug Bridge.

boolean deep = false;

nieuwe PiracyChecker (dit)

.enableEmulatorCheck (diep)

.begin();

Opmerking: de deep boolean maakt dat de bibliotheek extra controles uitvoert om te detecteren of het apparaat een emulator is of niet. Het kan tot enkele rare crashes leiden, dus wees verstandig wanneer u het gebruikt.

Sla het resultaat van de licentiecontrole op in SharedPreferences

Het opslaan van het resultaat van de licentiecontrole is handig om de licentiestatus te controleren zonder .start () meerdere keren te bellen.

Er zijn twee manieren om dit te doen:

Definieer de SharedPreferences en de naam van de voorkeur waar u het resultaat wilt opslaan.

nieuwe PiracyChecker (dit)

.saveResultToSharedPreferences (preferences, valid_license) // Wijzig valid_license met uw eigen waarde

.begin();

Definieer de naam SharedPreferences en de naam van de voorkeur waar u het resultaat wilt opslaan.

nieuwe PiracyChecker (dit)

.saveResultToSharedPreferences (license_preferences, valid_license) // Verander license_preferences en valid_license met uw eigen waarde

.begin();

aanpassingen

Geef resultaten weer in een dialoogvenster of een nieuwe activiteit

Het wordt aanbevolen om een ​​nieuwe activiteit weer te geven in plaats van een dialoogvenster wanneer de licentie niet geldig is. Op deze manier zorgt u ervoor dat de hoofdactiviteit van de app is voltooid.

Standaard wordt een niet-opzegbaar dialoogvenster weergegeven.

nieuwe PiracyChecker (dit)

.display (Display.ACTIVITY)

.begin();

Standaard gebruikt de weergegeven activiteit de bibliotheekkleuren. Als u een aangepaste primaire en primaire donkere kleur wilt toepassen en wilt definiëren of de activiteit een normale of lichte statusbalk moet weergeven, gebruikt u:

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

U kunt ook een aangepaste opmaak xml definiëren voor deze activiteitsinhoud, met behulp van:

.withActivityLayout (R.layout.my_custom_layout)

Aangepaste callbacks gebruiken

Door een callback aan de builder toe te voegen, kunt u aanpassen wat er gebeurt wanneer de licentie is gecontroleerd en de fouten in de licentiecontrole beheren als de gebruiker de app niet mag gebruiken. Houd er rekening mee dat wanneer u deze methode gebruikt, u zich ervan bewust moet zijn dat de app wordt geblokkeerd door onbevoegde gebruikers .

Standaard zal de bibliotheek een niet-annuleerbaar dialoogvenster weergeven als de gebruiker de app niet mag gebruiken, anders gebeurt er niets.

Gebruik de builder en voeg het volgende toe:

.callback (nieuwe PiracyCheckerCallback () {

@ Override

openbare ongeldige toestemming () {

// Doe iets wanneer de gebruiker de app mag gebruiken

}

@ Override

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

// U kunt iets specifieks doen wanneer de gebruiker de app niet mag gebruiken

// Of beheer de fout zelf met behulp van de parameter 'error' (Controleer fouten bij {@link PiracyCheckerError}).

// Als u bovendien de controle van piraten-apps en / of winkels van derden inschakelt, is de parameter 'app'

// is de app die op het apparaat is gedetecteerd. App kan null zijn, en wanneer null, betekent dit dat er geen illegale app of winkel is gevonden,

// of u hebt het vinkje voor die apps uitgeschakeld.

// Hiermee kunt u gebruikers de mogelijke redenen laten waarom de licentie ongeldig is.

}

@ Override

public void onError (@NonNull PiracyCheckerError error) {

// Deze methode hoeft niet te worden geïmplementeerd / overschreven maar

// U kunt iets specifieks doen wanneer er een fout optreedt tijdens het controleren van de licentie,

// Of beheer de fout zelf met behulp van de parameter 'error' (Controleer fouten bij {@link PiracyCheckerError}).

}

})

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

Facebook Twitter Google Plus Pinterest