2014-09-30 5 views
10

Google stellt convenient API zur Verfügung, um "In-App-Kauf" -Funktionen in einer Android-App zu implementieren.Wie schützt man Google In-App Billing v3 vor Code-Hacking?

Zusammen mit diesen Dokumenten gibt es auch eine dedicated chapter in Bezug auf das Sicherheitsniveau dieses Systems und die guten Möglichkeiten, es zu entwerfen. Das Web ist voll von Artikeln über diesen Schritt, von public key protection bis remote server validation, aber ich kann wirklich nicht verstehen, warum all diese Techniken funktionieren sollten, wenn das Hauptproblem einfach ist Code Hacking.

Vielleicht gibt es einen besseren Begriff, um es zu erklären, aber lassen Sie mich ein kurzes Beispiel machen. Der Grundgedanke meiner Anwendung ist, dass der Benutzer an bestimmten Punkten nicht fortfahren kann, wenn er nicht einen Artikel gekauft hat.

Etwas wie:

public void accessTheVeryCoolFeature() { 

    boolean haveIt = checkIfPurchased("verycoolfeature"); 
    if (haveIt) { 
     // YEAH! let's open this very cool feature I paid 200 bucks for 
    } 
    else { 
     // ok... where is my wallet? 
     boolean purchased = startPurchaseFlow("verycoolfeature"); 
     if (purchased) { 
      // my wallet is now empty but happy 
     } 
    } 
} 

den bisherigen Richtlinien folgend, kann der Entwickler seine App während des Kaufprozesses, lassen die startPurchaseFlow Verfahren schützen, um eine Remote-abzufragen, vertrauenswürdige, Server, der den Empfang bestätigt. Käufe, die mit einem "Fake Marketplace" durchgeführt wurden, sollten dadurch vermieden werden.

Eine andere Methode besteht darin, den entsperrten Inhalt durch Verschleiern des Codes zu schützen. Dies ist mit Tools wie ProGuard sehr einfach und sollte das Leben eines "Hackers" etwas schwieriger machen.

Jetzt habe ich versucht, den Teil eines Hackers zu handeln, der meinen Code lesen möchte, vor allem die Abrechnungsphase. Ich brauchte 1 Minute, um den Code zu finden, den ich im vorherigen Beispiel geschrieben habe. Jetzt der beste Teil: Was passiert, wenn ich den (verschleierten) Quellcode dafür editiere?

public void atvf() { 

    boolean hi = cip("verycoolfeature"); 
    hi = true; // <------------------------ AHAH! 
    if (hi) { 
     // YEAH! let's open this very cool feature for free 
    } 
    // ... 
} 

All die guten Worte über Remote Verification und Code-Verschleierung sind total weg. Warum also Stunden damit verbringen, sie zu implementieren, wenn das allererste Problem in einem booleschen Wert liegt?

Fehle ich etwas?

+1

Im Allgemeinen besteht das beschriebene Problem für jede App, die unabhängig von der Plattform eine Laufzeitlizenzierung hat. Während die Verwendung von Java das Hacken von Android-Apps etwas einfacher macht als die Verwendung von C++ für eine native Windows-App, sind sie beide hackbar. Zumindest in den USA ist eine solche Änderung illegal. –

Antwort

2

Wenn Ihre App nicht stark davon abhängig ist, dass ihre Funktionalität auf einem Server ist - da jede Funktionalität auf dem Server verbleibt und die App nur ein Client-Tool zum Aufrufen dieser Server-APIs ist, können Sie nichts tun. Wenn es sich tatsächlich um eine serverbasierte App handelt, können Sie jede eingehende Anfrage prüfen (z. B. kann die App einen Hash für eine einmalige Sitzung senden), wenn eine gültige Transaktion für sie existiert und bezahlt wird. Wenn nicht, verweigern Sie die Anfrage.

Der Code der App wird auf dem Telefon des Kunden ausgeführt. Wenn der Hacker Zugang zu diesem Code erhält und ihn ändern kann, um alle Abrechnungsvalidierungen außer Kraft zu setzen, können Sie nichts tun. Sie sollten sicherstellen, dass er überhaupt nicht auf diesen Quellcode zugreifen kann.

Verwandte Themen