Wie Android-Entwickler ihre Apps vor IAP-Hackern schützen können

Dieses Handbuch richtet sich an Entwickler von Android-Apps, die Einnahmen aus IAPs erzielen und sich mithilfe von Hacker-Tools vor Hackern und betrügerischen Käufen schützen möchten. Es gibt einige bekannte IAP-Hacker-Tools, die ich hier nicht auflisten werde, aber im Grunde senden diese Tools falsche Kaufquittungen an Ihre App, damit der Nutzer freie IAPs genießen kann. Dies kann alles sein, von monatlichen Abonnements bis zu Tokens im Spiel.

Es werden zwar immer neue Versionen dieser Hacker-Tools veröffentlicht, und es ist sehr wichtig, dass Sie sich über die neuesten Updates und Methoden bewusst sind. Es gibt jedoch einige Dinge, die Sie tun können, um Ihre Apps-IAPs vor Diebstahl zu schützen. Vor allem müssen Sie mehrere Methoden der serverseitigen IAP-Verifizierung aktivieren, die ich im Folgenden näher beschreiben werde.

Dieser Leitfaden richtet sich nicht an Anfänger, sondern an erfahrene App-Entwickler, die die verschiedenen Fachausdrücke in diesem Handbuch verstehen.

Verwenden eines Git Repo Plug-Ins speziell für diesen Zweck:

PiraterieChecker

Fügen Sie das Repository Ihrem Projekt build.gradle hinzu :

Repositories {

Maven {

URL https://jitpack.io

}

}

Und fügen Sie die Bibliothek Ihrem Modul build.gradle hinzu :

Abhängigkeiten {

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

}

Empfehlungen

  • Aktivieren Sie ProGuard immer in Ihren Produktionsversionen.
  • PiracyChecker sollte in Ihre onCreate-Methode aufgenommen werden, um so schnell wie möglich nach einer gültigen Lizenz zu suchen.
  • Es wird empfohlen, eine neue Aktivität anstelle eines Dialogs anzuzeigen, wenn die Lizenz nicht gültig ist. Auf diese Weise stellen Sie sicher, dass die Hauptaktivität der App beendet ist. Siehe Ergebnisse in einem Dialog oder einer neuen Aktivität anzeigen.

Überprüfen Sie die Google Play-Lizenzierung (LVL)

Google Play bietet einen Lizenzierungsservice, mit dem Sie Lizenzierungsrichtlinien für Anwendungen erzwingen können, die Sie bei Google Play veröffentlichen. Mit der Google Play-Lizenzierung kann Ihre Anwendung Google Play abfragen, um den Lizenzstatus für den aktuellen Nutzer zu erhalten.

Jede Anwendung, die Sie über Google Play veröffentlichen, kann den Google Play-Lizenzierungsservice nutzen. Es ist kein spezielles Konto oder Registrierung erforderlich.

neue PiracyChecker (diese)

.enableGooglePlayLicensing (BASE_64_LICENSE_KEY)

.Anfang();

Um Ihren BASE64-Lizenzschlüssel abzurufen, muss Ihre App in die Google Play Developer Console hochgeladen werden. Dann Zugriff auf Ihre App -> Dienste und APIs.

Wenn Sie Google Play Licensing verwenden, sollten Sie in der Methode onDestroy () Ihrer Aktivität den Befehl .destroy () aufrufen, um zu vermeiden, dass mehrere Instanzen des Dienstes ausgeführt werden.

Überprüfen Sie das Signaturzertifikat Ihrer Signatur (Signatur)

Entwickler müssen Anwendungen immer mit ihrem privaten Schlüssel / Zertifikat (in einer .keystore-Datei enthalten) signieren, bevor die App auf Benutzergeräten installiert werden kann. Das Signaturzertifikat muss während der gesamten Lebensdauer der App konsistent sein und in der Regel ein Ablaufdatum von 25 Jahren haben.

Die App-Signatur wird beschädigt, wenn die .apk-Datei in irgendeiner Weise geändert wird - nicht signierte Apps können normalerweise nicht installiert werden. Wir können uns vorstellen, dass ein Angreifer den Lizenzprüfcode entfernt, um z. B. vollständige App-Funktionen zu ermöglichen, ohne zu zahlen. Ein gefährlicheres Beispiel wäre die Änderung der .apk-Datei, um Malware in eine legitime App einzubinden, um sensible Benutzerdaten zu erfassen. Damit das geänderte .apk installiert werden kann, muss der Angreifer es zurückgeben.

neue PiracyChecker (diese)

.enableSigningCertificate (478yYkKAQF + KST8y4ATKvHkYibo =) // Die ursprüngliche APK-Signatur für die PRODUCTION-Version

.Anfang();

ACHTUNG!! Ihre App-Signatur kann mithilfe einer PiracyCheckerUtils-Methode abgerufen werden. Stellen Sie sicher, dass Sie Ihr APK mit Ihrem Productions-Keystore signiert haben (ohne den DEBUG-Schlüssel zu verwenden), und installieren Sie die Version, die Sie verteilen möchten. Kopieren Sie dann die von dieser Methode zurückgegebene Signatur in die Konsole und fügen Sie .enableSigningCertificate (YOUR_APK_SIGNATURE) ein.

// Diese Methode druckt Ihre App-Signatur in der Konsole

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

Überprüfen Sie das Installationsprogramm

Wenn Sie die App nur auf einen bestimmten Store verteilen möchten, blockiert diese Technik die Installation der App mit einem anderen Store.

Unterstützte Geschäfte: Google Play, Amazon App Store und Samsung Galaxy Apps.

neue PiracyChecker (diese)

.enableInstallerId (InstallerID.GOOGLE_PLAY)

.enableInstallerId (InstallerID.AMAZON_APP_STORE)

PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klicken

.enableInstallerId (InstallerID.GALAXY_APPS)

.Anfang();

ACHTUNG!! Dies ist eine sehr restriktive Technik, da sie die Installation Ihrer App über einen anderen Markt oder die direkte Installation der .apk auf dem Gerät blockiert. In den meisten Fällen wird dies nicht empfohlen.

Überprüfen Sie die Verwendung von Piraten-Apps

Wenn Sie überprüfen möchten, ob der Benutzer Piraten-Apps installiert hat, können Sie diesen Code verwenden.

Es wird nach Lucky Patcher, Uret Patcher, Freedom und CreeHack suchen.

neue PiracyChecker (diese)

.enableUnauthorizedAppsCheck ()

.Anfang();

Sie können die App auch dann blockieren, wenn diese Piraten-Apps deinstalliert wurden. Dies verhindert, dass die App gepatcht wird und deinstalliert dann die Piraten-App, um Ihre App weiterhin verwenden zu können. Die Bibliothek speichert einen SharedPreference-Wert, um zu wissen, wann eine Raubkopie-App gefunden wurde.

Dazu gibt es zwei Möglichkeiten:

Definieren Sie die SharedPreferences und den Namen der Einstellung, in der das Ergebnis gespeichert werden soll.

neue PiracyChecker (diese)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (Einstellungen, app_unauthorized) // Ändern Sie app_unauthorized mit Ihrem eigenen Wert

.Anfang();

Definieren Sie den Namen SharedPreferences und den Namen der Einstellung, in der das Ergebnis gespeichert werden soll.

neue PiracyChecker (diese)

.enableUnauthorizedAppsCheck ()

.blockIfUnauthorizedAppUninstalled (license_preferences, app_unauthorized) // Ändern Sie license_preferences und app_unauthorized mit Ihrem eigenen Wert

.Anfang();

Überprüfen Sie die Verwendung von Apps von Drittanbietern

Wenn Sie überprüfen möchten, ob der Nutzer Store-Apps von Drittanbietern installiert hat, können Sie diesen Code verwenden.

Es prüft nach: Aptoide, BlackMart, Mobogenie, 1Mobile, GetApk, GetJar, SlideMe und ACMarket.

neue PiracyChecker (diese)

.enableStoresCheck ()

.Anfang();

Überprüfen Sie, ob es sich bei der App um einen Debug-Build handelt

Wenn Ihre App außerhalb des Entwicklungsprozesses auf einem Emulator ausgeführt wird, zeigt dies an, dass eine andere Person als Sie versucht, die App zu analysieren.

neue PiracyChecker (diese)

.enableDebugCheck ()

.Anfang();

Überprüfen Sie, ob die App in einem Emulator ausgeführt wird

Außerhalb der Entwicklung ist es unwahrscheinlich, dass Ihre App auf einem Emulator ausgeführt wird. Es wird davon abgeraten, Apps mit aktiviertem debuggable zu veröffentlichen, da damit verbundene Computer über die Android Debug Bridge auf die App zugreifen und sie debuggen können.

boolean tief = falsch;

neue PiracyChecker (diese)

.enableEmulatorCheck (tief)

.Anfang();

Hinweis: Der Deep-Boolean mit der Bibliothek führt zusätzliche Prüfungen durch, um zu erkennen, ob das Gerät ein Emulator ist oder nicht. Es könnte zu einigen seltsamen Abstürzen führen, also sei weise, wenn du es benutzt.

Speichern Sie das Ergebnis der Lizenzprüfung in SharedPreferences

Das Speichern des Ergebnisses der Lizenzprüfung ist nützlich, um den Lizenzstatus zu überprüfen, ohne dass .start () mehrmals aufgerufen werden muss.

Dazu gibt es zwei Möglichkeiten:

Definieren Sie die SharedPreferences und den Namen der Einstellung, in der das Ergebnis gespeichert werden soll.

neue PiracyChecker (diese)

.saveResultToSharedPreferences (preferences, valid_license) // Ändere valid_license mit deinem eigenen Wert

.Anfang();

Definieren Sie den Namen SharedPreferences und den Namen der Einstellung, in der das Ergebnis gespeichert werden soll.

neue PiracyChecker (diese)

.saveResultToSharedPreferences (license_preferences, valid_license) // Ändern Sie license_preferences und valid_license mit Ihrem eigenen Wert

.Anfang();

Anpassungen

Zeigt Ergebnisse in einem Dialog oder einer neuen Aktivität an

Es wird empfohlen, eine neue Aktivität anstelle eines Dialogs anzuzeigen, wenn die Lizenz nicht gültig ist. Auf diese Weise stellen Sie sicher, dass die Hauptaktivität der App beendet ist.

Standardmäßig wird ein nicht kündbarer Dialog angezeigt.

neue PiracyChecker (diese)

.display (Anzeige.AKTIVITÄT)

.Anfang();

Standardmäßig verwendet die angezeigte Aktivität die Bibliotheksfarben. Um eine benutzerdefinierte primäre und primäre dunkle Farbe anzuwenden und festzulegen, ob die Aktivität eine normale oder helle Statusleiste anzeigen soll, verwenden Sie Folgendes:

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

Sie können auch ein benutzerdefiniertes Layout-XML für diesen Aktivitätsinhalt definieren, indem Sie Folgendes verwenden:

.withActivityLayout (R.layout.my_custom_layout)

Benutzerdefinierte Rückrufe verwenden

Wenn Sie dem Builder einen Rückruf hinzufügen, können Sie anpassen, was nach der Überprüfung der Lizenz geschehen soll, und die Lizenzprüfungsfehler verwalten, wenn der Benutzer die App nicht verwenden darf. Beachten Sie, dass Sie bei der Verwendung dieser Methode beachten müssen, dass die App von nicht autorisierten Benutzern blockiert wird .

Standardmäßig zeigt die Bibliothek einen nicht abbrechbaren Dialog an, wenn der Benutzer die App nicht verwenden darf, sonst wird nichts passieren.

Verwenden Sie den Builder und fügen Sie Folgendes hinzu:

.callback (neues PiracyCheckerCallback () {

@Override

public void erlauben () {

// Machen Sie etwas, wenn der Benutzer die App verwenden darf

}

@Override

public void dontAllow (@NonNull PiracyCheckerError Fehler, @Nullable PirateApp App) {

// Sie können etwas Bestimmtes tun, wenn der Benutzer die App nicht benutzen darf

// Oder behalte den Fehler mit dem Parameter 'error' selbst (Prüfe Fehler unter {@link PiracyCheckerError}).

// Wenn Sie die Überprüfung von Piraten-Apps und / oder Drittanbieter-Stores aktiviert haben, wird zusätzlich der Parameter 'app' angezeigt

// ist die App, die auf dem Gerät erkannt wurde. App kann null sein, und wenn null, bedeutet das, dass keine Piraten-App oder ein Store gefunden wurde.

// oder Sie haben die Überprüfung für diese Apps deaktiviert.

// Dadurch können Sie die Benutzer über die möglichen Gründe informieren, warum die Lizenz ungültig ist.

}

@Override

public void onError (@NonNull PiracyCheckerError Fehler) {

// Diese Methode muss nicht implementiert / überschrieben werden, aber

// Sie können etwas Bestimmtes tun, wenn beim Überprüfen der Lizenz ein Fehler auftritt.

// Oder behalte den Fehler mit dem Parameter 'error' selbst (Prüfe Fehler unter {@link PiracyCheckerError}).

}

})

PRO TIPP: Wenn das Problem bei Ihrem Computer oder Laptop / Notebook auftritt, sollten Sie versuchen, die Reimage Plus Software zu verwenden, die die Repositories durchsuchen und beschädigte und fehlende Dateien ersetzen kann. Dies funktioniert in den meisten Fällen, in denen das Problem aufgrund einer Systembeschädigung auftritt. Sie können Reimage Plus herunterladen, indem Sie hier klicken

Facebook Twitter Google Plus Pinterest