Modul în care dezvoltatorii Android își pot proteja aplicațiile de hackerii IAP



Încercați Instrumentul Nostru Pentru Eliminarea Problemelor

Acest ghid este destinat dezvoltatorilor de aplicații Android care câștigă venituri din IAP și doresc să se protejeze de hackeri și achiziții frauduloase prin intermediul instrumentelor de hacking. Există mai multe instrumente de hacking IAP bine cunoscute, pe care nu le voi enumera aici, dar practic aceste instrumente trimit chitanțe de cumpărare false aplicației dvs. pentru a permite utilizatorului să se bucure de IAP-uri gratuite. Acest lucru poate fi de la abonamente lunare până la jetoane în joc.





În timp ce noile versiuni ale acestor instrumente de hacking sunt întotdeauna lansate, iar diligența în a fi la curent cu ultimele lor actualizări și metode este foarte importantă, există câteva lucruri pe care le puteți face pentru a vă proteja aplicațiile IAP de a fi furate. În special, trebuie să activați mai multe metode de verificare IAP pe partea de server, pe care le voi detalia mai jos.



Acest ghid nu este destinat începătorilor, ci dezvoltatorilor de aplicații cu experiență care vor înțelege diferitele limbaje din acest ghid.

Utilizarea unui plug-in Git Repo specific în acest scop:

PiracyChecker

Adăugați depozitul la proiectul dvs. build.gradle :



depozite {

maven {

url „https://jitpack.io”

}

}

Și adăugați biblioteca la modulul dvs. build.gradle :

dependențe {

compilați „com.github.javiersantos: PiracyChecker: 1.1”

}

Recomandări

  • Activați întotdeauna ProGuard în versiunile de producție.
  • PiracyChecker ar trebui să fie inclus în metoda onCreate pentru a verifica o licență valabilă cât mai curând posibil.
  • Este recomandat să afișați o activitate nouă în locul unui dialog atunci când licența nu este validă. În acest fel, vă asigurați că activitatea principală a aplicației este terminată. Vedea ' Afișați rezultatele într-un dialog sau într-o activitate nouă '.

Verificați licențierea Google Play (LVL)

Google Play oferă un serviciu de licențiere care vă permite să aplicați politicile de licențiere pentru aplicațiile pe care le publicați pe Google Play. Cu licențierea Google Play, aplicația dvs. poate interoga Google Play pentru a obține statutul de licențiere pentru utilizatorul actual.

Orice aplicație pe care o publicați prin Google Play poate utiliza serviciul de licențiere Google Play. Nu este necesar un cont special sau înregistrare.

nou PiracyChecker (acesta)

.enableGooglePlayLicensing („BASE_64_LICENSE_KEY”)

...

.start();

Pentru a prelua cheia de licență BASE64, aplicația dvs. trebuie încărcată în Consola pentru dezvoltatori Google Play . Apoi accesați aplicația dvs. -> Servicii și API-uri.

Când utilizați licențierea Google Play, trebuie să apelați .destroy () în metoda onDestroy () din activitatea dvs. pentru a evita mai multe instanțe ale serviciului care rulează.

Verificați certificatul de semnare al aplicației (semnătură)

Dezvoltatorii trebuie să semneze întotdeauna aplicații cu cheia / certificatul lor privat (conținut într-un fișier .keystore) înainte ca aplicația să poată fi instalată pe dispozitivele utilizatorului. Certificatul de semnare trebuie să rămână consecvent pe tot parcursul vieții aplicației și să aibă de obicei o dată de expirare de 25 de ani.

Semnătura aplicației va fi întreruptă dacă .apk este modificat în vreun fel - aplicațiile nesemnate nu pot fi instalate de obicei. Ne putem imagina un atacator care elimină codul de verificare a licenței pentru a activa funcțiile complete ale aplicației fără a plăti, de exemplu. Un exemplu mai periculos ar fi modificarea .apk pentru a include malware într-o aplicație legitimă pentru a culege date sensibile ale utilizatorilor. Pentru ca fișierul .apk modificat să fie instalat, atacatorul trebuie să îl demisioneze.

nou PiracyChecker (acesta)

.enableSigningCertificate („478yYkKAQF + KST8y4ATKvHkYibo =”) // Semnătura APK originală pentru versiunea PRODUCTION

...

.start();

AI GRIJA!! Semnătura aplicației dvs. poate fi recuperată folosind o metodă PiracyCheckerUtils. Asigurați-vă că ați semnat APK-ul dvs. utilizând depozitul de chei PRODUCTION (nu folosind cel DEBUG) și ați instalat versiunea pe care intenționați să o distribuiți. Apoi copiați semnătura returnată prin această metodă pe consolă și lipiți în .enableSigningCertificate („YOUR_APK_SIGNATURE”)

// Această metodă va imprima semnătura aplicației dvs. în consolă

Log.e („SEMNATURĂ”, PiracyCheckerUtils.getAPKSignature (aceasta));

Verificați programul de instalare

Dacă intenționați doar să distribuiți aplicația pe un anumit magazin, această tehnică va împiedica instalarea aplicației folosind orice alt magazin.

Magazine acceptate: Google Play, Amazon App Store și Samsung Galaxy Apps.

nou PiracyChecker (acesta)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

.enableInstallerId (InstallerID.GALAXY_APPS)

...

.start();

AI GRIJA!! Aceasta este o tehnică cu adevărat restrictivă, deoarece vă va împiedica instalarea aplicației utilizând o altă piață sau instalarea directă a .apk pe dispozitiv. Nu este recomandat în majoritatea cazurilor.

Verificați utilizarea aplicațiilor pirat

Dacă doriți să verificați dacă utilizatorul are instalate aplicații pirat, puteți utiliza acest cod.

Se va verifica dacă: Lucky Patcher, Uret Patcher, Freedom și CreeHack.

nou PiracyChecker (acesta)

.enableUnauthorizedAppsCheck ()

...

.start();

Puteți bloca aplicația chiar și atunci când aceste aplicații pirat au fost dezinstalate. Acest lucru împiedică aplicația să fie corecționată și apoi dezinstalați aplicația pirat pentru a continua să utilizați aplicația dvs. Biblioteca va salva o valoare SharedPreference pentru a afla când a fost detectată o aplicație pirat.

Există două moduri de a face acest lucru:

Definiți SharedPreferences și numele preferinței unde doriți să salvați rezultatul.

nou PiracyChecker (acesta)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (preferințe, „app_unauthorized”) // Schimbați „app_unauthorized” cu propria valoare

...

.start();

Definiți numele SharedPreferences și numele preferinței unde doriți să salvați rezultatul.

nou PiracyChecker (acesta)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled („license_preferences”, „app_unauthorized”) // Schimbați „license_preferences” și „app_unauthorized” cu propria valoare

...

.start();

Verificați utilizarea aplicațiilor magazinului terță parte

Dacă doriți să verificați dacă utilizatorul are instalate aplicații de magazin terță parte, puteți utiliza acest cod.

Acesta va verifica dacă: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe și ACMarket.

nou PiracyChecker (acesta)

.enableStoresCheck ()

...

.start();

Verificați dacă aplicația este o versiune de depanare

Dacă aplicația dvs. rulează pe un emulator în afara procesului de dezvoltare, aceasta indică faptul că altcineva decât dvs. încearcă să analizeze aplicația.

nou PiracyChecker (acesta)

.enableDebugCheck ()

...

.start();

Verificați dacă aplicația este rulată într-un emulator

În afara dezvoltării, este puțin probabil ca aplicația dvs. să ruleze pe un emulator, iar lansarea de aplicații cu depanare activată este descurajată, deoarece permite computerelor conectate să acceseze și să depaneze aplicația prin intermediul Android Debug Bridge.

boolean deep = false;

nou PiracyChecker (acesta)

.enableEmulatorCheck (profund)

...

.start();

Notă: booleanul adânc cu face ca biblioteca să facă verificări suplimentare pentru a detecta dacă dispozitivul este sau nu un emulator. Ar putea duce la unele blocări ciudate, așa că fiți înțelepți când îl utilizați.

Salvați rezultatul verificării licenței în SharedPreferences

Salvarea rezultatului verificării licenței este utilă pentru verificarea stării licenței fără a apela .start () de mai multe ori.

Există două moduri de a face acest lucru:

Definiți SharedPreferences și numele preferinței unde doriți să salvați rezultatul.

nou PiracyChecker (acesta)

.saveResultToSharedPreferences (preferințe, „valid_license”) // Schimbați „valid_license” cu propria dvs. valoare

...

.start();

Definiți numele SharedPreferences și numele preferinței unde doriți să salvați rezultatul.

nou PiracyChecker (acesta)

.saveResultToSharedPreferences („license_preferences”, „valid_license”) // Schimbați „license_preferences” și „valid_license” cu propria dvs. valoare

...

.start();

Personalizări

Afișați rezultatele într-un dialog sau într-o activitate nouă

Este recomandat să afișați o activitate nouă în locul unui dialog atunci când licența nu este validă. În acest fel, vă asigurați că activitatea principală a aplicației este terminată.

În mod implicit, va fi afișat un dialog care nu poate fi anulat.

nou PiracyChecker (acesta)

.display (Display.ACTIVITY)

...

.start();

În mod implicit, Activitatea afișată va folosi culorile bibliotecii. Pentru a aplica o culoare întunecată primară și primară personalizată și pentru a defini dacă activitatea trebuie să afișeze bara de stare normală sau deschisă, utilizați:

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

De asemenea, puteți defini un aspect XML personalizat pentru conținutul acestei activități, utilizând:

.withActivityLayout (R.layout.my_custom_layout)

Folosind apeluri de apel personalizate

Adăugarea unui callback la constructor vă permite să personalizați ce se va întâmpla atunci când licența a fost verificată și să gestionați erorile de verificare a licenței dacă utilizatorul nu are voie să utilizeze aplicația. Rețineți că atunci când utilizați această metodă trebuie să știți că blocați aplicația de la utilizatori neautorizați .

În mod implicit, biblioteca va afișa un dialog care nu poate fi anulat dacă utilizatorul nu are voie să folosească aplicația, altfel nu se va întâmpla nimic.

Utilizați generatorul și adăugați următoarele:

.callback (nou PiracyCheckerCallback () {

@Trece peste

public void allow () {

// Faceți ceva când utilizatorul are voie să utilizeze aplicația

}

@Trece peste

public void dontAllow (eroare @NonNull PiracyCheckerError, aplicația @Nullable PirateApp) {

// Puteți face ceva specific când utilizatorul nu are voie să folosească aplicația

// Sau gestionați eroarea, utilizând parametrul „eroare”, dvs. (Verificați erorile la {@link PiracyCheckerError}).

// În plus, dacă ați activat verificarea aplicațiilor pirat și / sau a magazinelor terțe, parametrul „app”

// este aplicația care a fost detectată pe dispozitiv. Aplicația poate fi nulă și, atunci când este nulă, înseamnă că nu a fost găsită nicio aplicație sau magazin pirat,

// sau ai dezactivat cecul pentru acele aplicații.

// Acest lucru vă permite să informați utilizatorii despre posibilele motive pentru care licența a fost invalidă.

}

@Trece peste

public void onError (eroare @NonNull PiracyCheckerError) {

// Această metodă nu este necesară pentru a fi implementată / modificată, dar ...

// Puteți face ceva specific când apare o eroare la verificarea licenței,

// Sau gestionați eroarea, utilizând parametrul „eroare”, dvs. (Verificați erorile la {@link PiracyCheckerError}).

}

})

6 minute citite