Wie wird überprüft, ob POST-Daten von einer Android-App mit korrekter SHA1-Signatur gesendet werden?

8

Kürzlich wurde mein Spiel gehackt und ein User hat eine unmögliche Punktzahl beim Server eingereicht. Das Ergebnis wurde mit einer verifizierten Prüfsumme übermittelt und die Daten wurden korrigiert.

Ich bin überzeugt, dass der Benutzer meine APK-Datei umgekehrt haben muss, um die POST-Anfrage zu finden.

Nun frage ich mich, was wäre ein guter Weg, dies zu verhindern, und ich überlegte, die SHA1-Signatur der App zu verifizieren. Vielleicht kann ich auf diese Weise sicherstellen, dass die App von mir signiert ist und keine Reverse Engineering Version der App ist.

Wäre das möglich? Oder wäre da eine bessere Lösung, um das zu lösen?

Ich benutze LibGDX übrigens.

    
Z0q 13.02.2016, 14:48
quelle

5 Antworten

3

Zuerst müssen Sie Ihren Code wirklich verschleiern. Sie können weitere Informationen über ProGuard und Codeverschleierung hier finden.

Zweitens können Sie GoogleAuthUtil verwenden, das in den Google Play-Diensten verfügbar ist und für Geräte mit Android 2.2 oder höher verfügbar ist.

GoogleAuthUtil macht genau das, was Sie brauchen:

Ihre Client-Server-Anrufe werden über eine HTTPS-Anfrage an Google gesendet. Google prüft, ob der Anruf von einer mit Ihrem Freigabeprotokoll signierten App getätigt wird, und sendet dann die Anfrage an Ihren Server.

Hier finden Sie offizielle Tutorials zur Implementierung dieses und die offizielle Dokumentation hier .

Prost!

    
DDsix 27.02.2016, 18:12
quelle
2

1) Verwenden Sie Code-Verschleierung für ex. Proguard. Diese Art von Tools ist nicht nur für Java verfügbar. Aber seien Sie vorsichtig damit - verschleierter Code funktioniert möglicherweise langsam oder enthält zusätzliche Fehler.

2) Fügen Sie App-Lizenzierung hinzu (Dies wird die App-Signatur mit Google Play prüfen):

Sehen Sie sich dieses Video aufmerksam an: Ссылка Wie ich mich erinnere, erwähne er Techniken, die zur Laufzeit verwendet werden, um zu überprüfen, ob deine App nicht gehackt oder modifiziert wurde (zip check, etc).

3) Stellen Sie sicher, dass Ihre App / Server eine sichere Verbindung (SSL / TLS) nur mit MODERN Cipher Suites verwendet. Dies wird Downgrade-Angriffe mindern.

Sie können diesen Generator verwenden, um config mit MODERN Cipher Suites für Ihren Server zu erstellen: Ссылка

Sie können auch das Zertifikats-Pining auf der Client-Seite verwenden - dies wird den Angriff der Autorität mindern.

Verwenden Sie keine einfache HTTP-Verbindung.

4) Verwenden Sie eine Art Anfrage-Signierung (wie Amazon AWS) Sie können die Kernidee aus ihren Dokumenten erhalten. Ссылка

Auch Dieser Artikel sollte hilfreich sein.

5) Verhindern Sie die Verwendung Ihrer App auf ROOT Geräten, indem Sie die Laufzeitprüfung hinzufügen. Durch das Telefon mit Root-Zugang ist es einfacher, deine App zu hacken oder zu analysieren.

6) Sie können Betrug verringern, indem Sie Ihrem Online-Spiel ein Ban-System hinzufügen - wenn jemand Ihre App hackt und falsche Daten an Ihren Server sendet = & gt; Fügen Sie diesen Benutzer der Sperrliste auf der Serverseite hinzu (per IP oder Benutzer-ID usw.). Fügen Sie wahrscheinlich Benutzer vorübergehend dieser Liste hinzu (ex 24 h, 7 Tage)

7) + Wenn Sie Json / XML als Datenformate für die Netzwerkschicht verwenden, versuchen Sie, Binärformat zu verwenden, wie Protokollpuffer . Binäre Serialisierung Formate effizienter und schwer zu Reverse Engineering.

    
dasar 29.02.2016 19:08
quelle
1

Wenn Sie die Signatur Ihrer App verifizieren möchten, ohne dass die Möglichkeit besteht, dass diese auch geknackt wird, müssten Sie die gesamte apk hochladen und die Überprüfung auf einem Server vornehmen. Dies ist keine praktikable Lösung.

Die einzige sichere Android-App ist eine reine Terminal-App, was bedeutet, dass Sie alle Computer auf einem Server erledigen müssen. Meistens ist dies wegen der Latenz nicht möglich.

Deshalb müssen wir Android-Entwickler damit leben: Eine App ist nicht 100% sicher.

Aber Sie können nahe dran kommen.

Vielleicht möchten Sie Sicherheit mit HTTPS und SSL zum Sichern Ihrer Kommunikation lesen.

Auch Sie wollen sicherstellen, dass Ihr Kunde ist schwer zu knacken: Android App Piraterie Prävention und Bekämpfung der Android App Piraterie: Xposed

In Ihrem Fall möchten Sie auch die serverseitige Anforderungsvalidierung implementieren: Wenn Sie ein Spiel mit einer Serverseite haben, haben Benutzer wahrscheinlich ein Konto. Wenn ein Benutzer ein eindeutig unmögliches Ergebnis sendet, ignoriert er automatisch die Anfrage und verbietet den Benutzer (und seine IP). (Aber denken Sie auch daran, dass dies bei einer gültigen Anfrage niemals passieren sollte, sonst könnten Benutzer wütend werden und aufhören zu spielen.)

    
F43nd1r 25.02.2016 20:38
quelle
1

Sie können Ihren Code besser verschleiern und ein sehr verschleiertes Geheimnis verwenden, um Ihre Anfragen zu signieren. Damit können Sie die Sicherheit erhöhen.

Aber wenn all dein Spiel im Client läuft, kann es nicht vollkommen sicher sein. Da es egal ist, was Sie zum Signieren verwenden, bedeutet dies, dass Sie im Client den geheimen oder privaten Schlüssel haben und dann gehackt werden können.

Um es sicherer zu machen, müssen Sie eine Spiellogik in den Server einbeziehen und dann in dieser Logik steuern, dass der Benutzer nicht betrügt.

    
lujop 01.03.2016 22:41
quelle
1

Es reicht nicht, die Integrität Ihrer App zu überprüfen, da die Anfrage einfach außerhalb der App gefälscht oder spontan im Speicher geändert werden kann, indem Sie eine gerootete Android-Umgebung verwenden. Mehr noch, Sie können es nicht vollständig vermeiden .

Dies ist ein Problem, das von allen Anwendungen auf einem Computer außerhalb Ihrer Kontrolle (alle Client-Anwendungen) gemeinsam genutzt wird. Sie können niemals den Daten vertrauen, die von ihnen kommen.

Wie ich es sehen kann, haben Sie mehrere Möglichkeiten:

  1. Verschleiern Sie den Code und erschweren Sie das Reverse-Engineering der App. Beachten Sie, dass dies das Problem nicht löst, sondern minimiert.
  2. Verschieben Sie die Verarbeitung auf den Server. Je mehr das Spiel vom Server gesteuert wird, desto weniger anfällig ist Ihre App für dieses bösartige Verhalten.
  3. Unmögliche Ergebnisse automatisch erkennen und ihre Konten schließen

Prost,

    
idelvall 25.02.2016 16:17
quelle

Tags und Links