Com els desenvolupadors d'Android poden protegir les seves aplicacions dels pirates informàtics IAP



Proveu El Nostre Instrument Per Eliminar Problemes

Aquesta guia és per a desenvolupadors d'aplicacions d'Android que obtenen ingressos per IAP i volen protegir-se dels pirates informàtics i de les compres fraudulentes mitjançant eines de pirateria informàtica. Hi ha diverses eines de pirateria IAP conegudes, que no enumeraré aquí, però bàsicament aquestes eines envien rebuts de compra falsos a la vostra aplicació per permetre a l’usuari gaudir d’IAP gratuïts. Pot ser des de subscripcions mensuals fins a fitxes del joc.





Tot i que sempre es publiquen noves versions d’aquestes eines de pirateria informàtica, i és molt important que es mantingui al corrent de les seves darreres actualitzacions i mètodes, hi ha algunes coses que podeu fer per protegir els robatoris d’API de les vostres aplicacions. El més destacat és que heu d’habilitar diversos mètodes de verificació de la IAP del servidor, que detallaré a continuació.



Aquesta guia no està pensada per a principiants, sinó per a desenvolupadors d’aplicacions experimentats que podran entendre els diversos idiomes d’aquesta guia.

Utilitzar un complement Git Repo específicament per a aquest propòsit:

PiracyChecker

Afegiu el dipòsit al vostre projecte build.gradle :



repositoris {

maven {

URL 'https://jitpack.io'

}

}

I afegiu la biblioteca al vostre mòdul build.gradle :

dependències {

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

}

Recomanacions

  • Activeu sempre ProGuard a les vostres versions de producció.
  • PiracyChecker s’ha d’incloure al mètode onCreate per comprovar si hi ha una llicència vàlida el més aviat possible.
  • Es recomana mostrar una activitat nova en lloc d'un diàleg quan la llicència no sigui vàlida. D'aquesta manera, assegureu-vos que s'ha finalitzat l'activitat principal de l'aplicació. Vegeu “ Mostra els resultats en un diàleg o en una activitat nova '.

Verificar llicències de Google Play (LVL)

Google Play ofereix un servei de llicències que us permet aplicar polítiques de llicències per a les aplicacions que publiqueu a Google Play. Amb Google Play Licensing, la vostra aplicació pot consultar Google Play per obtenir l’estat de llicència de l’usuari actual.

Qualsevol aplicació que publiqueu a través de Google Play pot utilitzar el servei de llicències de Google Play. No cal cap compte ni registre especial.

nou PiracyChecker (això)

.enableGooglePlayLicensing ('BASE_64_LICENSE_KEY')

...

.començar();

Per recuperar la vostra clau de llicència BASE64, heu de penjar l'aplicació a Consola per a desenvolupadors de Google Play . A continuació, accediu a la vostra aplicació -> Serveis i API.

Quan utilitzeu Google Play Licensing, heu de trucar a .destroy () amb el mètode onDestroy () de la vostra activitat per evitar diverses instàncies del servei que s’executi.

Verifiqueu el certificat de signatura de l'aplicació (signatura)

Els desenvolupadors sempre han de signar aplicacions amb la seva clau / certificat privat (que es troba en un fitxer .keystore) abans que l’aplicació es pugui instal·lar als dispositius de l’usuari. El certificat de signatura ha de ser coherent durant tota la vida de l’aplicació i normalment ha de tenir una data de caducitat de 25 anys.

La signatura de l'aplicació es trencarà si el fitxer .apk es modifica d'alguna manera; normalment no es poden instal·lar aplicacions sense signar. Podem imaginar un atacant que elimina el codi de comprovació de llicències per habilitar les funcions completes de l'aplicació sense pagar, per exemple. Un exemple més perillós seria alterar el fitxer .apk per incloure programari maliciós en una aplicació legítima per obtenir dades sensibles dels usuaris. Per tal que s’instal·li l’apk modificat, l’atacant ha de renunciar-hi.

nou PiracyChecker (això)

.enableSigningCertificate ('478yYkKAQF + KST8y4ATKvHkYibo =') // La signatura original de l'APK per a la versió PRODUCTION

...

.començar();

VES AMB COMPTE!! La vostra signatura d'aplicació es pot recuperar mitjançant un mètode PiracyCheckerUtils. Assegureu-vos que hàgiu signat l'APK mitjançant el magatzem de claus PRODUCTION (sense utilitzar el DEBUG) i que hàgiu instal·lat la versió que teniu previst distribuir. A continuació, copieu la signatura retornada per aquest mètode a la consola i enganxeu-la a .enableSigningCertificate ('YOUR_APK_SIGNATURE')

// Aquest mètode imprimirà la signatura de la vostra aplicació a la consola

Log.e ('SIGNATURE', PiracyCheckerUtils.getAPKSignature (això));

Verifiqueu l’instal·lador

Si només teniu previst distribuir l'aplicació en una botiga concreta, aquesta tècnica bloquejarà la instal·lació de l'aplicació mitjançant qualsevol altra botiga.

Botigues compatibles: Google Play, Amazon App Store i Samsung Galaxy Apps.

nou PiracyChecker (això)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.començar();

VES AMB COMPTE!! Es tracta d’una tècnica realment restrictiva, ja que bloquejarà la vostra aplicació perquè no s’instal·li mitjançant un altre mercat o que instal·li directament el .apk al dispositiu. No es recomana en la majoria dels casos.

Verifiqueu l'ús d'aplicacions pirates

Si voleu comprovar si l’usuari té instal·lades aplicacions pirates, podeu utilitzar aquest codi.

Es comprovarà si hi ha: Lucky Patcher, Uret Patcher, Freedom i CreeHack.

nou PiracyChecker (això)

.enableUnauthorizedAppsCheck ()

...

.començar();

Podeu bloquejar l'aplicació fins i tot quan s'hagin desinstal·lat aquestes aplicacions pirates. Això impedeix que l'aplicació es pedaqui i desinstal·leu l'aplicació pirata per continuar utilitzant l'aplicació. La biblioteca desarà un valor de SharedPreference per saber quan s’ha detectat una aplicació pirata.

Hi ha dues maneres de fer-ho:

Definiu les SharedPreferences i el nom de la preferència on vulgueu desar el resultat.

nou PiracyChecker (això)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferències, 'app_unauthorized') // Canvieu 'app_unauthorized' amb el vostre propi valor

...

.començar();

Definiu el nom de SharedPreferences i el nom de la preferència on vulgueu desar el resultat.

nou PiracyChecker (això)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled ('license_preferences', 'app_unauthorized') // Canvieu 'license_preferences' i 'app_unauthorized' amb el vostre propi valor

...

.començar();

Verifiqueu l'ús d'aplicacions de botigues de tercers

Si voleu comprovar si l’usuari té instal·lades aplicacions de botigues de tercers, podeu utilitzar aquest codi.

Comprovarà si hi ha: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe i ACMarket.

nou PiracyChecker (això)

.enableStoresCheck ()

...

.començar();

Verifiqueu si l'aplicació és una compilació de depuració

Si la vostra aplicació s’executa en un emulador fora del procés de desenvolupament, indica que algú que no sigui tu intenta analitzar-la.

nou PiracyChecker (això)

.enableDebugCheck ()

...

.començar();

Verifiqueu si l'aplicació s'està executant en un emulador

Fora del desenvolupament, és poc probable que la vostra aplicació s’executi en un emulador i es desaconsella la publicació d’aplicacions amb la funció depurable, ja que permet que els equips connectats puguin accedir a l’aplicació i depurar-la mitjançant el pont de depuració d’Android.

booleà profund = fals;

nou PiracyChecker (això)

.enableEmulatorCheck (profund)

...

.començar();

Nota: el booleà profund fa que la biblioteca faci comprovacions addicionals per detectar si el dispositiu és un emulador o no. Pot provocar alguns estranys accidents, així que tingueu en compte que s’utilitzi.

Deseu el resultat de la comprovació de la llicència a SharedPreferences

Desar el resultat de la comprovació de la llicència és útil per comprovar l’estat de la llicència sense trucar a .start () diverses vegades.

Hi ha dues maneres de fer-ho:

Definiu les SharedPreferences i el nom de la preferència on vulgueu desar el resultat.

nou PiracyChecker (això)

.saveResultToSharedPreferences (preferències, 'valid_license') // Canvieu 'valid_license' amb el vostre propi valor

...

.començar();

Definiu el nom de SharedPreferences i el nom de la preferència on vulgueu desar el resultat.

nou PiracyChecker (això)

.saveResultToSharedPreferences ('license_preferences', 'valid_license') // Canvieu 'license_preferences' i 'valid_license' amb el vostre propi valor

...

.començar();

Personalitzacions

Mostra els resultats en un diàleg o en una activitat nova

Es recomana mostrar una activitat nova en lloc d'un diàleg quan la llicència no sigui vàlida. D'aquesta manera, assegureu-vos que s'ha finalitzat l'activitat principal de l'aplicació.

Per defecte es mostrarà un diàleg no cancel·lable.

nou PiracyChecker (això)

.display (Display.ACTIVITY)

...

.començar();

Per defecte, l'activitat que es mostra utilitzarà els colors de la biblioteca. Per aplicar un color fosc primari i primari personalitzat i per definir si l’activitat ha de mostrar una barra d’estat normal o clara, utilitzeu:

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

També podeu definir un disseny XML personalitzat per a aquest contingut d’activitat mitjançant:

.withActivityLayout (R.layout.my_custom_layout)

Ús de devolucions de trucada personalitzades

Si afegiu una devolució de trucada al constructor, podeu personalitzar el que passarà quan es comprovi la llicència i gestionar els errors de comprovació de la llicència si l'usuari no pot utilitzar l'aplicació. Tingueu en compte que quan utilitzeu aquest mètode heu de ser conscients de bloquejar l'aplicació a usuaris no autoritzats .

Per defecte, la biblioteca mostrarà un quadre de diàleg que no es pot cancel·lar si l'usuari no pot utilitzar l'aplicació, en cas contrari no passarà res.

Utilitzeu el creador i afegiu el següent:

.callback (nou PiracyCheckerCallback () {

@Override

public void allow () {

// Feu alguna cosa quan l'usuari pugui utilitzar l'aplicació

}

@Override

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

// Podeu fer alguna cosa específica quan l'usuari no pugui utilitzar l'aplicació

// O bé, gestioneu l'error mitjançant el paràmetre 'error', vosaltres mateixos (comproveu els errors a {@link PiracyCheckerError}).

// A més, si heu activat la comprovació d’aplicacions pirates i / o botigues de tercers, el paràmetre ‘app’

// és l'aplicació que s'ha detectat al dispositiu. L'aplicació pot ser nul·la i, quan és nul·la, significa que no s'ha trobat cap aplicació ni botiga pirata,

// o bé heu desactivat la comprovació d'aquestes aplicacions.

// Això us permet comunicar als usuaris els possibles motius pels quals la llicència no és vàlida.

}

@Override

public void onError (error @NonNull PiracyCheckerError) {

// No cal que aquest mètode s’implementi / anul·li, però ...

// Podeu fer alguna cosa específica quan es produeixi un error en comprovar la llicència,

// O bé, gestioneu l'error mitjançant el paràmetre 'error', vosaltres mateixos (comproveu els errors a {@link PiracyCheckerError}).

}

})

6 minuts de lectura