Google IAP返回短期购买令牌进行validation

我已经实施了服务器端validationGoogle IAP购买令牌。 我的移动应用程序发送给我这个令牌,从Google获取。

常规标记看起来像

minodojglppganfbiedlabed.AO-J1OyNtpooSraUdtKlZ_9gYs0o20ZF_0ryTNACmvaaaG5EwPX0hPruUdGbE3XejoXYCYzJA2xjjAxrDLFhmu9WC4fvTDNL-RDXCWjlHKpzLOigxCr1QhScXR8uXtX8R94iV6MmMHqD

但是有时候我会得到这样一个简短的标记

korpimulxmslxissnschtkdb

当我通过Google Play Developer APIvalidation此令牌时: https : //www.googleapis.com/androidpublisher/v2/applications/packageName/purchases/subscriptions/subscriptionId/tokens/token ,对于简短的令牌,我收到了404错误。

哪里有问题? 这个简短的记号可能代表真实的交易吗?

Solutions Collecting From Web of "Google IAP返回短期购买令牌进行validation"

我一直在我们的应用程序中收到这些相同的无效令牌,不知道一段时间的原因。 令牌有不同的格式,包括24个字母(例如glvnqnpjqslcagyimgxeuybk ),15个数字(例如781871156762279 , 见这个问题 ),甚至是与合法字符格式稍有不同的令牌(例如xdavcuvdnniwwrhwemleqjdz.rSQozm... 看到这个问题 )。

这些是我一次又一次从这些各种令牌的应用内结算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."

马克格林斯托克给出的答案给了我一个想法,试图重现这个问题。

进行欺诈性购买

我testing了两个声称破解应用程序内购买的应用程序: FreedomLucky Patcher 。 前者没有工作:虽然它检测到我们的应用程序可以进行购买,但当我试图做出一个假的时候,它告诉我“这个应用程序的购买不能伪造”。 后者在经过一番捣鼓之后起作用,并且完全按照问题产生了一个短的购买标记。 当我尝试通过应用内结算APIvalidation令牌时,我收到了与以前一样的完全相同的“无效令牌”消息。

我也开始使用这种方法logging产生无效令牌的设备的根状态。 虽然这并不能certificate任何事情,但几乎所有无效的令牌都来自根源设备,这让我怀疑是犯规。

攻击

我相信这个攻击的效果如下。 谁知道更多关于这个请钟声!

  • 用户安装其中一个黑客应用程序,声称自由应用程序内购买到一个扎根设备
  • 黑客应用程序或者在设备上修补合法的应用内结算服务,或者模拟它
  • 在购买stream程中,黑客应用程序拦截用于合法服务的购买Intent
  • 黑客应用程序处理购买请求,并以与合法服务相同的方式生成响应,但购买请求永远不会到达Google的服务器
  • 依赖本地令牌validation的应用程序将请求从应用内结算服务处进行购买。 这个请求也被黑客程序拦截,它声称购买是有效的
  • 依赖于服务器令牌validation的应用程序将购买令牌发送给服务器,该服务器调用应用内结算API (该应用程序从未见过该令牌),因此返回“无效令牌”响应

减轻

  • 纯粹依靠应用内结算服务的应用程序易受攻击购买购买validation请求都被同一欺诈性应用拦截。 没有防守。
  • 依赖于服务器后端的应用程序应将购买令牌发送到后端,以通过发布者API进行validation。 这些应用程序不得在用户购买后直到后端validation该应用程序,并向应用程序返回肯定结果。 后端应该遵循应用内结算的安全build议 。 这些应用程序可能是欺诈性购买更安全,虽然他们产生了大量的无效购买。
  • 我不认为依靠令牌,订单ID或其他数据的长度或格式来确定购买的有效性是不安全的。 这些令牌可能只是格式错误,因为它们正在模拟以前的格式。 据推测,黑客应用程序的作者将最终发布一个版本来模仿谷歌关心devise的任何格式。 唯一安全的方法是通过您控制的设备上的应用内结算APIvalidation购买, 一台服务器。

你最终解决了这个问题吗?

我可以build议的唯一原因是,该令牌是由应用程序内购买cookies生成的,例如“Android应用程序自由购买”应用程序,可以安装在根设备上。

我很感兴趣,看看您是否收到了您自己进行的任何testing购买的简短标记。

令牌为假的另一个指示是在应用上购买后获得的orderId格式。

如果它不符合“ pipe理应用内结算”文档中指定的格式,那么很可能是欺诈性购买。