Dies kommt viel hier rüber :) Die Idee hinter dem Absatz, den Sie zitieren, ist, dass für die In-App-Abrechnung, um sicher zu sein, Sie Transaktionssignaturen überprüfen müssen. Diese sind mit einem privaten Schlüssel signiert, der mit Ihrem Entwicklerkonto verknüpft ist. Der Schlüssel befindet sich auf den Servern von Google. Daher kann davon ausgegangen werden, dass niemand sonst Daten signieren kann. Um dies zu überprüfen, benötigen Sie Ihren öffentlichen Schlüssel, den Sie von der Entwicklerkonsole kopieren können. Wenn jemand es in Ihrer App ersetzt, könnten sie es täuschen, In-App-Abrechnung Transaktionen aus nicht autorisierten Quellen zu akzeptieren, denn wenn sie den öffentlichen Schlüssel einpflanzen, steuern sie wahrscheinlich auch den entsprechenden privaten Schlüssel. In der Praxis ist es jedoch viel einfacher, den Code einfach an den richtigen Stellen zu ändern, damit er für isLicensed()
, hasItem()
oder ähnliche Methoden, die Sie haben könnten, immer true zurückgibt, und niemand tut dies.
Der beste Weg, um den Schlüssel zu schützen, ist natürlich, den Schlüssel in Ihrer App überhaupt nicht zu haben. Verschieben Sie die gesamte Transaktionsvalidierungslogik auf Ihren Server, und verwenden Sie HTTPS, um eine Verbindung zu ihr herzustellen. Überprüfen Sie die Zertifikatskette ordnungsgemäß, um sicherzustellen, dass Sie mit Ihren eigenen Servern sprechen. Andernfalls könnte jemand mit DNS herumalbern und Ihre App täuschen, um sich mit ihren eigenen Servern zu verbinden. Ein ähnlicher Angriff gegen den Kauf von iOS wurde vor ein paar Wochen angekündigt.
Die nächste beste Sache ist, den Schlüssel irgendwie zu verschleiern, und es in Ihrer APP eingeschlossen zu haben.Dies hat den Vorteil, dass Sie keinen Server benötigen, aber der Nachteil ist, dass wenn jemand bestimmt genug ist, werden sie es herausfinden, da sie immer den Byte-Code Ihrer App umkehren können. Also ist es am besten, wenn Sie Ihre eigene originelle Methode entwickeln, die nicht in öffentlichen Foren angezeigt wird :) Um es ein bisschen schwieriger zu machen, können Sie den Validierungsteil in nativem Code implementieren, der schwieriger ist (aber nicht unmöglich) zu analysieren. Wie oben erwähnt, ist das Patchen von Byte-Code an den richtigen Stellen jedoch viel einfacher als der Versuch, den öffentlichen Schlüssel zu ersetzen, so dass die meisten Cracker es tun.
Was meinen Sie "In der Praxis ist es jedoch viel einfacher, Ihren Code an den richtigen Stellen einfach zu ändern, um immer für isLicensed(), hasItem() oder ähnliche Methoden haben Sie vielleicht und niemand tut das. "? Dieser Satz ergibt keinen vollständigen Sinn. Bitte klären Sie. – Stunner
Es bedeutet, dass es einfacher ist, die App zu patchen und eventuell vorhandene Lizenzprüfungen zu deaktivieren, anstatt zu versuchen, den Schlüssel zu ersetzen. –
~ "** kontrollieren wahrscheinlich auch den entsprechenden privaten Schlüssel **". In-App-Abrechnungsanforderungen werden jedoch über die Play Store-APK auf dem Gerät ausgeführt. Wie also könnte jemand diese Logik kontrollieren oder manipulieren? –