Android 应用内计费API(IAB版本3)安全性

Android 应用内计费API(IAB版本3)安全性,android,in-app-purchase,in-app-billing,Android,In App Purchase,In App Billing,现在我第一次加入IAB。我已经阅读了文档,下载了示例,它似乎很有效。 然而,设置并不是我的问题,我想了解谷歌的以下两条建议,它们应该可以提高安全性 加密公钥 如果攻击者对我的应用程序进行反编译,他还可以删除我的加密、字符串拆分或位转移内容 开发人员负载 这里也一样。事实上,我可以按照谷歌推荐的方式来做。我的服务器上有用户ID,可以将其放入请求中,然后进行比较……但我认为在反编译我的应用程序时,很容易从代码中删除此逻辑 我用Proguard混淆了我的代码,我总是先反编译我的应用程序,然后再

现在我第一次加入IAB。我已经阅读了文档,下载了示例,它似乎很有效。 然而,设置并不是我的问题,我想了解谷歌的以下两条建议,它们应该可以提高安全性

  • 加密公钥
如果攻击者对我的应用程序进行反编译,他还可以删除我的加密、字符串拆分或位转移内容

  • 开发人员负载
这里也一样。事实上,我可以按照谷歌推荐的方式来做。我的服务器上有用户ID,可以将其放入请求中,然后进行比较……但我认为在反编译我的应用程序时,很容易从代码中删除此逻辑

我用Proguard混淆了我的代码,我总是先反编译我的应用程序,然后再上传到GooglePlay,看看它是否正常工作,安装是否正确。这就是为什么我说这两个建议没有带来很大的安全好处

我也知道私钥/公钥系统是如何工作的。这就是为什么我可以说,不进行反编译就不可能让我的应用程序与“假”服务器通信。如果谷歌不使用某种异步加密,我可能理解为什么我必须检查响应是否来自假服务器

你能帮我理解吗

干杯,
Stefan

安全性是在黑客攻击你的应用程序和从黑客攻击中获益之间的权衡。如果你的应用程序花费99美分,黑客需要3个小时才能破解,而且他需要一次又一次地破解每一个新版本,那么投入时间破解是没有意义的,尽管他在技术上可以做到这一点。只要实施尽可能多的安全措施,就可以让你的应用程序成为黑客攻击的目标

不安全存储的公钥将允许攻击者轻松地用自己的公钥替换它。如果您的公钥被替换,则您的应用程序将成功验证由攻击者服务器签名的响应。这就是为什么你需要让在应用程序中查找和替换公钥变得更加困难的原因

发展有效载荷。当攻击者试图向您的应用返回有效的签名响应时,它用于保护您的应用免受攻击,该响应过去已被另一用户的另一次购买使用。例如,我在过去购买了你的应用程序的一个扩展,并以字节形式存储了Google Play响应。如果您的代码无法区分两个有效的响应,那么我可以将此响应提供给其他用户,他们可以使用此响应进行进一步购买。这就是为什么谷歌建议添加一个开发负载,当一个有效的响应返回时,您可以验证它。在一个简单的情况下,这可以是用户的电子邮件。在更复杂的情况下,您需要一个服务器,它将为用户的购买生成一个字符串并将其存储在数据库中。稍后,当响应返回时,它将对生成的字符串验证此响应


我希望这能让您更好地理解为什么需要这样做。

感谢您的回复。我还是不明白。我不明白黑客怎么能给我一个有效的签名回复。您需要私钥来创建有效的签名。如果这个系统不安全,那么所有的netbanking(实际上是所有https)站点都不安全。我已经添加了开发人员负载,但我不喜欢它,因为我需要两个额外的网络呼叫…以黑客的身份思考。我在我的设备上设置根目录,并在Google Play应用程序中插入指令,使其存储真实有效的签名响应。我曾经向你买过东西,我有这样的反应。现在我可以给任何其他用户这个响应,如果用户可以用这个替换真实的响应,你的应用程序将始终接受它。啊啊啊啊。。。我想我开始理解:)当我没有放置自定义负载时,响应被正确地签名,但没有绑定到任何人或任何东西。这就像一个通配符^^^只有当我放入一个自定义负载时,该包的哈希(指纹)才会改变……我说的对吗?但这意味着使用用户帐户(电子邮件?)作为有效负载就足够了。所以我可以删除我的两个网络呼叫,而不需要服务器,对吗?但如果这是你描述的方式,我想知道为什么谷歌不在软件包中添加时间戳之类的东西,这样就不能重复使用…你的应用程序将如何验证应用程序未添加(意思未知)的时间戳?你需要一些你的应用程序知道的和它可以验证的东西。如果愿意,还可以使用时间戳。但这是你的应用程序,必须设置它。我使用一个随机生成的字符串,它工作得很好。