我已经实施了服务器端验证Google IAP购买代币。我的移动应用程序将此令牌发送给我,因为它来自Google。
常规令牌看起来像
minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD
但有时我会得到一个像这样的短标记
korpimulxmslxissnschtkdb
当我通过Google Play Developer API验证此令牌时:https://www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token,对于短令牌,我收到404错误。
问题出在哪里?这个短令牌可能代表真实交易吗?
答案 0 :(得分:38)
我一直在我们的应用程序中收到这些相同的无效令牌而不知道原因。令牌有各种格式,包括24个字母字符(例如glvnqnpjqslcagyimgxeuybk
),15个数字(例如781871156762279
,see this question),甚至还有适当长度的令牌与有效格式不同的格式(例如xdavcuvdnniwwrhwemleqjdz.rSQozm...
see this question)。
这些是我从in-app billing API收到的关于这些不同令牌的错误消息:
"code": 404, "message": "The purchase token was not found."
"code": 400, "message": "Invalid Value"
"code": 400, "message": "Your request is invalid for this subscription purchase."
我在根设备上测试了两款声称可以破解应用内购买的应用:自由和 Lucky Patcher 。前者不起作用:虽然它发现我们的应用程序可以购买,当我试图制作一个假的时,它告诉我“这个应用程序的购买不能伪造”。然而,后一个在一些摆弄之后工作,并且生成了与问题完全相同的简短购买令牌。当我尝试通过in-app billing API验证令牌时,我收到了与以前完全相同的“无效令牌”消息。
我还开始使用this method记录生成无效令牌的设备的根状态。虽然这不是任何事情的证据,但几乎所有无效令牌都源于有根设备这一事实让我怀疑犯规行为。
我认为攻击的工作原理如下。任何了解此事的人都请加入!
Intent
答案 1 :(得分:3)
你最终解决了这个问题吗?
我可以建议的唯一原因是该令牌是由应用内购买破解程序生成的,例如"自由应用内购买Android和#34;可以在root设备上安装的应用程序。
我有兴趣看看您是否收到过您自己进行的任何测试购买的简短令牌。
令牌是假的另一个迹象是您在应用程序上购买后获得的orderId的格式。
如果它没有遵循Administering In-app Billing文档中指明的格式,那么它很可能是欺诈性购买。
答案 2 :(得分:0)
我发现部分缓解适用于某些假IAP提供商:手动重新检查数字签名。无论IAP模拟器做什么,他们都没有Google私有RSA密钥的副本。我推出了自己的签名支票,它至少捕获了一些虚假交易。