Android上的Google Play提供了许可检查服务com.android.vending.licensing.ILicensingService
。它支持回调接口ILicenseResultListener
。它有一个方法verifyLicense
,有三个参数。对于已从Google Play下载的付费应用,请问第二个signedData
中的内容是什么?
而this就是我想知道的原因。
答案 0 :(得分:0)
答案在android-sdk-windows \ extras \ google \ market_licensing \ library \ src \ com \ google \ android \ vending \ licensing \ ResponseData.java中,在parse()方法中。
signedData字符串是由6个字段组成的序列,以|分隔,可选地后跟冒号和& -separated name = value集合(如查询字符串)。例如:
0|17|com.acme.myapp|1|AAAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHH==|1480563297411:GR=10&VT=1480570457760>=1481088857760
这个来自付费应用。
第一部分中的6个字段是:
verifyLicense
的第一个参数checkLicense
电话UserID似乎是Base64编码的字符串。它识别哪个用户,以及如何识别?许可证持有者,一个人假设;但怎么样?解码提供一个25字节长的字节数组。
对于侧载应用程序,基本字段就是全部。对于商店购买的应用程序,还有额外的数据。可以找到额外数据字段的含义here。具体来说,使用新购买的应用程序,会出现以下额外字段:
关于UserID,我做了一些测试。我有三个案例:
在所有三种情况下,解码的UserID的前5个字节匹配,其余的不匹配。因此,无法在UserID中轻松识别包独特部分和用户唯一部分。值得注意的是,剩余部分长度为20个字节 - 可能是MD5哈希值。 UserID绝对不是任何合理编码中的字符串,并且它看起来也不像是具有二进制整数的结构。看似随机的位模式指向散列或密文。后者不太可能。