来自 网络 2021-10-11 15:14 的文章

香港高防ip_防ddos服务_快速解决

香港高防ip_防ddos服务_快速解决

安全研究人员几年前就开始讨论Android InApp计费API中的漏洞,但我们发现值得再看一看,看看它是如何改进(或没有)并验证在应用程序中构建安全性的最佳方法。Android InApp计费API是Android框架的一个强大部分,它允许开发人员通过应用内购买和订阅轻松地将应用程序货币化。通过此API,开发者可以在其应用程序中销售内容,包括:*订阅杂志*高级功能*游戏中的额外内容谷歌负责支付过程。为了使用Android InApp计费API,你必须拥有googleplay服务。这种方法意味着信用卡数据不会暴露给开发者。Android InApp计费API提供两种不同的产品类型:*管理产品>消耗品:可多次购买(如硬币、信用卡等)。>非消耗品:只能购买一次(例如获得应用程序的专业版)。*订阅*需要定期计费的产品(每月或每年)。对于托管产品或订阅,开发人员需要在googleplay控制台中定义产品。Google使用购买令牌和订单id跟踪产品和交易。InApp计费工作流在一个高层次的概述中,使用InApp计费API执行支付时需要执行以下步骤:1.用户在移动应用程序内开始购买(即购买积分或物品)。2.移动应用程序使用Google Play API执行购买请求。3.Google Play应用程序要求用户提供付款详细信息(即信用卡、PayPal或代码)。4.支付正确后,Google会发送一个购买结果,其中包含用户购买的商品和付款的签名。5.经过移动应用程序的一些验证后,将内容发送给用户。采购验证如第四步(购买结果)中所述,Google Play向应用程序返回以下元素以验证购买的内容:*JSON对象>OrderId:用于跟踪事务的标识符>productId:购买产品的标识>purchaseState:通知购买是否成功或取消>purchaseToken:googleplay生成的字符串,用于唯一标识事务*采购签字*用私人开发者密钥签名有了这些元素,就必须执行签名验证,以确保正确执行付款。为此,开发人员需要使用他的公钥验证购买的签名。对于购买验证过程,Google建议您在开发人员控制的服务器上验证购买详细信息。谷歌表示,在设备上执行验证并不真正安全。以下是谷歌提供的最佳实践摘录:现实生活中的实现为了让开发人员熟悉InApp计费API,Google提供了一个示例应用程序来展示API的工作原理。我们可以看到应用程序内部实现了签名验证。但是,Google建议您在与应用程序通信的服务器上实现此代码。然后,还可以使用一些第三方库来处理InApp计费API。我们发现了Android应用程序使用的两个常用库:*初级31*团结查看Prime 31文档时,我们可以看到库只能执行客户端验证:在此库中,负责验证付款签名的"verify"和"verifySignature"功能位于:com.prime31网站.util使用\安全.java同样,Unity库无法处理服务器端验证:如您所见,这两个库不支持服务器端验证。InApp Android API计费漏洞InApp计费库被黑客入侵2013年,阿里云cdn高防waf,Dominik Schürmann在Google InApp账单库中发现了两个漏洞,网站被cc如何防御,允许绕过支付流程,蠕虫病毒,并能够购买无限量的物品。多米尼克在他的博客上详细描述了这些漏洞。Dominik发现的第一个漏洞允许设备上安装的恶意应用程序模拟Google Play计费服务(com.android.vending网站). 事实上,恶意应用程序有可能定义一个具有高优先级的意图过滤器,ddos防御系统拓扑位置,以便接收目标应用程序发送的请求。多米尼克发现的第二个与签名验证有关的漏洞。简而言之,如果签名是空字符串(""),verifyPurchase函数将返回true。以下是此时使用的verifyPurchase函数的示例:这个函数的问题是,默认情况下,它返回true。因此,如果签名为空,则永远不会调用verify函数并返回true。Dominik开发了一个恶意应用程序,允许您利用此漏洞进行攻击。它很容易使用,你只需编译项目并安装APK。然后,ddos防御基础,您可以使用该应用程序利用任何使用InApp计费的应用程序中的漏洞进行攻击。Google通过应用以下更改修复了这两个漏洞:1.每个使用InApp计费API的移动应用程序都应该定义哪个是目标包,目的如下:Intent serviceIntent=新意向("com.android.vending网站.billing.inappingservice.BIND"); serviceIntent.setPackage("com.android.vending网站"";Intent serviceIntent=新建意向("com.android.vending网站.billing.inappingservice.BIND");serviceIntent.setPackage("com.android.vending网站"";Intent serviceIntent=新建意向("com.android.vending网站.billing.inappingservice.BIND");serviceIntent.setPackage("com.android.vending网站");*Google修改了检查签名的函数,仅当签名有效时返回true,如下所示: InApp账单又被黑了尽管Dominik在2013年发现了该漏洞,但仍然有可能绕过InApp的计费流程,在不同的应用程序中获得无限制的积分。为了在您的Android手机中利用此问题,您不需要在设备上建立根目录或拥有任何特定权限。您只需执行以下步骤:1.安装能够冒充Google Play计费服务的恶意应用程序(com.android.vending网站). 例如,您仍然可以使用Dominik提供的代码并进行一些调整。2.使用apktool反编译目标应用程序。3.修改smali代码,将用于InApp计费的包替换为恶意应用程序。4.修改smali代码以更改执行签名验证的函数。我们的想法是在所有情况下都返回真值。5.使用apktool重新编译目标应用程序。6.与jarsigner签署新创建的包。7.在设备中安装修改后的应用程序。8.利润!注意:我在易受攻击的移动应用程序部分提供了示例和技术细节。在我们的调查中,我们发现一些移动应用程序声称他们可以在许多手机游戏中免费购买物品:*克里哈克*猎豹牌*幸运修补器经过分析,克里哈克和利奥普拉卡似乎是在利用多米尼克发现的问题。然而,googleplay商店上所有可用的应用程序都不再易受攻击。Lucky Patcher是我们发现的唯一一个修改目标应用程序的应用程序,以便将Google Play计费服务绑定到Lucky Patcher。InApp计费测试关键字Google为开发人员提供了三种在移动应用程序中测试InApp计费实现的方法。1.测试购买:开发者可以在他们的googleplay控制台中定义测试账户,进行无需任何实际收费的购买。2.真正的购买:开发者可以用他们的移动应用进行真实的交易。3.静态响应:开发人员可以使用特定关键字执行虚拟事务。谷歌提供了四个保留的产品标识:*  测试购买:当您使用此产品ID发出Google Play帐单请求时,Google Play的响应如同您成功购买了一个项目。响应包含一个JSON字符串,其中包含虚假的购买信息。*  测试已取消:当您使用此产品ID发出Google Play帐单请求时,Google Play的响应如同购买已取消。*  test.item_不可用当你的产品在Google的应用程序中被列出时,Google没有回应你的产品列表。*  测试退款:当您使用此产品ID发出Google Play帐单请求时,Google Play的响应如同购买已退款一样。然而,这个静态响应似乎被移除了。只有在调试应用程序或在测试环境中使用这些静态响应。然而,我们发现一些移动应用仍然允许在其生产代码中使用静态响应!在2017年里斯本BSides大会上,Jérémy Matos就这一主题做了很好的演讲。允许这些静态响应的移动应用程序的第一个例子是pandapp。在验证过程中,移动应用程序检查静态响应是否使用"android.test.已购买"在这种情况下,付款的签名没有得到验证。文件:com.prime31网站\谷歌插件功能:purchaseProduct文件:com.prime31网站.util\iaHelperImpl函数:handleActivityResult另一个例子是名为Android InApp Billing v3的库。它是一个类似于Prime31和Unity的开源库,用于处理对InApp计费API的请求。当您查看库的源代码时,您可以找到安全.java"verifyPurchase"函数中包含以下行的文件:public static boolean verifyPurchase(字符串productId,String base64PublicKey,String signedData,字符串签名){if(TextUtils.isEmpty文本实用程序(签名数据)TextUtils.isEmpty文本实用程序(base64PublicKey)| |TextUtils.isEmpty文本实用程序(签名)){if(产品ID.equals("android.test.已购买") ||