ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 网络编程 >> IOS开发 >> iOS内购-防越狱破解刷单

iOS内购-防越狱破解刷单(1/7)

来源:网络整理     时间:2018-10-31     关键词:

本篇文章主要介绍了" iOS内购-防越狱破解刷单",主要涉及到方面的内容,对于IOS开发感兴趣的同学可以参考一下: ---------------------------2018.10.16更新---------------------------最近我们公司丢单率上涨,尤其...

---------------------------2018.10.16更新---------------------------

最近我们公司丢单率上涨,尤其是10月份比9月份来说丢单率翻了3倍,和一些同行交流了一下,发现他们也是丢单量增加,初步推断可能是苹果iOS12的原因,某些情况下会有用户内购成功后,却返回的是订单失败,错误类型为SKErrorUnknown。目前客户端好像没办法去解决。如果有小伙伴和我一样也遇到过相同的问题话,请私信我下,我们都多互相交流一下。

---------------------------2018.10.16更新---------------------------

---------------------------以下为正文---------------------------

iOS内购开发大家一定不陌生,网上类似的文章能搜出千八百篇。大部分都是围绕着如何实现?如何防止漏单丢单说明的。很少有提及到越狱的,即使偶尔有一两篇说越狱,也是简单的三言两语说 为了安全,我们直接屏蔽了越狱手机的内购功能。巴拉巴拉... 以前我也是这么想的,直到上个周末发现我们的内购被破解了...才有了这篇文章。本篇文章就是来讲述越狱下的内购如何防止被破解。

首先我们先简单理一下整个内购的核心流程:

  1. 客户端发起支付订单

  2. 客户端监听购买结果

  3. 苹果回调订单购买成功时,客户端把苹果给的receipt_data和一些订单信息上报给服务器

  4. 后台服务器拿receipt_data向苹果服务器校验

  5. 苹果服务器向返回status结果,含义如下,其中为0时表示成功。

  • 21000 App Store无法读取你提供的JSON数据

  • 21002 收据数据不符合格式

  • 21003 收据无法被验证

  • 21004 你提供的共享密钥和账户的共享密钥不一致

  • 21005 收据服务器当前不可用

  • 21006 收据是有效的,但订阅服务已经过期。当收到这个信息时,解码后的收据信息也包含在返回内容中

  • 21007 收据信息是测试用(sandbox),但却被发送到产品环境中验证

  • 21008 收据信息是产品环境中使用,但却被发送到测试环境中验证

6.服务器发现订单校验成功后,会把这笔订单存起来,receipt_data用MD5值映射下,保存到数据库,防止同一笔订单,多次发放内购商品。

以上应该是主流的校验流程。当然客户端其中会插一些丢单漏单的逻辑校验,因为那些跟本篇文章无关,所以不在此展开。

从上面的流程可以看出,整个内购的核心其实就是receipt_data。苹果回调给客户端,客户端上报给服务器,服务器拿到后去向苹果服务器校验,苹果服务器再返回给我们服务器订单结果。其实严格来说,整个流程是没问题的。整个的漏洞是在最后一步上,【苹果服务器再返回给我们服务器订单结果】。receipt_data在越狱环境下是可以被插件伪造的,后台向苹果验证时,居然还能验证通过。是的,你没看错,苹果这里有个贼鸡儿坑的地方。这是最坑最坑的地方,伪造的receipt_data苹果校验也返回支付成功

如何解决?我们先来看下越狱订单和正常订单对比

越狱订单receipt_data向苹果服务器校验后如下:

相关图片

相关文章