我有订阅应用内购买的android应用。因为我正在使用订阅从在线服务传递数据,所以我正在通过Google Play API在服务器端使用购买验证(购买后该应用会向我发送购买 token )。我的数据库中的大多数购买 token 都是长字母数字字符串,如下所示:

djcbhbiertdkkotyuupnlmioppb.AO-J1Ozg0oasdfB3MAlWy-PihFE_nPVRMMfTW2_VPJt5KTKQA3CXNwyqweJAtUdIGTuOW9zEIIy-XS_4Un-a-Co6aEs__Adj1rZ4GtRxPKr04ph-l6nP2sU-w6e500YfTj5l0O8WEXF37yt

并且这些都经过验证,确定。但有时我会收到仅包含15位数字的购买 token ,如下所示:
781871156762279

对于这些结果,它总是:
Google.GoogleApiException Google.Apis.Requests.RequestError
The purchase token was not found. [404]
Errors [
    Message[The purchase token was not found.] Location[token - parameter] Reason[purchaseTokenNotFound] Domain[global]
]

我没有在文档中找到关于此的任何信息。我想念什么吗?还是这些是从我的应用程序的某些破解版本中进行的“虚假”购买?谢谢。

最佳答案

我收到了相同的15位数字的短期购买 token ,我相信这些实际上是在进行欺诈性购买。

破解的不是您的应用程序。而是,用户将一个特殊的应用程序安装到有根设备上,该设备会对您的应用程序进行中间人攻击,从而模拟合法的应用程序内计费服务。当您的应用开始购买流程时,此欺诈性应用会拦截购买请求,并返回伪造的购买 token 。

在本地验证 token 的应用程序很容易受到攻击,因为同一欺诈性应用程序用于验证 token 。

将 token 发送到后端的应用程序可能更安全,因为后端可以向in-app billing API发出请求以独立验证 token 。但是,在向用户授予购买的特权之前,应用程序必须等待后端验证成功。

有关此攻击的更多详细信息,请参见my other answer

10-07 19:40
查看更多